diff --git a/src/main.c b/src/main.c index dc2737a..ff6bec9 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,7 @@ #include "cmsis_os.h" #include "cppmain.h" #include "usb_device.h" +#include "stm32f4xx_hal_cortex.h" DAC_HandleTypeDef hdac1; DMA_HandleTypeDef hdma_dac1; @@ -13,7 +14,7 @@ RNG_HandleTypeDef hrng; extern PCD_HandleTypeDef hpcd_USB_OTG_FS; -void SystemClock_Config(void) +void sysclk_init(void) { RCC_OscInitTypeDef RCC_OscInitStruct = { 0 }; RCC_ClkInitTypeDef RCC_ClkInitStruct = { 0 }; @@ -165,60 +166,56 @@ void OTG_FS_IRQHandler(void) // Peripheral init // -------------------------------------------------------------------------------------------------- -void MX_GPIO_Init(void) +void gpio_init(void) { HAL_GPIO_WritePin(GPIOD, GPIO_PIN_12, GPIO_PIN_RESET); { - GPIO_InitTypeDef GPIO_InitStruct = { 0 }; + GPIO_InitTypeDef conf = { 0 }; - GPIO_InitStruct.Pin = GPIO_PIN_0; - GPIO_InitStruct.Mode = GPIO_MODE_IT_RISING; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + conf.Pin = GPIO_PIN_0; + conf.Mode = GPIO_MODE_IT_RISING; + conf.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &conf); } { - GPIO_InitTypeDef GPIO_InitStruct = { 0 }; + GPIO_InitTypeDef conf = { 0 }; - GPIO_InitStruct.Pin = GPIO_PIN_12; - GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; - GPIO_InitStruct.Pull = GPIO_NOPULL; - GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + conf.Pin = GPIO_PIN_12; + conf.Mode = GPIO_MODE_OUTPUT_PP; + conf.Pull = GPIO_NOPULL; + conf.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOD, &conf); } { - GPIO_InitTypeDef GPIO_InitStruct = { 0 }; - GPIO_InitStruct.Pin = GPIO_PIN_4; - GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; - GPIO_InitStruct.Pull = GPIO_NOPULL; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - } + GPIO_InitTypeDef conf = { 0 }; - HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(EXTI0_IRQn); + conf.Pin = GPIO_PIN_4; + conf.Mode = GPIO_MODE_ANALOG; + conf.Pull = GPIO_NOPULL; + HAL_GPIO_Init(GPIOA, &conf); + } } - -// -------------------------------------------------------------------------------------------------- -// Peripheral init -// -------------------------------------------------------------------------------------------------- - -void MX_DAC_Init(void) +void dac_init(void) { - DAC_ChannelConfTypeDef conf = { 0 }; hdac1.Instance = DAC1; if (HAL_DAC_Init(&hdac1) != HAL_OK) { Error_Handler(); } + DAC_ChannelConfTypeDef conf = { 0 }; conf.DAC_Trigger = DAC_TRIGGER_T6_TRGO; conf.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE; if (HAL_DAC_ConfigChannel(&hdac1, &conf, DAC_CHANNEL_1) != HAL_OK) { Error_Handler(); } +} +void dma_init(void) +{ hdma_dac1.Instance = DMA1_Stream5; hdma_dac1.Init.Channel = DMA_CHANNEL_7; hdma_dac1.Init.Direction = DMA_MEMORY_TO_PERIPH; @@ -233,41 +230,20 @@ void MX_DAC_Init(void) Error_Handler(); } - __HAL_LINKDMA(&hdac1, DMA_Handle1, hdma_dac1); -} - -void HAL_DAC_MspDeInit(DAC_HandleTypeDef *dacHandle) -{ - if (dacHandle->Instance == DAC1) { - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4 | GPIO_PIN_5); - HAL_DMA_DeInit(dacHandle->DMA_Handle1); - } -} - - -// -------------------------------------------------------------------------------------------------- -// Peripheral init -// -------------------------------------------------------------------------------------------------- +// Originally that was: +// __HAL_LINKDMA(&hdac1, DMA_Handle1, hdma_dac1); +// Exapanded to: +// hdma_dac1.Parent = &hdac1; + hdac1.DMA_Handle1 = &hdma_dac1; -void MX_DMA_Init(void) -{ - - /* DMA interrupt init */ - /* DMA1_Stream5_IRQn interrupt configuration */ - HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); } - // -------------------------------------------------------------------------------------------------- // Timers // -------------------------------------------------------------------------------------------------- -void MX_TIM2_Init(void) +void tim2_init(void) { - TIM_ClockConfigTypeDef sClockSourceConfig = { 0 }; - TIM_MasterConfigTypeDef sMasterConfig = { 0 }; - htim2.Instance = TIM2; htim2.Init.Prescaler = 0; htim2.Init.CounterMode = TIM_COUNTERMODE_UP; @@ -277,10 +253,14 @@ void MX_TIM2_Init(void) if (HAL_TIM_Base_Init(&htim2) != HAL_OK) { Error_Handler(); } + + TIM_ClockConfigTypeDef sClockSourceConfig = { 0 }; sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; if (HAL_TIM_ConfigClockSource(&htim2, &sClockSourceConfig) != HAL_OK) { Error_Handler(); } + + TIM_MasterConfigTypeDef sMasterConfig = { 0 }; sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim2, &sMasterConfig) != HAL_OK) { @@ -288,10 +268,8 @@ void MX_TIM2_Init(void) } } -void MX_TIM6_Init(void) +void tim6_init(void) { - TIM_MasterConfigTypeDef sMasterConfig = { 0 }; - htim6.Instance = TIM6; htim6.Init.Prescaler = 0; htim6.Init.CounterMode = TIM_COUNTERMODE_UP; @@ -300,6 +278,8 @@ void MX_TIM6_Init(void) if (HAL_TIM_Base_Init(&htim6) != HAL_OK) { Error_Handler(); } + + TIM_MasterConfigTypeDef sMasterConfig = { 0 }; sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim6, &sMasterConfig) != HAL_OK) { @@ -307,10 +287,8 @@ void MX_TIM6_Init(void) } } -void MX_TIM7_Init(void) +void tim7_init(void) { - TIM_MasterConfigTypeDef sMasterConfig = { 0 }; - htim7.Instance = TIM7; htim7.Init.Prescaler = 10000; htim7.Init.CounterMode = TIM_COUNTERMODE_UP; @@ -319,6 +297,8 @@ void MX_TIM7_Init(void) if (HAL_TIM_Base_Init(&htim7) != HAL_OK) { Error_Handler(); } + + TIM_MasterConfigTypeDef sMasterConfig = { 0 }; sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; if (HAL_TIMEx_MasterConfigSynchronization(&htim7, &sMasterConfig) != HAL_OK) { @@ -326,37 +306,29 @@ void MX_TIM7_Init(void) } } -void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *tim_baseHandle) +void irq_init() { - if (tim_baseHandle->Instance == TIM2) { - /* TIM2 interrupt Init */ - HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(TIM2_IRQn); - } else if (tim_baseHandle->Instance == TIM6) { - } else if (tim_baseHandle->Instance == TIM7) { - - /* TIM7 interrupt Init */ - HAL_NVIC_SetPriority(TIM7_IRQn, 5, 0); - HAL_NVIC_EnableIRQ(TIM7_IRQn); - } -} + // This is for RTOS i guess + // HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0); -void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *tim_baseHandle) -{ - if (tim_baseHandle->Instance == TIM2) { - HAL_NVIC_DisableIRQ(TIM2_IRQn); - } else if (tim_baseHandle->Instance == TIM6) { - } else if (tim_baseHandle->Instance == TIM7) { - HAL_NVIC_DisableIRQ(TIM7_IRQn); - } -} + HAL_NVIC_SetPriority(DMA1_Stream5_IRQn, 1, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream5_IRQn); + + HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(TIM2_IRQn); + HAL_NVIC_SetPriority(TIM7_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(TIM7_IRQn); + + HAL_NVIC_SetPriority(EXTI0_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(EXTI0_IRQn); +} // -------------------------------------------------------------------------------------------------- // Random Number Generator (RNG) // -------------------------------------------------------------------------------------------------- -void MX_RNG_Init(void) +void rng_init(void) { hrng.Instance = RNG; if (HAL_RNG_Init(&hrng) != HAL_OK) { @@ -371,7 +343,6 @@ void Error_Handler(void) while (1) {} } -#ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. @@ -384,47 +355,41 @@ void assert_failed(uint8_t *file, uint32_t line) /* User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ } -#endif /* USE_FULL_ASSERT */ -osThreadId_t defaultTaskHandle; -const osThreadAttr_t defaultTask_attributes = { - .name = "defaultTask", - .stack_size = 128 * 4, - .priority = (osPriority_t)osPriorityNormal, -}; -void StartDefaultTask(void *argument) +void rtos_default_task(void *argument) { - MX_USB_DEVICE_Init(); heck_cppmain(); } -void MX_FREERTOS_Init(void) +void rtos_init(void) { - defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); + const osThreadAttr_t defaultTask_attributes = { + .name = "defaultTask", + .stack_size = 128 * 4, + .priority = (osPriority_t)osPriorityNormal, + }; + osThreadId_t defaultTaskHandle; + defaultTaskHandle = osThreadNew(rtos_default_task, NULL, &defaultTask_attributes); } - int main(void) { HAL_Init(); - SystemClock_Config(); - - MX_GPIO_Init(); - MX_DMA_Init(); - MX_DAC_Init(); - MX_TIM2_Init(); - MX_TIM6_Init(); - MX_TIM7_Init(); - MX_RNG_Init(); + sysclk_init(); + + MX_USB_DEVICE_Init(); // USB first, for logging over serial port + gpio_init(); + dac_init(); + tim2_init(); + tim6_init(); + tim7_init(); + rng_init(); + irq_init(); + dma_init(); osKernelInitialize(); - MX_FREERTOS_Init(); - osKernelStart(); -} -void HAL_MspInit(void) -{ - - HAL_NVIC_SetPriority(PendSV_IRQn, 15, 0); + rtos_init(); + osKernelStart(); } diff --git a/src/main.h b/src/main.h index ac9c1e0..1162613 100644 --- a/src/main.h +++ b/src/main.h @@ -9,18 +9,17 @@ extern "C" { #endif extern DAC_HandleTypeDef hdac1; - extern RNG_HandleTypeDef hrng; extern TIM_HandleTypeDef htim2; extern TIM_HandleTypeDef htim6; extern TIM_HandleTypeDef htim7; + extern RNG_HandleTypeDef hrng; - void MX_DAC_Init(void); - void MX_DMA_Init(void); - void MX_GPIO_Init(void); - void MX_RNG_Init(void); - void MX_TIM2_Init(void); - void MX_TIM6_Init(void); - void MX_TIM7_Init(void); + void dac_init(void); + void gpio_init(void); + void rng_init(void); + void tim2_init(void); + void tim6_init(void); + void tim7_init(void); void Error_Handler(void);