From 97e53dad8ef39f03a6759885e05ef32e22685d48 Mon Sep 17 00:00:00 2001 From: JPNguyen38 Date: Mon, 23 Feb 2026 15:21:32 -0600 Subject: [PATCH 1/4] fix usb setup and fix sdmmc hang need to install usbipd-win. in windows cmd: winget install usbipd run usbipd list to find the busid of the STM32 usbipd bind --busid to allow docker to access it usbipd attach --wsl --busid to give it to docker in vscode container terminal: chmod -R 777 /dev/ttyACM0 to give read, write, execute permissions for the STM32 to the container --- .devcontainer/docker-compose.yaml | 3 ++ .devcontainer/dockerfile | 2 + .settings/bundles-lock.store.json | 66 +++++++++++++++++++++++++++++++ .settings/bundles.store.json | 8 ++++ .vscode/settings.json | 4 +- Core/Src/main.c | 27 +++++++------ Core/Src/stm32h7xx_hal_msp.c | 6 +-- STM32-config.ioc | 54 ++++++++++++------------- 8 files changed, 122 insertions(+), 48 deletions(-) diff --git a/.devcontainer/docker-compose.yaml b/.devcontainer/docker-compose.yaml index 81b86fc..c333146 100644 --- a/.devcontainer/docker-compose.yaml +++ b/.devcontainer/docker-compose.yaml @@ -6,6 +6,9 @@ services: image: alexdbui/vcu:latest volumes: - ..:/workspaces:cached + - /dev/ttyACM0:/dev/ttyACM0 + devices: + - "/dev/ttyACM0:/dev/ttyACM0" network_mode: host privileged: true stdin_open: true diff --git a/.devcontainer/dockerfile b/.devcontainer/dockerfile index 190a0ef..48aaaf2 100644 --- a/.devcontainer/dockerfile +++ b/.devcontainer/dockerfile @@ -13,6 +13,8 @@ RUN apt-get update && apt-get install -y \ libnewlib-arm-none-eabi \ openocd \ stlink-tools \ + libglib2.0-0 \ + libncurses5 \ && rm -rf /var/lib/apt/lists/* WORKDIR /opt diff --git a/.settings/bundles-lock.store.json b/.settings/bundles-lock.store.json index c3636ad..85f10f0 100644 --- a/.settings/bundles-lock.store.json +++ b/.settings/bundles-lock.store.json @@ -121,6 +121,39 @@ } ] }, + { + "name": "programmer", + "version": "2.21.0", + "platform": "darwin", + "selected_by": [ + { + "name": "programmer", + "version": "2.21.0" + } + ] + }, + { + "name": "programmer", + "version": "2.21.0", + "platform": "x86_64-linux", + "selected_by": [ + { + "name": "programmer", + "version": "2.21.0" + } + ] + }, + { + "name": "programmer", + "version": "2.21.0", + "platform": "x86_64-windows", + "selected_by": [ + { + "name": "programmer", + "version": "2.21.0" + } + ] + }, { "name": "st-arm-clangd", "version": "19.1.2+st.3", @@ -153,6 +186,39 @@ "version": "19.1.2+st.3" } ] + }, + { + "name": "stlink-gdbserver", + "version": "7.12.0+st.2", + "platform": "darwin", + "selected_by": [ + { + "name": "stlink-gdbserver", + "version": "7.12.0+st.2" + } + ] + }, + { + "name": "stlink-gdbserver", + "version": "7.12.0+st.2", + "platform": "x86_64-linux", + "selected_by": [ + { + "name": "stlink-gdbserver", + "version": "7.12.0+st.2" + } + ] + }, + { + "name": "stlink-gdbserver", + "version": "7.12.0+st.2", + "platform": "x86_64-windows", + "selected_by": [ + { + "name": "stlink-gdbserver", + "version": "7.12.0+st.2" + } + ] } ] } diff --git a/.settings/bundles.store.json b/.settings/bundles.store.json index dd143ba..f624467 100644 --- a/.settings/bundles.store.json +++ b/.settings/bundles.store.json @@ -15,6 +15,14 @@ { "name": "st-arm-clangd", "version": "19.1.2+st.3" + }, + { + "name": "programmer", + "version": "2.21.0" + }, + { + "name": "stlink-gdbserver", + "version": "7.12.0+st.2" } ] } diff --git a/.vscode/settings.json b/.vscode/settings.json index c637d64..97b9bec 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -9,7 +9,7 @@ "stm32cube-ide-clangd.path": "cube", "stm32cube-ide-clangd.arguments": [ "starm-clangd", - "--query-driver=${env:CUBE_BUNDLE_PATH}/gnu-tools-for-stm32/14.3.1+st.2/bin/arm-none-eabi-gcc.exe", - "--query-driver=${env:CUBE_BUNDLE_PATH}/gnu-tools-for-stm32/14.3.1+st.2/bin/arm-none-eabi-g++.exe" + "--query-driver=${env:CUBE_BUNDLE_PATH}/gnu-tools-for-stm32/14.3.1+st.2/bin/arm-none-eabi-gcc", + "--query-driver=${env:CUBE_BUNDLE_PATH}/gnu-tools-for-stm32/14.3.1+st.2/bin/arm-none-eabi-g++" ] } \ No newline at end of file diff --git a/Core/Src/main.c b/Core/Src/main.c index cea1896..e46e352 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -19,6 +19,7 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "cmsis_os.h" +#include "stm32h7xx_hal_gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -696,7 +697,7 @@ static void MX_SDMMC1_SD_Init(void) hsd1.Init.ClockDiv = 0; if (HAL_SD_Init(&hsd1) != HAL_OK) { - Error_Handler(); + // Error_Handler(); } /* USER CODE BEGIN SDMMC1_Init 2 */ @@ -1162,34 +1163,34 @@ static void MX_GPIO_Init(void) __HAL_RCC_GPIOD_CLK_ENABLE(); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOA, GPIO_PIN_14|BRAKE_L_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOB, GPIO_PIN_0|BSE_F_Pin|GPS_PWR2_Pin|GPS_PWR1_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOD, BSE_R_Pin|MAster_Control_Pin|RTD_Button_DIGI_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(BRAKE_L_GPIO_Port, BRAKE_L_Pin, GPIO_PIN_RESET); /*Configure GPIO pin Output Level */ - HAL_GPIO_WritePin(GPIOB, BSE_F_Pin|GPS_PWR2_Pin|GPS_PWR1_Pin, GPIO_PIN_RESET); + HAL_GPIO_WritePin(GPIOD, BSE_R_Pin|MAster_Control_Pin|RTD_Button_DIGI_Pin, GPIO_PIN_RESET); - /*Configure GPIO pins : PA14 BRAKE_L_Pin */ - GPIO_InitStruct.Pin = GPIO_PIN_14|BRAKE_L_Pin; + /*Configure GPIO pins : PB0 BSE_F_Pin GPS_PWR2_Pin GPS_PWR1_Pin */ + GPIO_InitStruct.Pin = GPIO_PIN_0|BSE_F_Pin|GPS_PWR2_Pin|GPS_PWR1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); - /*Configure GPIO pins : BSE_R_Pin MAster_Control_Pin RTD_Button_DIGI_Pin */ - GPIO_InitStruct.Pin = BSE_R_Pin|MAster_Control_Pin|RTD_Button_DIGI_Pin; + /*Configure GPIO pin : BRAKE_L_Pin */ + GPIO_InitStruct.Pin = BRAKE_L_Pin; 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); + HAL_GPIO_Init(BRAKE_L_GPIO_Port, &GPIO_InitStruct); - /*Configure GPIO pins : BSE_F_Pin GPS_PWR2_Pin GPS_PWR1_Pin */ - GPIO_InitStruct.Pin = BSE_F_Pin|GPS_PWR2_Pin|GPS_PWR1_Pin; + /*Configure GPIO pins : BSE_R_Pin MAster_Control_Pin RTD_Button_DIGI_Pin */ + GPIO_InitStruct.Pin = BSE_R_Pin|MAster_Control_Pin|RTD_Button_DIGI_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; - HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); /* USER CODE BEGIN MX_GPIO_Init_2 */ diff --git a/Core/Src/stm32h7xx_hal_msp.c b/Core/Src/stm32h7xx_hal_msp.c index 9e8e006..7539e19 100644 --- a/Core/Src/stm32h7xx_hal_msp.c +++ b/Core/Src/stm32h7xx_hal_msp.c @@ -114,7 +114,6 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) PA7 ------> ADC1_INP7 PC4 ------> ADC1_INP4 PC5 ------> ADC1_INP8 - PB0 ------> ADC1_INP9 PB1 ------> ADC1_INP5 */ GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5; @@ -127,7 +126,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); - GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1; + GPIO_InitStruct.Pin = GPIO_PIN_1; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); @@ -219,14 +218,13 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) PA7 ------> ADC1_INP7 PC4 ------> ADC1_INP4 PC5 ------> ADC1_INP8 - PB0 ------> ADC1_INP9 PB1 ------> ADC1_INP5 */ HAL_GPIO_DeInit(GPIOC, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_4|GPIO_PIN_5); HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3|GPIO_PIN_6|GPIO_PIN_7); - HAL_GPIO_DeInit(GPIOB, GPIO_PIN_0|GPIO_PIN_1); + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_1); /* USER CODE BEGIN ADC1_MspDeInit 1 */ diff --git a/STM32-config.ioc b/STM32-config.ioc index 77a0970..471fe6e 100644 --- a/STM32-config.ioc +++ b/STM32-config.ioc @@ -101,36 +101,35 @@ Mcu.Pin28=PA8 Mcu.Pin29=PA11 Mcu.Pin3=PC1 Mcu.Pin30=PA12 -Mcu.Pin31=PA14(JTCK/SWCLK) -Mcu.Pin32=PA15(JTDI) -Mcu.Pin33=PC10 -Mcu.Pin34=PC11 -Mcu.Pin35=PC12 -Mcu.Pin36=PD0 -Mcu.Pin37=PD1 -Mcu.Pin38=PD2 -Mcu.Pin39=PD3 +Mcu.Pin31=PA15(JTDI) +Mcu.Pin32=PC10 +Mcu.Pin33=PC11 +Mcu.Pin34=PC12 +Mcu.Pin35=PD0 +Mcu.Pin36=PD1 +Mcu.Pin37=PD2 +Mcu.Pin38=PD3 +Mcu.Pin39=PD4 Mcu.Pin4=PC2_C -Mcu.Pin40=PD4 -Mcu.Pin41=PD5 -Mcu.Pin42=PD6 -Mcu.Pin43=PD7 -Mcu.Pin44=PB3(JTDO/TRACESWO) -Mcu.Pin45=PB4(NJTRST) -Mcu.Pin46=PB5 -Mcu.Pin47=PB6 -Mcu.Pin48=PB7 -Mcu.Pin49=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin40=PD5 +Mcu.Pin41=PD6 +Mcu.Pin42=PD7 +Mcu.Pin43=PB3(JTDO/TRACESWO) +Mcu.Pin44=PB4(NJTRST) +Mcu.Pin45=PB5 +Mcu.Pin46=PB6 +Mcu.Pin47=PB7 +Mcu.Pin48=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin49=VP_RAMECC_VS_D1_1 Mcu.Pin5=PC3_C -Mcu.Pin50=VP_RAMECC_VS_D1_1 -Mcu.Pin51=VP_SYS_VS_tim3 -Mcu.Pin52=VP_TIM5_VS_NoInput1 -Mcu.Pin53=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin50=VP_SYS_VS_tim3 +Mcu.Pin51=VP_TIM5_VS_NoInput1 +Mcu.Pin52=VP_MEMORYMAP_VS_MEMORYMAP Mcu.Pin6=PA2 Mcu.Pin7=PA3 Mcu.Pin8=PA5 Mcu.Pin9=PA6 -Mcu.PinsNb=54 +Mcu.PinsNb=53 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32H723VGTx @@ -185,8 +184,6 @@ PA11.Mode=FDCAN_Activate PA11.Signal=FDCAN1_RX PA12.Mode=FDCAN_Activate PA12.Signal=FDCAN1_TX -PA14(JTCK/SWCLK).Locked=true -PA14(JTCK/SWCLK).Signal=GPIO_Output PA15(JTDI).GPIOParameters=GPIO_Label PA15(JTDI).GPIO_Label=BRAKE_L PA15(JTDI).Locked=true @@ -197,7 +194,8 @@ PA5.Signal=S_TIM2_CH1_ETR PA6.Signal=ADCx_INP3 PA7.Signal=ADCx_INP7 PA8.Signal=S_TIM1_CH1 -PB0.Signal=ADCx_INP9 +PB0.Locked=true +PB0.Signal=GPIO_Output PB1.Signal=ADCx_INP5 PB10.Signal=S_TIM2_CH3 PB11.Signal=S_TIM2_CH4 @@ -399,8 +397,6 @@ SH.ADCx_INP7.0=ADC1_INP7,IN7-Single-Ended SH.ADCx_INP7.ConfNb=1 SH.ADCx_INP8.0=ADC1_INP8,IN8-Single-Ended SH.ADCx_INP8.ConfNb=1 -SH.ADCx_INP9.0=ADC1_INP9,IN9-Single-Ended -SH.ADCx_INP9.ConfNb=1 SH.S_TIM12_CH1.0=TIM12_CH1,Input_Capture1_from_TI1 SH.S_TIM12_CH1.ConfNb=1 SH.S_TIM12_CH2.0=TIM12_CH2,Input_Capture2_from_TI2 From 08e7589216c3b592f6ab525f87368cc98fd894dc Mon Sep 17 00:00:00 2001 From: JPNguyen38 Date: Tue, 24 Feb 2026 14:05:31 -0600 Subject: [PATCH 2/4] add adc dual mode and fix sdmmc hang (again) also changed the build preset to debug in order to use live watch --- .clangd | 2 +- .mxproject | 2 +- CMakePresets.json | 7 +- Core/Inc/stm32h7xx_it.h | 3 + Core/Src/main.c | 177 ++++++++++------ Core/Src/stm32h7xx_hal_msp.c | 98 ++++++++- Core/Src/stm32h7xx_it.c | 47 +++++ STM32-config.ioc | 391 +++++++++++++++++++++-------------- STM32H723XG_FLASH.ld | 8 +- 9 files changed, 506 insertions(+), 229 deletions(-) diff --git a/.clangd b/.clangd index dba126d..50c62c4 100644 --- a/.clangd +++ b/.clangd @@ -2,7 +2,7 @@ CompileFlags: Add: - '-ferror-limit=0' - '-Wno-implicit-int' - CompilationDatabase: build/Release + CompilationDatabase: build/Debug Diagnostics: Suppress: - unused-includes diff --git a/.mxproject b/.mxproject index ffe918c..73a0d51 100644 --- a/.mxproject +++ b/.mxproject @@ -4,7 +4,7 @@ LibFiles=Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_ [PreviousUsedCMakes] SourceFiles=Core\Src\main.c;Core\Src\freertos.c;Core\Src\stm32h7xx_it.c;Core\Src\stm32h7xx_hal_msp.c;Core\Src\stm32h7xx_hal_timebase_tim.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_adc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_adc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_fdcan.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_ramecc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_ll_sdmmc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_ll_delayblock.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sd.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sd_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mmc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mmc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM4F\port.c;Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;Core\Src\system_stm32h7xx.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_tim_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_adc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_adc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_rcc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_flash_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_gpio.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_hsem.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_dma_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mdma.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_pwr_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_cortex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_i2c_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_exti.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_fdcan.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_ramecc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_ll_sdmmc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_ll_delayblock.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sd.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_sd_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mmc.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_mmc_ex.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart.c;Drivers\STM32H7xx_HAL_Driver\Src\stm32h7xx_hal_uart_ex.c;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM4F\port.c;Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;Core\Src\system_stm32h7xx.c;;;Middlewares\Third_Party\FreeRTOS\Source\croutine.c;Middlewares\Third_Party\FreeRTOS\Source\event_groups.c;Middlewares\Third_Party\FreeRTOS\Source\list.c;Middlewares\Third_Party\FreeRTOS\Source\queue.c;Middlewares\Third_Party\FreeRTOS\Source\stream_buffer.c;Middlewares\Third_Party\FreeRTOS\Source\tasks.c;Middlewares\Third_Party\FreeRTOS\Source\timers.c;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.c;Middlewares\Third_Party\FreeRTOS\Source\portable\MemMang\heap_4.c;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM4F\port.c; HeaderPath=Drivers\STM32H7xx_HAL_Driver\Inc;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy;Middlewares\Third_Party\FreeRTOS\Source\include;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2;Middlewares\Third_Party\FreeRTOS\Source\portable\GCC\ARM_CM4F;Drivers\CMSIS\Device\ST\STM32H7xx\Include;Drivers\CMSIS\Include;Core\Inc; -CDefines=USE_PWR_LDO_SUPPLY;USE_HAL_DRIVER;STM32H723xx;USE_HAL_DRIVER;USE_HAL_DRIVER; +CDefines=USE_PWR_LDO_SUPPLY;USE_PWR_LDO_SUPPLY;USE_HAL_DRIVER;STM32H723xx;USE_HAL_DRIVER;USE_HAL_DRIVER; [PreviousGenFiles] AdvancedFolderStructure=true diff --git a/CMakePresets.json b/CMakePresets.json index 9a0c120..fa56044 100644 --- a/CMakePresets.json +++ b/CMakePresets.json @@ -6,9 +6,8 @@ "hidden": true, "generator": "Ninja", "binaryDir": "${sourceDir}/build/${presetName}", - "toolchainFile": "${sourceDir}/cmake/gcc-arm-none-eabi.cmake", - "cacheVariables": { - } + "toolchainFile": "${sourceDir}/cmake/gcc-arm-none-eabi.cmake", + "cacheVariables": {} }, { "name": "Debug", @@ -33,6 +32,6 @@ { "name": "Release", "configurePreset": "Release" - } + } ] } \ No newline at end of file diff --git a/Core/Inc/stm32h7xx_it.h b/Core/Inc/stm32h7xx_it.h index e85b583..6e7d67f 100644 --- a/Core/Inc/stm32h7xx_it.h +++ b/Core/Inc/stm32h7xx_it.h @@ -52,6 +52,9 @@ void MemManage_Handler(void); void BusFault_Handler(void); void UsageFault_Handler(void); void DebugMon_Handler(void); +void DMA1_Stream0_IRQHandler(void); +void DMA1_Stream1_IRQHandler(void); +void ADC_IRQHandler(void); void TIM3_IRQHandler(void); void MDMA_IRQHandler(void); /* USER CODE BEGIN EFP */ diff --git a/Core/Src/main.c b/Core/Src/main.c index e46e352..4818c58 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -19,7 +19,6 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "cmsis_os.h" -#include "stm32h7xx_hal_gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -33,7 +32,7 @@ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ - +#define D2_RAM __attribute__((section(".D2_RAM"))) /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ @@ -45,6 +44,8 @@ ADC_HandleTypeDef hadc1; ADC_HandleTypeDef hadc2; ADC_HandleTypeDef hadc3; +DMA_HandleTypeDef hdma_adc1; +DMA_HandleTypeDef hdma_adc2; FDCAN_HandleTypeDef hfdcan1; FDCAN_HandleTypeDef hfdcan2; @@ -71,16 +72,29 @@ const osThreadAttr_t defaultTask_attributes = { .stack_size = 128 * 4, .priority = (osPriority_t) osPriorityNormal, }; +/* Definitions for ADCTask */ +osThreadId_t ADCTaskHandle; +const osThreadAttr_t ADCTask_attributes = { + .name = "ADCTask", + .stack_size = 128 * 4, + .priority = (osPriority_t) osPriorityLow, +}; +/* Definitions for adcSemaphore */ +osSemaphoreId_t adcSemaphoreHandle; +const osSemaphoreAttr_t adcSemaphore_attributes = { + .name = "adcSemaphore" +}; /* USER CODE BEGIN PV */ - +D2_RAM uint32_t raw[16]; +uint16_t adc1, adc2; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); -void PeriphCommonClock_Config(void); static void MPU_Config(void); static void MX_GPIO_Init(void); static void MX_MDMA_Init(void); +static void MX_DMA_Init(void); static void MX_ADC1_Init(void); static void MX_FDCAN1_Init(void); static void MX_FDCAN2_Init(void); @@ -89,14 +103,15 @@ static void MX_TIM1_Init(void); static void MX_TIM2_Init(void); static void MX_TIM4_Init(void); static void MX_TIM5_Init(void); -static void MX_TIM12_Init(void); static void MX_TIM15_Init(void); static void MX_RAMECC_Init(void); static void MX_USART2_UART_Init(void); static void MX_ADC2_Init(void); static void MX_ADC3_Init(void); static void MX_SDMMC1_SD_Init(void); +static void MX_TIM12_Init(void); void StartDefaultTask(void *argument); +void StartADCTask(void *argument); /* USER CODE BEGIN PFP */ void CAN_TX(void); @@ -133,9 +148,6 @@ int main(void) /* Configure the system clock */ SystemClock_Config(); - /* Configure the peripherals common clocks */ - PeriphCommonClock_Config(); - /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ @@ -143,6 +155,7 @@ int main(void) /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_MDMA_Init(); + MX_DMA_Init(); MX_ADC1_Init(); MX_FDCAN1_Init(); MX_FDCAN2_Init(); @@ -151,15 +164,18 @@ int main(void) MX_TIM2_Init(); MX_TIM4_Init(); MX_TIM5_Init(); - MX_TIM12_Init(); MX_TIM15_Init(); MX_RAMECC_Init(); MX_USART2_UART_Init(); MX_ADC2_Init(); MX_ADC3_Init(); - MX_SDMMC1_SD_Init(); + MX_TIM12_Init(); /* USER CODE BEGIN 2 */ + if (HAL_GPIO_ReadPin(GPIOC, 11) == 1) { + MX_SDMMC1_SD_Init(); + } + HAL_ADCEx_Calibration_Start(&hadc1, ADC_CALIB_OFFSET, ADC_SINGLE_ENDED); /* USER CODE END 2 */ /* Init scheduler */ @@ -169,6 +185,10 @@ int main(void) /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ + /* Create the semaphores(s) */ + /* creation of adcSemaphore */ + adcSemaphoreHandle = osSemaphoreNew(1, 1, &adcSemaphore_attributes); + /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ /* USER CODE END RTOS_SEMAPHORES */ @@ -185,6 +205,9 @@ int main(void) /* creation of defaultTask */ defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); + /* creation of ADCTask */ + ADCTaskHandle = osThreadNew(StartADCTask, NULL, &ADCTask_attributes); + /* USER CODE BEGIN RTOS_THREADS */ /* add threads, ... */ /* USER CODE END RTOS_THREADS */ @@ -224,21 +247,20 @@ void SystemClock_Config(void) /** Configure the main internal regulator output voltage */ - __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE3); + __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE0); while(!__HAL_PWR_GET_FLAG(PWR_FLAG_VOSRDY)) {} /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ - RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; - RCC_OscInitStruct.HSIState = RCC_HSI_DIV1; - RCC_OscInitStruct.HSICalibrationValue = 64; + RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; + RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; - RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; - RCC_OscInitStruct.PLL.PLLM = 4; - RCC_OscInitStruct.PLL.PLLN = 12; - RCC_OscInitStruct.PLL.PLLP = 2; + RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; + RCC_OscInitStruct.PLL.PLLM = 2; + RCC_OscInitStruct.PLL.PLLN = 44; + RCC_OscInitStruct.PLL.PLLP = 1; RCC_OscInitStruct.PLL.PLLQ = 4; RCC_OscInitStruct.PLL.PLLR = 2; RCC_OscInitStruct.PLL.PLLRGE = RCC_PLL1VCIRANGE_3; @@ -254,41 +276,15 @@ void SystemClock_Config(void) RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2 |RCC_CLOCKTYPE_D3PCLK1|RCC_CLOCKTYPE_D1PCLK1; - RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI; + RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.SYSCLKDivider = RCC_SYSCLK_DIV1; - RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV1; - RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV1; + RCC_ClkInitStruct.AHBCLKDivider = RCC_HCLK_DIV2; + RCC_ClkInitStruct.APB3CLKDivider = RCC_APB3_DIV2; RCC_ClkInitStruct.APB1CLKDivider = RCC_APB1_DIV2; - RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV1; - RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV1; + RCC_ClkInitStruct.APB2CLKDivider = RCC_APB2_DIV2; + RCC_ClkInitStruct.APB4CLKDivider = RCC_APB4_DIV2; - if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) - { - Error_Handler(); - } -} - -/** - * @brief Peripherals Common Clock Configuration - * @retval None - */ -void PeriphCommonClock_Config(void) -{ - RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; - - /** Initializes the peripherals clock - */ - PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; - PeriphClkInitStruct.PLL2.PLL2M = 4; - PeriphClkInitStruct.PLL2.PLL2N = 12; - PeriphClkInitStruct.PLL2.PLL2P = 5; - PeriphClkInitStruct.PLL2.PLL2Q = 2; - PeriphClkInitStruct.PLL2.PLL2R = 2; - PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3; - PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; - PeriphClkInitStruct.PLL2.PLL2FRACN = 0; - PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3) != HAL_OK) { Error_Handler(); } @@ -316,17 +312,17 @@ static void MX_ADC1_Init(void) /** Common config */ hadc1.Instance = ADC1; - hadc1.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; + hadc1.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc1.Init.Resolution = ADC_RESOLUTION_16B; hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc1.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc1.Init.LowPowerAutoWait = DISABLE; - hadc1.Init.ContinuousConvMode = DISABLE; + hadc1.Init.ContinuousConvMode = ENABLE; hadc1.Init.NbrOfConversion = 1; hadc1.Init.DiscontinuousConvMode = DISABLE; hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START; hadc1.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; + hadc1.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR; hadc1.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc1.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; hadc1.Init.OversamplingMode = DISABLE; @@ -338,7 +334,9 @@ static void MX_ADC1_Init(void) /** Configure the ADC multi-mode */ - multimode.Mode = ADC_MODE_INDEPENDENT; + multimode.Mode = ADC_DUALMODE_REGSIMULT; + multimode.DualModeData = ADC_DUALMODEDATAFORMAT_32_10_BITS; + multimode.TwoSamplingDelay = ADC_TWOSAMPLINGDELAY_1CYCLE; if (HAL_ADCEx_MultiModeConfigChannel(&hadc1, &multimode) != HAL_OK) { Error_Handler(); @@ -346,9 +344,9 @@ static void MX_ADC1_Init(void) /** Configure Regular Channel */ - sConfig.Channel = ADC_CHANNEL_7; + sConfig.Channel = ADC_CHANNEL_15; sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SamplingTime = ADC_SAMPLETIME_64CYCLES_5; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; @@ -384,17 +382,15 @@ static void MX_ADC2_Init(void) /** Common config */ hadc2.Instance = ADC2; - hadc2.Init.ClockPrescaler = ADC_CLOCK_ASYNC_DIV1; + hadc2.Init.ClockPrescaler = ADC_CLOCK_SYNC_PCLK_DIV4; hadc2.Init.Resolution = ADC_RESOLUTION_16B; hadc2.Init.ScanConvMode = ADC_SCAN_DISABLE; hadc2.Init.EOCSelection = ADC_EOC_SINGLE_CONV; hadc2.Init.LowPowerAutoWait = DISABLE; - hadc2.Init.ContinuousConvMode = DISABLE; + hadc2.Init.ContinuousConvMode = ENABLE; hadc2.Init.NbrOfConversion = 1; hadc2.Init.DiscontinuousConvMode = DISABLE; - hadc2.Init.ExternalTrigConv = ADC_SOFTWARE_START; - hadc2.Init.ExternalTrigConvEdge = ADC_EXTERNALTRIGCONVEDGE_NONE; - hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DR; + hadc2.Init.ConversionDataManagement = ADC_CONVERSIONDATA_DMA_CIRCULAR; hadc2.Init.Overrun = ADC_OVR_DATA_PRESERVED; hadc2.Init.LeftBitShift = ADC_LEFTBITSHIFT_NONE; hadc2.Init.OversamplingMode = DISABLE; @@ -406,9 +402,9 @@ static void MX_ADC2_Init(void) /** Configure Regular Channel */ - sConfig.Channel = ADC_CHANNEL_3; + sConfig.Channel = ADC_CHANNEL_15; sConfig.Rank = ADC_REGULAR_RANK_1; - sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5; + sConfig.SamplingTime = ADC_SAMPLETIME_64CYCLES_5; sConfig.SingleDiff = ADC_SINGLE_ENDED; sConfig.OffsetNumber = ADC_OFFSET_NONE; sConfig.Offset = 0; @@ -697,7 +693,7 @@ static void MX_SDMMC1_SD_Init(void) hsd1.Init.ClockDiv = 0; if (HAL_SD_Init(&hsd1) != HAL_OK) { - // Error_Handler(); + Error_Handler(); } /* USER CODE BEGIN SDMMC1_Init 2 */ @@ -1102,6 +1098,25 @@ static void MX_USART2_UART_Init(void) } +/** + * Enable DMA controller clock + */ +static void MX_DMA_Init(void) +{ + + /* DMA controller clock enable */ + __HAL_RCC_DMA1_CLK_ENABLE(); + + /* DMA interrupt init */ + /* DMA1_Stream0_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream0_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream0_IRQn); + /* DMA1_Stream1_IRQn interrupt configuration */ + HAL_NVIC_SetPriority(DMA1_Stream1_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(DMA1_Stream1_IRQn); + +} + /** * Enable MDMA controller clock * Configure MDMA for global transfers @@ -1157,6 +1172,7 @@ static void MX_GPIO_Init(void) /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOE_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); @@ -1171,6 +1187,9 @@ static void MX_GPIO_Init(void) /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOD, BSE_R_Pin|MAster_Control_Pin|RTD_Button_DIGI_Pin, GPIO_PIN_RESET); + /*Configure GPIO pin Output Level */ + HAL_GPIO_WritePin(GPIOE, GPIO_PIN_1, GPIO_PIN_RESET); + /*Configure GPIO pins : PB0 BSE_F_Pin GPS_PWR2_Pin GPS_PWR1_Pin */ GPIO_InitStruct.Pin = GPIO_PIN_0|BSE_F_Pin|GPS_PWR2_Pin|GPS_PWR1_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; @@ -1192,6 +1211,13 @@ static void MX_GPIO_Init(void) GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + /*Configure GPIO pin : PE1 */ + GPIO_InitStruct.Pin = GPIO_PIN_1; + GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + /* USER CODE BEGIN MX_GPIO_Init_2 */ /* USER CODE END MX_GPIO_Init_2 */ @@ -1219,6 +1245,24 @@ void StartDefaultTask(void *argument) /* USER CODE END 5 */ } +/* USER CODE BEGIN Header_StartADCTask */ +/** +* @brief Function implementing the ADCTask thread. +* @param argument: Not used +* @retval None +*/ +/* USER CODE END Header_StartADCTask */ +void StartADCTask(void *argument) +{ + /* USER CODE BEGIN StartADCTask */ + /* Infinite loop */ + for(;;) + { + osDelay(1); + } + /* USER CODE END StartADCTask */ +} + /* MPU Configuration */ void MPU_Config(void) @@ -1236,10 +1280,10 @@ void MPU_Config(void) MPU_InitStruct.Size = MPU_REGION_SIZE_4GB; MPU_InitStruct.SubRegionDisable = 0x87; MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0; - MPU_InitStruct.AccessPermission = MPU_REGION_NO_ACCESS; + MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS; MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_DISABLE; MPU_InitStruct.IsShareable = MPU_ACCESS_SHAREABLE; - MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE; + MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE; MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE; HAL_MPU_ConfigRegion(&MPU_InitStruct); @@ -1281,6 +1325,7 @@ void Error_Handler(void) __disable_irq(); while (1) { + } /* USER CODE END Error_Handler_Debug */ } diff --git a/Core/Src/stm32h7xx_hal_msp.c b/Core/Src/stm32h7xx_hal_msp.c index 7539e19..5038051 100644 --- a/Core/Src/stm32h7xx_hal_msp.c +++ b/Core/Src/stm32h7xx_hal_msp.c @@ -23,6 +23,9 @@ /* USER CODE BEGIN Includes */ /* USER CODE END Includes */ +extern DMA_HandleTypeDef hdma_adc1; + +extern DMA_HandleTypeDef hdma_adc2; /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN TD */ @@ -91,11 +94,13 @@ static uint32_t HAL_RCC_ADC12_CLK_ENABLED=0; void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) { GPIO_InitTypeDef GPIO_InitStruct = {0}; + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0}; if(hadc->Instance==ADC1) { /* USER CODE BEGIN ADC1_MspInit 0 */ /* USER CODE END ADC1_MspInit 0 */ + /* Peripheral clock enable */ HAL_RCC_ADC12_CLK_ENABLED++; if(HAL_RCC_ADC12_CLK_ENABLED==1){ @@ -131,6 +136,28 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + /* ADC1 DMA Init */ + /* ADC1 Init */ + hdma_adc1.Instance = DMA1_Stream0; + hdma_adc1.Init.Request = DMA_REQUEST_ADC1; + hdma_adc1.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_adc1.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_adc1.Init.MemInc = DMA_MINC_ENABLE; + hdma_adc1.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_adc1.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_adc1.Init.Mode = DMA_CIRCULAR; + hdma_adc1.Init.Priority = DMA_PRIORITY_LOW; + hdma_adc1.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_adc1) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc1); + + /* ADC1 interrupt Init */ + HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(ADC_IRQn); /* USER CODE BEGIN ADC1_MspInit 1 */ /* USER CODE END ADC1_MspInit 1 */ @@ -140,6 +167,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) /* USER CODE BEGIN ADC2_MspInit 0 */ /* USER CODE END ADC2_MspInit 0 */ + /* Peripheral clock enable */ HAL_RCC_ADC12_CLK_ENABLED++; if(HAL_RCC_ADC12_CLK_ENABLED==1){ @@ -149,10 +177,11 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOC_CLK_ENABLE(); /**ADC2 GPIO Configuration + PA3 ------> ADC2_INP15 PA6 ------> ADC2_INP3 PC4 ------> ADC2_INP4 */ - GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Pin = GPIO_PIN_3|GPIO_PIN_6; GPIO_InitStruct.Mode = GPIO_MODE_ANALOG; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); @@ -162,6 +191,28 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOC, &GPIO_InitStruct); + /* ADC2 DMA Init */ + /* ADC2 Init */ + hdma_adc2.Instance = DMA1_Stream1; + hdma_adc2.Init.Request = DMA_REQUEST_ADC2; + hdma_adc2.Init.Direction = DMA_PERIPH_TO_MEMORY; + hdma_adc2.Init.PeriphInc = DMA_PINC_DISABLE; + hdma_adc2.Init.MemInc = DMA_MINC_ENABLE; + hdma_adc2.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD; + hdma_adc2.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD; + hdma_adc2.Init.Mode = DMA_CIRCULAR; + hdma_adc2.Init.Priority = DMA_PRIORITY_LOW; + hdma_adc2.Init.FIFOMode = DMA_FIFOMODE_DISABLE; + if (HAL_DMA_Init(&hdma_adc2) != HAL_OK) + { + Error_Handler(); + } + + __HAL_LINKDMA(hadc,DMA_Handle,hdma_adc2); + + /* ADC2 interrupt Init */ + HAL_NVIC_SetPriority(ADC_IRQn, 5, 0); + HAL_NVIC_EnableIRQ(ADC_IRQn); /* USER CODE BEGIN ADC2_MspInit 1 */ /* USER CODE END ADC2_MspInit 1 */ @@ -171,6 +222,24 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) /* USER CODE BEGIN ADC3_MspInit 0 */ /* USER CODE END ADC3_MspInit 0 */ + + /** Initializes the peripherals clock + */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_ADC; + PeriphClkInitStruct.PLL2.PLL2M = 2; + PeriphClkInitStruct.PLL2.PLL2N = 16; + PeriphClkInitStruct.PLL2.PLL2P = 2; + PeriphClkInitStruct.PLL2.PLL2Q = 2; + PeriphClkInitStruct.PLL2.PLL2R = 2; + PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3; + PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; + PeriphClkInitStruct.PLL2.PLL2FRACN = 0.0; + PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; + if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) + { + Error_Handler(); + } + /* Peripheral clock enable */ __HAL_RCC_ADC3_CLK_ENABLE(); @@ -226,6 +295,18 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) HAL_GPIO_DeInit(GPIOB, GPIO_PIN_1); + /* ADC1 DMA DeInit */ + HAL_DMA_DeInit(hadc->DMA_Handle); + + /* ADC1 interrupt DeInit */ + /* USER CODE BEGIN ADC1:ADC_IRQn disable */ + /** + * Uncomment the line below to disable the "ADC_IRQn" interrupt + * Be aware, disabling shared interrupt may affect other IPs + */ + /* HAL_NVIC_DisableIRQ(ADC_IRQn); */ + /* USER CODE END ADC1:ADC_IRQn disable */ + /* USER CODE BEGIN ADC1_MspDeInit 1 */ /* USER CODE END ADC1_MspDeInit 1 */ @@ -242,13 +323,26 @@ void HAL_ADC_MspDeInit(ADC_HandleTypeDef* hadc) } /**ADC2 GPIO Configuration + PA3 ------> ADC2_INP15 PA6 ------> ADC2_INP3 PC4 ------> ADC2_INP4 */ - HAL_GPIO_DeInit(GPIOA, GPIO_PIN_6); + HAL_GPIO_DeInit(GPIOA, GPIO_PIN_3|GPIO_PIN_6); HAL_GPIO_DeInit(GPIOC, GPIO_PIN_4); + /* ADC2 DMA DeInit */ + HAL_DMA_DeInit(hadc->DMA_Handle); + + /* ADC2 interrupt DeInit */ + /* USER CODE BEGIN ADC2:ADC_IRQn disable */ + /** + * Uncomment the line below to disable the "ADC_IRQn" interrupt + * Be aware, disabling shared interrupt may affect other IPs + */ + /* HAL_NVIC_DisableIRQ(ADC_IRQn); */ + /* USER CODE END ADC2:ADC_IRQn disable */ + /* USER CODE BEGIN ADC2_MspDeInit 1 */ /* USER CODE END ADC2_MspDeInit 1 */ diff --git a/Core/Src/stm32h7xx_it.c b/Core/Src/stm32h7xx_it.c index b64f525..57143fc 100644 --- a/Core/Src/stm32h7xx_it.c +++ b/Core/Src/stm32h7xx_it.c @@ -55,6 +55,10 @@ /* USER CODE END 0 */ /* External variables --------------------------------------------------------*/ +extern DMA_HandleTypeDef hdma_adc1; +extern DMA_HandleTypeDef hdma_adc2; +extern ADC_HandleTypeDef hadc1; +extern ADC_HandleTypeDef hadc2; extern MDMA_HandleTypeDef hmdma_mdma_channel0_sw_0; extern TIM_HandleTypeDef htim3; @@ -160,6 +164,49 @@ void DebugMon_Handler(void) /* please refer to the startup file (startup_stm32h7xx.s). */ /******************************************************************************/ +/** + * @brief This function handles DMA1 stream0 global interrupt. + */ +void DMA1_Stream0_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream0_IRQn 0 */ + + /* USER CODE END DMA1_Stream0_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc1); + /* USER CODE BEGIN DMA1_Stream0_IRQn 1 */ + + /* USER CODE END DMA1_Stream0_IRQn 1 */ +} + +/** + * @brief This function handles DMA1 stream1 global interrupt. + */ +void DMA1_Stream1_IRQHandler(void) +{ + /* USER CODE BEGIN DMA1_Stream1_IRQn 0 */ + + /* USER CODE END DMA1_Stream1_IRQn 0 */ + HAL_DMA_IRQHandler(&hdma_adc2); + /* USER CODE BEGIN DMA1_Stream1_IRQn 1 */ + + /* USER CODE END DMA1_Stream1_IRQn 1 */ +} + +/** + * @brief This function handles ADC1 and ADC2 global interrupts. + */ +void ADC_IRQHandler(void) +{ + /* USER CODE BEGIN ADC_IRQn 0 */ + + /* USER CODE END ADC_IRQn 0 */ + HAL_ADC_IRQHandler(&hadc1); + HAL_ADC_IRQHandler(&hadc2); + /* USER CODE BEGIN ADC_IRQn 1 */ + + /* USER CODE END ADC_IRQn 1 */ +} + /** * @brief This function handles TIM3 global interrupt. */ diff --git a/STM32-config.ioc b/STM32-config.ioc index 471fe6e..99956a9 100644 --- a/STM32-config.ioc +++ b/STM32-config.ioc @@ -1,21 +1,37 @@ #MicroXplorer Configuration settings - do not modify -ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_7 -ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,master +ADC1.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_15 +ADC1.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4 +ADC1.ContinuousConvMode=ENABLE +ADC1.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR +ADC1.DMAAccessModeView=ENABLE +ADC1.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,master,ClockPrescaler,ContinuousConvMode,ConversionDataManagement,Mode,NbrOfConversion,OversamplingMode,Ratio,DMAAccessModeView +ADC1.Mode=ADC_DUALMODE_REGSIMULT +ADC1.NbrOfConversion=1 ADC1.NbrOfConversionFlag=1 ADC1.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE ADC1.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE +ADC1.OversamplingMode=DISABLE ADC1.Rank-0\#ChannelRegularConversion=1 -ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC1.Ratio=1 +ADC1.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_64CYCLES_5 ADC1.master=1 -ADC2.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_3 -ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag +ADC2.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_15 +ADC2.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4 +ADC2.ContinuousConvMode=ENABLE +ADC2.ConversionDataManagement=ADC_CONVERSIONDATA_DMA_CIRCULAR +ADC2.DMAAccessModeView=ENABLE +ADC2.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSignedSaturation-0\#ChannelRegularConversion,NbrOfConversionFlag,ClockPrescaler,ConversionDataManagement,ContinuousConvMode,Mode,DMAAccessModeView +ADC2.Mode=ADC_DUALMODE_REGSIMULT ADC2.NbrOfConversionFlag=1 ADC2.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE ADC2.OffsetSignedSaturation-0\#ChannelRegularConversion=DISABLE ADC2.Rank-0\#ChannelRegularConversion=1 -ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_1CYCLE_5 +ADC2.SamplingTime-0\#ChannelRegularConversion=ADC_SAMPLETIME_64CYCLES_5 ADC3.Channel-0\#ChannelRegularConversion=ADC_CHANNEL_0 -ADC3.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSign-0\#ChannelRegularConversion,NbrOfConversionFlag +ADC3.ClockPrescaler=ADC_CLOCK_SYNC_PCLK_DIV4 +ADC3.DMAAccessModeView=ENABLE +ADC3.IPParameters=Rank-0\#ChannelRegularConversion,Channel-0\#ChannelRegularConversion,SamplingTime-0\#ChannelRegularConversion,OffsetNumber-0\#ChannelRegularConversion,OffsetSign-0\#ChannelRegularConversion,NbrOfConversionFlag,ClockPrescaler,Mode,DMAAccessModeView +ADC3.Mode=ADC_DUALMODE_REGSIMULT ADC3.NbrOfConversionFlag=1 ADC3.OffsetNumber-0\#ChannelRegularConversion=ADC_OFFSET_NONE ADC3.OffsetSign-0\#ChannelRegularConversion=ADC3_OFFSET_SIGN_NEGATIVE @@ -24,25 +40,68 @@ ADC3.SamplingTime-0\#ChannelRegularConversion=ADC3_SAMPLETIME_2CYCLES_5 CAD.formats= CAD.pinconfig= CAD.provider= -CORTEX_M7.IPParameters=default_mode_Activation +CORTEX_M7.AccessPermission_Spec=MPU_REGION_FULL_ACCESS +CORTEX_M7.IPParameters=default_mode_Activation,IsCacheable_Spec,AccessPermission_Spec +CORTEX_M7.IsCacheable_Spec=MPU_ACCESS_CACHEABLE CORTEX_M7.default_mode_Activation=1 -FDCAN1.CalculateBaudRateNominal=1000000 -FDCAN1.CalculateTimeBitNominal=1000 -FDCAN1.CalculateTimeQuantumNominal=333.3333333333333 +Dma.ADC1.0.Direction=DMA_PERIPH_TO_MEMORY +Dma.ADC1.0.EventEnable=DISABLE +Dma.ADC1.0.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.ADC1.0.Instance=DMA1_Stream0 +Dma.ADC1.0.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.ADC1.0.MemInc=DMA_MINC_ENABLE +Dma.ADC1.0.Mode=DMA_CIRCULAR +Dma.ADC1.0.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Dma.ADC1.0.PeriphInc=DMA_PINC_DISABLE +Dma.ADC1.0.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.ADC1.0.Priority=DMA_PRIORITY_LOW +Dma.ADC1.0.RequestNumber=1 +Dma.ADC1.0.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.ADC1.0.SignalID=NONE +Dma.ADC1.0.SyncEnable=DISABLE +Dma.ADC1.0.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.ADC1.0.SyncRequestNumber=1 +Dma.ADC1.0.SyncSignalID=NONE +Dma.ADC2.1.Direction=DMA_PERIPH_TO_MEMORY +Dma.ADC2.1.EventEnable=DISABLE +Dma.ADC2.1.FIFOMode=DMA_FIFOMODE_DISABLE +Dma.ADC2.1.Instance=DMA1_Stream1 +Dma.ADC2.1.MemDataAlignment=DMA_MDATAALIGN_HALFWORD +Dma.ADC2.1.MemInc=DMA_MINC_ENABLE +Dma.ADC2.1.Mode=DMA_CIRCULAR +Dma.ADC2.1.PeriphDataAlignment=DMA_PDATAALIGN_HALFWORD +Dma.ADC2.1.PeriphInc=DMA_PINC_DISABLE +Dma.ADC2.1.Polarity=HAL_DMAMUX_REQ_GEN_RISING +Dma.ADC2.1.Priority=DMA_PRIORITY_LOW +Dma.ADC2.1.RequestNumber=1 +Dma.ADC2.1.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber +Dma.ADC2.1.SignalID=NONE +Dma.ADC2.1.SyncEnable=DISABLE +Dma.ADC2.1.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT +Dma.ADC2.1.SyncRequestNumber=1 +Dma.ADC2.1.SyncSignalID=NONE +Dma.Request0=ADC1 +Dma.Request1=ADC2 +Dma.RequestsNb=2 +FDCAN1.CalculateBaudRateNominal=2864583 +FDCAN1.CalculateTimeBitNominal=349 +FDCAN1.CalculateTimeQuantumNominal=116.36363636363636 FDCAN1.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,TxBuffersNbr FDCAN1.TxBuffersNbr=32 -FDCAN2.CalculateBaudRateNominal=1000000 -FDCAN2.CalculateTimeBitNominal=1000 -FDCAN2.CalculateTimeQuantumNominal=333.3333333333333 +FDCAN2.CalculateBaudRateNominal=2864583 +FDCAN2.CalculateTimeBitNominal=349 +FDCAN2.CalculateTimeQuantumNominal=116.36363636363636 FDCAN2.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,TxBuffersNbr FDCAN2.TxBuffersNbr=32 -FDCAN3.CalculateBaudRateNominal=1000000 -FDCAN3.CalculateTimeBitNominal=1000 -FDCAN3.CalculateTimeQuantumNominal=333.3333333333333 +FDCAN3.CalculateBaudRateNominal=2864583 +FDCAN3.CalculateTimeBitNominal=349 +FDCAN3.CalculateTimeQuantumNominal=116.36363636363636 FDCAN3.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,TxBuffersNbr FDCAN3.TxBuffersNbr=32 -FREERTOS.IPParameters=Tasks01 -FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.BinarySemaphores01=adcSemaphore,Dynamic,NULL,Available +FREERTOS.FootprintOK=true +FREERTOS.IPParameters=Tasks01,FootprintOK,BinarySemaphores01 +FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;ADCTask,8,128,StartADCTask,Default,NULL,Dynamic,NULL,NULL File.Version=6 GPIO.groupedBy= KeepUserPlacement=false @@ -53,83 +112,87 @@ Mcu.CPN=STM32H723VGT6 Mcu.Family=STM32H7 Mcu.IP0=ADC1 Mcu.IP1=ADC2 -Mcu.IP10=NVIC -Mcu.IP11=RAMECC -Mcu.IP12=RCC -Mcu.IP13=SDMMC1 -Mcu.IP14=SYS -Mcu.IP15=TIM1 -Mcu.IP16=TIM2 -Mcu.IP17=TIM4 -Mcu.IP18=TIM5 -Mcu.IP19=TIM12 +Mcu.IP10=MEMORYMAP +Mcu.IP11=NVIC +Mcu.IP12=RAMECC +Mcu.IP13=RCC +Mcu.IP14=SDMMC1 +Mcu.IP15=SYS +Mcu.IP16=TIM1 +Mcu.IP17=TIM2 +Mcu.IP18=TIM4 +Mcu.IP19=TIM5 Mcu.IP2=ADC3 -Mcu.IP20=TIM15 -Mcu.IP21=USART2 +Mcu.IP20=TIM12 +Mcu.IP21=TIM15 +Mcu.IP22=USART2 Mcu.IP3=CORTEX_M7 -Mcu.IP4=FDCAN1 -Mcu.IP5=FDCAN2 -Mcu.IP6=FDCAN3 -Mcu.IP7=FREERTOS -Mcu.IP8=MDMA -Mcu.IP9=MEMORYMAP -Mcu.IPNb=22 +Mcu.IP4=DMA +Mcu.IP5=FDCAN1 +Mcu.IP6=FDCAN2 +Mcu.IP7=FDCAN3 +Mcu.IP8=FREERTOS +Mcu.IP9=MDMA +Mcu.IPNb=23 Mcu.Name=STM32H723VGTx Mcu.Package=LQFP100 Mcu.Pin0=PE5 Mcu.Pin1=PE6 -Mcu.Pin10=PA7 -Mcu.Pin11=PC4 -Mcu.Pin12=PC5 -Mcu.Pin13=PB0 -Mcu.Pin14=PB1 -Mcu.Pin15=PE11 -Mcu.Pin16=PE13 -Mcu.Pin17=PE14 -Mcu.Pin18=PB10 -Mcu.Pin19=PB11 -Mcu.Pin2=PC0 -Mcu.Pin20=PB12 -Mcu.Pin21=PB13 -Mcu.Pin22=PB14 -Mcu.Pin23=PB15 -Mcu.Pin24=PD12 -Mcu.Pin25=PD13 -Mcu.Pin26=PC8 -Mcu.Pin27=PC9 -Mcu.Pin28=PA8 -Mcu.Pin29=PA11 -Mcu.Pin3=PC1 -Mcu.Pin30=PA12 -Mcu.Pin31=PA15(JTDI) -Mcu.Pin32=PC10 -Mcu.Pin33=PC11 -Mcu.Pin34=PC12 -Mcu.Pin35=PD0 -Mcu.Pin36=PD1 -Mcu.Pin37=PD2 -Mcu.Pin38=PD3 -Mcu.Pin39=PD4 -Mcu.Pin4=PC2_C -Mcu.Pin40=PD5 -Mcu.Pin41=PD6 -Mcu.Pin42=PD7 -Mcu.Pin43=PB3(JTDO/TRACESWO) -Mcu.Pin44=PB4(NJTRST) -Mcu.Pin45=PB5 -Mcu.Pin46=PB6 -Mcu.Pin47=PB7 -Mcu.Pin48=VP_FREERTOS_VS_CMSIS_V2 -Mcu.Pin49=VP_RAMECC_VS_D1_1 -Mcu.Pin5=PC3_C -Mcu.Pin50=VP_SYS_VS_tim3 -Mcu.Pin51=VP_TIM5_VS_NoInput1 -Mcu.Pin52=VP_MEMORYMAP_VS_MEMORYMAP -Mcu.Pin6=PA2 -Mcu.Pin7=PA3 -Mcu.Pin8=PA5 -Mcu.Pin9=PA6 -Mcu.PinsNb=53 +Mcu.Pin10=PA5 +Mcu.Pin11=PA6 +Mcu.Pin12=PA7 +Mcu.Pin13=PC4 +Mcu.Pin14=PC5 +Mcu.Pin15=PB0 +Mcu.Pin16=PB1 +Mcu.Pin17=PE11 +Mcu.Pin18=PE13 +Mcu.Pin19=PE14 +Mcu.Pin2=PH0-OSC_IN +Mcu.Pin20=PB10 +Mcu.Pin21=PB11 +Mcu.Pin22=PB12 +Mcu.Pin23=PB13 +Mcu.Pin24=PB14 +Mcu.Pin25=PB15 +Mcu.Pin26=PD12 +Mcu.Pin27=PD13 +Mcu.Pin28=PC8 +Mcu.Pin29=PC9 +Mcu.Pin3=PH1-OSC_OUT +Mcu.Pin30=PA8 +Mcu.Pin31=PA11 +Mcu.Pin32=PA12 +Mcu.Pin33=PA15(JTDI) +Mcu.Pin34=PC10 +Mcu.Pin35=PC11 +Mcu.Pin36=PC12 +Mcu.Pin37=PD0 +Mcu.Pin38=PD1 +Mcu.Pin39=PD2 +Mcu.Pin4=PC0 +Mcu.Pin40=PD3 +Mcu.Pin41=PD4 +Mcu.Pin42=PD5 +Mcu.Pin43=PD6 +Mcu.Pin44=PD7 +Mcu.Pin45=PB3(JTDO/TRACESWO) +Mcu.Pin46=PB4(NJTRST) +Mcu.Pin47=PB5 +Mcu.Pin48=PB6 +Mcu.Pin49=PB7 +Mcu.Pin5=PC1 +Mcu.Pin50=PE1 +Mcu.Pin51=VP_FREERTOS_VS_CMSIS_V2 +Mcu.Pin52=VP_RAMECC_VS_D1_1 +Mcu.Pin53=VP_SYS_VS_tim3 +Mcu.Pin54=VP_TIM5_VS_NoInput1 +Mcu.Pin55=VP_MEMORYMAP_VS_MEMORYMAP +Mcu.Pin6=PC2_C +Mcu.Pin7=PC3_C +Mcu.Pin8=PA2 +Mcu.Pin9=PA3 +Mcu.PinsNb=56 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32H723VGTx @@ -162,7 +225,10 @@ Mdma.RequestSet0=MDMA_Channel0 Mdma.RequestSetsNb=1 MxCube.Version=6.16.1 MxDb.Version=DB.6.0.161 +NVIC.ADC_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false +NVIC.DMA1_Stream0_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true +NVIC.DMA1_Stream1_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false NVIC.ForceEnableDMAVector=true NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false\:false @@ -189,6 +255,7 @@ PA15(JTDI).GPIO_Label=BRAKE_L PA15(JTDI).Locked=true PA15(JTDI).Signal=GPIO_Output PA2.Signal=ADCx_INP14 +PA3.Locked=true PA3.Signal=ADCx_INP15 PA5.Signal=S_TIM2_CH1_ETR PA6.Signal=ADCx_INP3 @@ -203,7 +270,9 @@ PB12.Mode=FDCAN_Activate PB12.Signal=FDCAN2_RX PB13.Mode=FDCAN_Activate PB13.Signal=FDCAN2_TX +PB14.Locked=true PB14.Signal=S_TIM12_CH1 +PB15.Locked=true PB15.Signal=S_TIM12_CH2 PB3(JTDO/TRACESWO).Signal=S_TIM2_CH2 PB4(NJTRST).GPIOParameters=GPIO_Label @@ -263,11 +332,17 @@ PD7.GPIOParameters=GPIO_Label PD7.GPIO_Label=RTD Button DIGI PD7.Locked=true PD7.Signal=GPIO_Output +PE1.Locked=true +PE1.Signal=GPIO_Output PE11.Signal=S_TIM1_CH2 PE13.Signal=S_TIM1_CH3 PE14.Signal=S_TIM1_CH4 PE5.Signal=S_TIM15_CH1 PE6.Signal=S_TIM15_CH2 +PH0-OSC_IN.Mode=HSE-External-Oscillator +PH0-OSC_IN.Signal=RCC_OSC_IN +PH1-OSC_OUT.Mode=HSE-External-Oscillator +PH1-OSC_OUT.Signal=RCC_OSC_OUT PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true ProjectManager.BackupPrevious=false @@ -301,82 +376,89 @@ ProjectManager.ToolChainLocation= ProjectManager.UAScriptAfterPath= ProjectManager.UAScriptBeforePath= ProjectManager.UnderRoot=false -ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_MDMA_Init-MDMA-false-HAL-true,4-MX_ADC1_Init-ADC1-false-HAL-true,5-MX_FDCAN1_Init-FDCAN1-false-HAL-true,6-MX_FDCAN2_Init-FDCAN2-false-HAL-true,7-MX_FDCAN3_Init-FDCAN3-false-HAL-true,8-MX_TIM1_Init-TIM1-false-HAL-true,9-MX_TIM2_Init-TIM2-false-HAL-true,10-MX_TIM4_Init-TIM4-false-HAL-true,11-MX_TIM5_Init-TIM5-false-HAL-true,12-MX_TIM12_Init-TIM12-false-HAL-true,13-MX_TIM15_Init-TIM15-false-HAL-true,14-MX_RAMECC_Init-RAMECC-false-HAL-true,15-MX_USART2_UART_Init-USART2-false-HAL-true,16-MX_ADC2_Init-ADC2-false-HAL-true,17-MX_ADC3_Init-ADC3-false-HAL-true,18-MX_SDMMC1_SD_Init-SDMMC1-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true +ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_MDMA_Init-MDMA-false-HAL-true,4-MX_DMA_Init-DMA-false-HAL-true,5-MX_ADC1_Init-ADC1-false-HAL-true,6-MX_FDCAN1_Init-FDCAN1-false-HAL-true,7-MX_FDCAN2_Init-FDCAN2-false-HAL-true,8-MX_FDCAN3_Init-FDCAN3-false-HAL-true,9-MX_TIM1_Init-TIM1-false-HAL-true,10-MX_TIM2_Init-TIM2-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_TIM5_Init-TIM5-false-HAL-true,13-MX_TIM15_Init-TIM15-false-HAL-true,14-MX_RAMECC_Init-RAMECC-false-HAL-true,15-MX_USART2_UART_Init-USART2-false-HAL-true,16-MX_ADC2_Init-ADC2-false-HAL-true,17-MX_ADC3_Init-ADC3-false-HAL-true,18-MX_SDMMC1_SD_Init-SDMMC1-true-HAL-true,19-MX_TIM12_Init-TIM12-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true RAMECC.IPParameters=Instance-RAMECC1_Monitor1 RAMECC.Instance-RAMECC1_Monitor1=RAMECC1_Monitor1 -RCC.ADCFreq_Value=38400000 -RCC.AHB12Freq_Value=64000000 -RCC.AHB4Freq_Value=64000000 -RCC.APB1Freq_Value=32000000 -RCC.APB2Freq_Value=64000000 -RCC.APB3Freq_Value=64000000 -RCC.APB4Freq_Value=64000000 -RCC.AXIClockFreq_Value=64000000 +RCC.ADCFreq_Value=100000000 +RCC.AHB12Freq_Value=275000000 +RCC.AHB4Freq_Value=275000000 +RCC.APB1Freq_Value=137500000 +RCC.APB2Freq_Value=137500000 +RCC.APB3Freq_Value=137500000 +RCC.APB4Freq_Value=137500000 +RCC.AXIClockFreq_Value=275000000 RCC.CECFreq_Value=32000 RCC.CKPERFreq_Value=64000000 -RCC.CortexFreq_Value=64000000 -RCC.CpuClockFreq_Value=64000000 -RCC.D1CPREFreq_Value=64000000 +RCC.CortexFreq_Value=550000000 +RCC.CpuClockFreq_Value=550000000 +RCC.D1CPREFreq_Value=550000000 +RCC.D1PPRE=RCC_APB3_DIV2 RCC.D2PPRE1=RCC_APB1_DIV2 -RCC.DFSDMACLkFreq_Value=48000000 -RCC.DFSDMFreq_Value=64000000 -RCC.DIVM1=4 -RCC.DIVM2=4 -RCC.DIVN1=12 -RCC.DIVN2=12 -RCC.DIVP1Freq_Value=96000000 -RCC.DIVP2=5 -RCC.DIVP2Freq_Value=38400000 -RCC.DIVP3Freq_Value=129000000 +RCC.D2PPRE2=RCC_APB2_DIV2 +RCC.D3PPRE=RCC_APB4_DIV2 +RCC.DFSDMACLkFreq_Value=137500000 +RCC.DFSDMFreq_Value=137500000 +RCC.DIVM1=2 +RCC.DIVM2=2 +RCC.DIVN1=44 +RCC.DIVN2=16 +RCC.DIVP1=1 +RCC.DIVP1Freq_Value=550000000 +RCC.DIVP2Freq_Value=100000000 +RCC.DIVP3Freq_Value=50390625 RCC.DIVQ1=4 -RCC.DIVQ1Freq_Value=48000000 -RCC.DIVQ2Freq_Value=96000000 -RCC.DIVQ3Freq_Value=129000000 -RCC.DIVR1Freq_Value=96000000 -RCC.DIVR2Freq_Value=96000000 -RCC.DIVR3Freq_Value=129000000 -RCC.FDCANFreq_Value=48000000 -RCC.FMCFreq_Value=64000000 +RCC.DIVQ1Freq_Value=137500000 +RCC.DIVQ2Freq_Value=100000000 +RCC.DIVQ3Freq_Value=50390625 +RCC.DIVR1Freq_Value=275000000 +RCC.DIVR2Freq_Value=100000000 +RCC.DIVR3Freq_Value=50390625 +RCC.FDCANFreq_Value=137500000 +RCC.FMCFreq_Value=275000000 RCC.FamilyName=M -RCC.HCLK3ClockFreq_Value=64000000 -RCC.HCLKFreq_Value=64000000 -RCC.I2C123Freq_Value=32000000 -RCC.I2C4Freq_Value=64000000 -RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D2PPRE1,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVN1,DIVN2,DIVP1Freq_Value,DIVP2,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLLFRACN,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value -RCC.LPTIM1Freq_Value=32000000 -RCC.LPTIM2Freq_Value=64000000 -RCC.LPTIM345Freq_Value=64000000 -RCC.LPUART1Freq_Value=64000000 -RCC.LTDCFreq_Value=129000000 +RCC.HCLK3ClockFreq_Value=275000000 +RCC.HCLKFreq_Value=275000000 +RCC.HPRE=RCC_HCLK_DIV2 +RCC.HSE_VALUE=25000000 +RCC.I2C123Freq_Value=137500000 +RCC.I2C4Freq_Value=137500000 +RCC.IPParameters=ADCFreq_Value,AHB12Freq_Value,AHB4Freq_Value,APB1Freq_Value,APB2Freq_Value,APB3Freq_Value,APB4Freq_Value,AXIClockFreq_Value,CECFreq_Value,CKPERFreq_Value,CortexFreq_Value,CpuClockFreq_Value,D1CPREFreq_Value,D1PPRE,D2PPRE1,D2PPRE2,D3PPRE,DFSDMACLkFreq_Value,DFSDMFreq_Value,DIVM1,DIVM2,DIVN1,DIVN2,DIVP1,DIVP1Freq_Value,DIVP2Freq_Value,DIVP3Freq_Value,DIVQ1,DIVQ1Freq_Value,DIVQ2Freq_Value,DIVQ3Freq_Value,DIVR1Freq_Value,DIVR2Freq_Value,DIVR3Freq_Value,FDCANFreq_Value,FMCFreq_Value,FamilyName,HCLK3ClockFreq_Value,HCLKFreq_Value,HPRE,HSE_VALUE,I2C123Freq_Value,I2C4Freq_Value,LPTIM1Freq_Value,LPTIM2Freq_Value,LPTIM345Freq_Value,LPUART1Freq_Value,LTDCFreq_Value,MCO1PinFreq_Value,MCO2PinFreq_Value,PLL2FRACN,PLLFRACN,PLLSourceVirtual,QSPIFreq_Value,RNGFreq_Value,RTCFreq_Value,SAI1Freq_Value,SAI4AFreq_Value,SAI4BFreq_Value,SDMMCFreq_Value,SPDIFRXFreq_Value,SPI123Freq_Value,SPI45Freq_Value,SPI6Freq_Value,SWPMI1Freq_Value,SYSCLKFreq_VALUE,SYSCLKSource,Tim1OutputFreq_Value,Tim2OutputFreq_Value,TraceFreq_Value,USART16Freq_Value,USART234578Freq_Value,USBFreq_Value,VCO1OutputFreq_Value,VCO2OutputFreq_Value,VCO3OutputFreq_Value,VCOInput1Freq_Value,VCOInput2Freq_Value,VCOInput3Freq_Value +RCC.LPTIM1Freq_Value=137500000 +RCC.LPTIM2Freq_Value=137500000 +RCC.LPTIM345Freq_Value=137500000 +RCC.LPUART1Freq_Value=137500000 +RCC.LTDCFreq_Value=50390625 RCC.MCO1PinFreq_Value=64000000 -RCC.MCO2PinFreq_Value=64000000 +RCC.MCO2PinFreq_Value=550000000 RCC.PLL2FRACN=0 RCC.PLLFRACN=0 -RCC.QSPIFreq_Value=64000000 +RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE +RCC.QSPIFreq_Value=275000000 RCC.RNGFreq_Value=48000000 RCC.RTCFreq_Value=32000 -RCC.SAI1Freq_Value=48000000 -RCC.SAI4AFreq_Value=48000000 -RCC.SAI4BFreq_Value=48000000 -RCC.SDMMCFreq_Value=48000000 -RCC.SPDIFRXFreq_Value=48000000 -RCC.SPI123Freq_Value=48000000 -RCC.SPI45Freq_Value=64000000 -RCC.SPI6Freq_Value=64000000 -RCC.SWPMI1Freq_Value=32000000 -RCC.SYSCLKFreq_VALUE=64000000 -RCC.Tim1OutputFreq_Value=64000000 -RCC.Tim2OutputFreq_Value=64000000 +RCC.SAI1Freq_Value=137500000 +RCC.SAI4AFreq_Value=137500000 +RCC.SAI4BFreq_Value=137500000 +RCC.SDMMCFreq_Value=137500000 +RCC.SPDIFRXFreq_Value=137500000 +RCC.SPI123Freq_Value=137500000 +RCC.SPI45Freq_Value=137500000 +RCC.SPI6Freq_Value=137500000 +RCC.SWPMI1Freq_Value=137500000 +RCC.SYSCLKFreq_VALUE=550000000 +RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK +RCC.Tim1OutputFreq_Value=275000000 +RCC.Tim2OutputFreq_Value=275000000 RCC.TraceFreq_Value=64000000 -RCC.USART16Freq_Value=64000000 -RCC.USART234578Freq_Value=32000000 -RCC.USBFreq_Value=48000000 -RCC.VCO1OutputFreq_Value=192000000 -RCC.VCO2OutputFreq_Value=192000000 -RCC.VCO3OutputFreq_Value=258000000 -RCC.VCOInput1Freq_Value=16000000 -RCC.VCOInput2Freq_Value=16000000 -RCC.VCOInput3Freq_Value=2000000 +RCC.USART16Freq_Value=137500000 +RCC.USART234578Freq_Value=137500000 +RCC.USBFreq_Value=137500000 +RCC.VCO1OutputFreq_Value=550000000 +RCC.VCO2OutputFreq_Value=200000000 +RCC.VCO3OutputFreq_Value=100781250 +RCC.VCOInput1Freq_Value=12500000 +RCC.VCOInput2Freq_Value=12500000 +RCC.VCOInput3Freq_Value=781250 SH.ADCx_INP10.0=ADC1_INP10,IN10-Single-Ended SH.ADCx_INP10.ConfNb=1 SH.ADCx_INP11.0=ADC1_INP11,IN11-Single-Ended @@ -384,7 +466,8 @@ SH.ADCx_INP11.ConfNb=1 SH.ADCx_INP14.0=ADC1_INP14,IN14-Single-Ended SH.ADCx_INP14.ConfNb=1 SH.ADCx_INP15.0=ADC1_INP15,IN15-Single-Ended -SH.ADCx_INP15.ConfNb=1 +SH.ADCx_INP15.1=ADC2_INP15,IN15-Single-Ended +SH.ADCx_INP15.ConfNb=2 SH.ADCx_INP3.0=ADC1_INP3,IN3-Single-Ended SH.ADCx_INP3.1=ADC2_INP3,IN3-Single-Ended SH.ADCx_INP3.ConfNb=2 diff --git a/STM32H723XG_FLASH.ld b/STM32H723XG_FLASH.ld index 4cad470..47070be 100644 --- a/STM32H723XG_FLASH.ld +++ b/STM32H723XG_FLASH.ld @@ -240,7 +240,13 @@ SECTIONS . = ALIGN(8); } >DTCMRAM - + .D2_RAM (NOLOAD) : + { + . = ALIGN(4); + *(.D2_RAM) + *(.D2_RAM*) + . = ALIGN (4); + } >RAM_D2 /* Remove information from the standard libraries */ /DISCARD/ : From 2e78de856603902eed808b3c0f1fe044f5474b9b Mon Sep 17 00:00:00 2001 From: JPNguyen38 Date: Tue, 3 Mar 2026 23:46:53 -0600 Subject: [PATCH 3/4] add adc dual mode for whatever reason, the task written for this wasn't committed --- Core/Src/main.c | 14 +++++++++++++- Core/Src/stm32h7xx_hal_msp.c | 2 +- STM32-config.ioc | 4 +++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index 4818c58..49865f7 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -19,6 +19,9 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "cmsis_os.h" +#include "cmsis_os2.h" +#include "stm32h7xx_hal_adc.h" +#include "stm32h7xx_hal_adc_ex.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -77,7 +80,7 @@ osThreadId_t ADCTaskHandle; const osThreadAttr_t ADCTask_attributes = { .name = "ADCTask", .stack_size = 128 * 4, - .priority = (osPriority_t) osPriorityLow, + .priority = (osPriority_t) osPriorityAboveNormal3, }; /* Definitions for adcSemaphore */ osSemaphoreId_t adcSemaphoreHandle; @@ -115,10 +118,14 @@ void StartADCTask(void *argument); /* USER CODE BEGIN PFP */ void CAN_TX(void); +void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc); /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ +void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { + if (hadc -> Instance == ADC1) osSemaphoreRelease(adcSemaphoreHandle); +} /* USER CODE END 0 */ @@ -1255,9 +1262,14 @@ void StartDefaultTask(void *argument) void StartADCTask(void *argument) { /* USER CODE BEGIN StartADCTask */ + HAL_ADCEx_MultiModeStart_DMA(&hadc1, (uint32_t*) raw, 16); /* Infinite loop */ for(;;) { + if (osSemaphoreAcquire(adcSemaphoreHandle, osWaitForever) == osOK) { + adc1 = raw[0] & 0xFFFF; + adc2 = raw[0] >> 16; + } osDelay(1); } /* USER CODE END StartADCTask */ diff --git a/Core/Src/stm32h7xx_hal_msp.c b/Core/Src/stm32h7xx_hal_msp.c index 5038051..e3a7154 100644 --- a/Core/Src/stm32h7xx_hal_msp.c +++ b/Core/Src/stm32h7xx_hal_msp.c @@ -233,7 +233,7 @@ void HAL_ADC_MspInit(ADC_HandleTypeDef* hadc) PeriphClkInitStruct.PLL2.PLL2R = 2; PeriphClkInitStruct.PLL2.PLL2RGE = RCC_PLL2VCIRANGE_3; PeriphClkInitStruct.PLL2.PLL2VCOSEL = RCC_PLL2VCOWIDE; - PeriphClkInitStruct.PLL2.PLL2FRACN = 0.0; + PeriphClkInitStruct.PLL2.PLL2FRACN = 0; PeriphClkInitStruct.AdcClockSelection = RCC_ADCCLKSOURCE_PLL2; if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) { diff --git a/STM32-config.ioc b/STM32-config.ioc index 99956a9..623f68d 100644 --- a/STM32-config.ioc +++ b/STM32-config.ioc @@ -101,7 +101,7 @@ FDCAN3.TxBuffersNbr=32 FREERTOS.BinarySemaphores01=adcSemaphore,Dynamic,NULL,Available FREERTOS.FootprintOK=true FREERTOS.IPParameters=Tasks01,FootprintOK,BinarySemaphores01 -FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;ADCTask,8,128,StartADCTask,Default,NULL,Dynamic,NULL,NULL +FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;ADCTask,35,128,StartADCTask,Default,NULL,Dynamic,NULL,NULL File.Version=6 GPIO.groupedBy= KeepUserPlacement=false @@ -255,6 +255,8 @@ PA15(JTDI).GPIO_Label=BRAKE_L PA15(JTDI).Locked=true PA15(JTDI).Signal=GPIO_Output PA2.Signal=ADCx_INP14 +PA3.GPIOParameters=GPIO_Pd +PA3.GPIO_Pd=GPIO_NOPULL PA3.Locked=true PA3.Signal=ADCx_INP15 PA5.Signal=S_TIM2_CH1_ETR From 6c5874c39784a3c2b21e75e813b3f8bc6908e1a1 Mon Sep 17 00:00:00 2001 From: JPNguyen38 Date: Sat, 21 Mar 2026 22:27:15 -0500 Subject: [PATCH 4/4] remove adc task semaphore and add 1 tick delay to the adc conversion task --- Core/Src/main.c | 25 ++++--------------------- STM32-config.ioc | 3 +-- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/Core/Src/main.c b/Core/Src/main.c index 49865f7..623d8fc 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -19,9 +19,7 @@ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "cmsis_os.h" -#include "cmsis_os2.h" -#include "stm32h7xx_hal_adc.h" -#include "stm32h7xx_hal_adc_ex.h" +#include "projdefs.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ @@ -82,11 +80,6 @@ const osThreadAttr_t ADCTask_attributes = { .stack_size = 128 * 4, .priority = (osPriority_t) osPriorityAboveNormal3, }; -/* Definitions for adcSemaphore */ -osSemaphoreId_t adcSemaphoreHandle; -const osSemaphoreAttr_t adcSemaphore_attributes = { - .name = "adcSemaphore" -}; /* USER CODE BEGIN PV */ D2_RAM uint32_t raw[16]; uint16_t adc1, adc2; @@ -118,14 +111,10 @@ void StartADCTask(void *argument); /* USER CODE BEGIN PFP */ void CAN_TX(void); -void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc); /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ -void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef *hadc) { - if (hadc -> Instance == ADC1) osSemaphoreRelease(adcSemaphoreHandle); -} /* USER CODE END 0 */ @@ -192,10 +181,6 @@ int main(void) /* add mutexes, ... */ /* USER CODE END RTOS_MUTEX */ - /* Create the semaphores(s) */ - /* creation of adcSemaphore */ - adcSemaphoreHandle = osSemaphoreNew(1, 1, &adcSemaphore_attributes); - /* USER CODE BEGIN RTOS_SEMAPHORES */ /* add semaphores, ... */ /* USER CODE END RTOS_SEMAPHORES */ @@ -1266,11 +1251,9 @@ void StartADCTask(void *argument) /* Infinite loop */ for(;;) { - if (osSemaphoreAcquire(adcSemaphoreHandle, osWaitForever) == osOK) { - adc1 = raw[0] & 0xFFFF; - adc2 = raw[0] >> 16; - } - osDelay(1); + adc1 = raw[0] & 0xFFFF; + adc2 = raw[0] >> 16; + vTaskDelay(1); } /* USER CODE END StartADCTask */ } diff --git a/STM32-config.ioc b/STM32-config.ioc index 623f68d..042c141 100644 --- a/STM32-config.ioc +++ b/STM32-config.ioc @@ -98,9 +98,8 @@ FDCAN3.CalculateTimeBitNominal=349 FDCAN3.CalculateTimeQuantumNominal=116.36363636363636 FDCAN3.IPParameters=CalculateTimeQuantumNominal,CalculateTimeBitNominal,CalculateBaudRateNominal,TxBuffersNbr FDCAN3.TxBuffersNbr=32 -FREERTOS.BinarySemaphores01=adcSemaphore,Dynamic,NULL,Available FREERTOS.FootprintOK=true -FREERTOS.IPParameters=Tasks01,FootprintOK,BinarySemaphores01 +FREERTOS.IPParameters=Tasks01,FootprintOK FREERTOS.Tasks01=defaultTask,24,128,StartDefaultTask,Default,NULL,Dynamic,NULL,NULL;ADCTask,35,128,StartADCTask,Default,NULL,Dynamic,NULL,NULL File.Version=6 GPIO.groupedBy=