yincheng.zhong
8 天以前 68c43c5adef03f00836d83b37cb83a294d8b0354
晚上SBUS信号解析,成功控制车走
已添加5个文件
已修改15个文件
9443 ■■■■■ 文件已修改
.gitignore 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/.mxproject 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/APL/app.c 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Inc/stm32h7xx_it.h 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Src/main.c 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Src/stm32h7xx_hal_msp.c 91 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/Core/Src/stm32h7xx_it.c 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/SBUS.c 432 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/SBUS.h 119 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/SBUS_使用说明.md 412 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/pwm_ctrol.c 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/FML/pwm_ctrol.h 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/HAL/Uart.h 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/RTE/_STM32H743/RTE_Components.h 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/STM32H743.uvoptx 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/STM32H743.uvprojx 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/STM32H743/ExtDll.iex 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/STM32H743/STM32H743.map 7913 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/MDK-ARM/startup_stm32h743xx.lst 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
STM32H743/STM32H743.ioc 71 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -9,3 +9,8 @@
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
# should NOT be excluded as they contain compiler settings and other important
# information for Eclipse / Flash Builder.
/STM32H743/MDK-ARM/STM32H743/*.crf
/STM32H743/MDK-ARM/STM32H743/*.d
/STM32H743/MDK-ARM/STM32H743/*.o
/STM32H743/MDK-ARM/STM32H743/*.htm
/STM32H743/MDK-ARM/STM32H743/*.axf
STM32H743/.mxproject
@@ -1,11 +1,14 @@
[PreviousLibFiles]
LibFiles=Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_bus.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_crs.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_system.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_utils.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dmamux.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_usart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_lpuart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_mpool.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_os2.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;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_cortex.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.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_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\RVDS\ARM_CM4F\port.c;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_bus.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_crs.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_system.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_utils.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dmamux.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_usart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_lpuart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_mpool.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_os2.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h743xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\system_stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\system_stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;Drivers\CMSIS\Include\cmsis_armcc.h;Drivers\CMSIS\Include\cmsis_armclang.h;Drivers\CMSIS\Include\cmsis_armclang_ltm.h;Drivers\CMSIS\Include\cmsis_compiler.h;Drivers\CMSIS\Include\cmsis_gcc.h;Drivers\CMSIS\Include\cmsis_iccarm.h;Drivers\CMSIS\Include\cmsis_version.h;Drivers\CMSIS\Include\core_armv81mml.h;Drivers\CMSIS\Include\core_armv8mbl.h;Drivers\CMSIS\Include\core_armv8mml.h;Drivers\CMSIS\Include\core_cm0.h;Drivers\CMSIS\Include\core_cm0plus.h;Drivers\CMSIS\Include\core_cm1.h;Drivers\CMSIS\Include\core_cm23.h;Drivers\CMSIS\Include\core_cm3.h;Drivers\CMSIS\Include\core_cm33.h;Drivers\CMSIS\Include\core_cm35p.h;Drivers\CMSIS\Include\core_cm4.h;Drivers\CMSIS\Include\core_cm7.h;Drivers\CMSIS\Include\core_sc000.h;Drivers\CMSIS\Include\core_sc300.h;Drivers\CMSIS\Include\mpu_armv7.h;Drivers\CMSIS\Include\mpu_armv8.h;Drivers\CMSIS\Include\tz_context.h;
LibFiles=Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_bus.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_crs.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_system.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_utils.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dmamux.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_usart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_lpuart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_mpool.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_os2.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;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_cortex.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.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_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\RVDS\ARM_CM4F\port.c;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_tim_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_cortex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_rcc_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_bus.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_rcc.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_crs.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_system.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_utils.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_flash_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_gpio_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_gpio.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_hsem.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_dma_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_dmamux.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_mdma.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_pwr_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_pwr.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_def.h;Drivers\STM32H7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_i2c_ex.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_exti.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_tim.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_usart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_ll_lpuart.h;Drivers\STM32H7xx_HAL_Driver\Inc\stm32h7xx_hal_uart_ex.h;Middlewares\Third_Party\FreeRTOS\Source\include\croutine.h;Middlewares\Third_Party\FreeRTOS\Source\include\deprecated_definitions.h;Middlewares\Third_Party\FreeRTOS\Source\include\event_groups.h;Middlewares\Third_Party\FreeRTOS\Source\include\FreeRTOS.h;Middlewares\Third_Party\FreeRTOS\Source\include\list.h;Middlewares\Third_Party\FreeRTOS\Source\include\message_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_prototypes.h;Middlewares\Third_Party\FreeRTOS\Source\include\mpu_wrappers.h;Middlewares\Third_Party\FreeRTOS\Source\include\portable.h;Middlewares\Third_Party\FreeRTOS\Source\include\projdefs.h;Middlewares\Third_Party\FreeRTOS\Source\include\queue.h;Middlewares\Third_Party\FreeRTOS\Source\include\semphr.h;Middlewares\Third_Party\FreeRTOS\Source\include\stack_macros.h;Middlewares\Third_Party\FreeRTOS\Source\include\StackMacros.h;Middlewares\Third_Party\FreeRTOS\Source\include\stream_buffer.h;Middlewares\Third_Party\FreeRTOS\Source\include\task.h;Middlewares\Third_Party\FreeRTOS\Source\include\timers.h;Middlewares\Third_Party\FreeRTOS\Source\include\atomic.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os2.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\cmsis_os.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_mpool.h;Middlewares\Third_Party\FreeRTOS\Source\CMSIS_RTOS_V2\freertos_os2.h;Middlewares\Third_Party\FreeRTOS\Source\portable\RVDS\ARM_CM4F\portmacro.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h743xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\system_stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Include\system_stm32h7xx.h;Drivers\CMSIS\Device\ST\STM32H7xx\Source\Templates\system_stm32h7xx.c;
[PreviousUsedKeilFiles]
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_cortex.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.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_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\RVDS\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_cortex.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.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_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\RVDS\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\RVDS\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\RVDS\ARM_CM4F;..\Drivers\CMSIS\Device\ST\STM32H7xx\Include;..\Drivers\CMSIS\Include;..\Core\Inc;
CDefines=USE_PWR_LDO_SUPPLY;USE_PWR_LDO_SUPPLY;USE_HAL_DRIVER;STM32H743xx;USE_HAL_DRIVER;USE_HAL_DRIVER;
[]
SourceFiles=;;
[PreviousGenFiles]
AdvancedFolderStructure=true
HeaderFileListSize=4
STM32H743/APL/app.c
@@ -13,6 +13,8 @@
#include "UDPClient.h"
#include "bluetooth.h"
#include "TCPClient.h"
#include "SBUS.h"
#include "pwm_ctrol.h"
static osSemaphoreId_t g_semaphoreHandle = NULL;
extern uint8_t restart_num;
void IdleTask(void)
@@ -39,6 +41,7 @@
    UDPClient_Init();
    TCPClient_Init();
    BT_Init();
    SBUS_Init();
    while (1)
    {
        //HIDO_UINT32 timeout = HIDO_TimerGetNearestTimeout(1000);
@@ -49,6 +52,7 @@
        }
        DBG_Poll();
        BT_Poll();
        SBUS_Poll();
        HIDO_ATLitePoll();
        Internet_Poll();
        GPS_Poll();
@@ -103,10 +107,10 @@
            
        uint16_t version = g_com_map[VERSION];
      //  printf("[BOOT] Version: %u\r\n", version);
      //  printf("[BOOT] DeviceID: %u\r\n", dev_id);
     //   printf("[BOOT] UDP Server: %u.%u.%u.%u:%u\r\n", ip0, ip1, ip2, ip3, udp_port);
      //  printf("[BOOT] TCP Server: %u.%u.%u.%u:%u\r\n", tip0, tip1, tip2, tip3, tcp_port);
        HIDO_Debug2("[BOOT] Version: %u\r\n", version);
        HIDO_Debug2("[BOOT] DeviceID: %u\r\n", dev_id);
        HIDO_Debug2("[BOOT] UDP Server: %u.%u.%u.%u:%u\r\n", ip0, ip1, ip2, ip3, udp_port);
        HIDO_Debug2("[BOOT] TCP Server: %u.%u.%u.%u:%u\r\n", tip0, tip1, tip2, tip3, tcp_port);
    }
    TaskHandle_t xTaskHandle = NULL;
STM32H743/Core/Inc/stm32h7xx_it.h
@@ -66,6 +66,8 @@
void USART2_IRQHandler(void);
void USART3_IRQHandler(void);
void DMA1_Stream7_IRQHandler(void);
void UART4_IRQHandler(void);
void DMA2_Stream0_IRQHandler(void);
void USART6_IRQHandler(void);
void TIM17_IRQHandler(void);
/* USER CODE BEGIN EFP */
STM32H743/Core/Src/main.c
@@ -50,10 +50,12 @@
TIM_HandleTypeDef htim3;
TIM_HandleTypeDef htim4;
UART_HandleTypeDef huart4;
UART_HandleTypeDef huart1;
UART_HandleTypeDef huart2;
UART_HandleTypeDef huart3;
UART_HandleTypeDef huart6;
DMA_HandleTypeDef hdma_uart4_rx;
DMA_HandleTypeDef hdma_usart1_rx;
DMA_HandleTypeDef hdma_usart1_tx;
DMA_HandleTypeDef hdma_usart2_rx;
@@ -87,6 +89,7 @@
static void MX_TIM3_Init(void);
static void MX_USART6_UART_Init(void);
static void MX_TIM4_Init(void);
static void MX_UART4_Init(void);
void StartDefaultTask(void *argument);
/* USER CODE BEGIN PFP */
@@ -145,11 +148,13 @@
  MX_TIM3_Init();
  MX_USART6_UART_Init();
  MX_TIM4_Init();
  MX_UART4_Init();
  /* USER CODE BEGIN 2 */
  UART6_StartReceive();
    Uart_Register(UART_ID_DBG, &huart1);
    Uart_Register(UART_ID_GPS, &huart2);
    Uart_Register(UART_ID_4G, &huart3);
    Uart_Register(UART_ID_SBUS, &huart4);
     Uart_Register(UART_ID_BT, &huart6);
     HAL_TIM_PWM_Start(&htim3, TIM_CHANNEL_1);   // MOTOR_TIM
@@ -295,7 +300,7 @@
  htim1.Init.Period = 13513;
  htim1.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim1.Init.RepetitionCounter = 0;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  htim1.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim1) != HAL_OK)
  {
    Error_Handler();
@@ -448,7 +453,7 @@
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim3.Init.Period = 13513;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  htim3.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim3) != HAL_OK)
  {
    Error_Handler();
@@ -511,7 +516,7 @@
  htim4.Init.CounterMode = TIM_COUNTERMODE_UP;
  htim4.Init.Period = 65535;
  htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;
  htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
  if (HAL_TIM_Base_Init(&htim4) != HAL_OK)
  {
    Error_Handler();
@@ -531,7 +536,7 @@
  {
    Error_Handler();
  }
  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_BOTHEDGE;
  sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
  sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
  sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
  sConfigIC.ICFilter = 0xF;
@@ -542,6 +547,55 @@
  /* USER CODE BEGIN TIM4_Init 2 */
  HAL_TIM_Base_Start_IT(&htim4);  // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ê±ï¿½ï¿½ï¿½ï¿½Ê¹ï¿½ï¿½ï¿½Ð¶ï¿½
  /* USER CODE END TIM4_Init 2 */
}
/**
  * @brief UART4 Initialization Function
  * @param None
  * @retval None
  */
static void MX_UART4_Init(void)
{
  /* USER CODE BEGIN UART4_Init 0 */
  /* USER CODE END UART4_Init 0 */
  /* USER CODE BEGIN UART4_Init 1 */
  /* USER CODE END UART4_Init 1 */
  huart4.Instance = UART4;
  huart4.Init.BaudRate = 100000;
  huart4.Init.WordLength = UART_WORDLENGTH_9B;
  huart4.Init.StopBits = UART_STOPBITS_2;
  huart4.Init.Parity = UART_PARITY_EVEN;
  huart4.Init.Mode = UART_MODE_TX_RX;
  huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart4.Init.OverSampling = UART_OVERSAMPLING_16;
  huart4.Init.OneBitSampling = UART_ONE_BIT_SAMPLE_DISABLE;
  huart4.Init.ClockPrescaler = UART_PRESCALER_DIV1;
  huart4.AdvancedInit.AdvFeatureInit = UART_ADVFEATURE_RXINVERT_INIT;
  huart4.AdvancedInit.RxPinLevelInvert = UART_ADVFEATURE_RXINV_ENABLE;
  if (HAL_UART_Init(&huart4) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetTxFifoThreshold(&huart4, UART_TXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_SetRxFifoThreshold(&huart4, UART_RXFIFO_THRESHOLD_1_8) != HAL_OK)
  {
    Error_Handler();
  }
  if (HAL_UARTEx_DisableFifoMode(&huart4) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN UART4_Init 2 */
  /* USER CODE END UART4_Init 2 */
}
@@ -747,6 +801,7 @@
  /* DMA controller clock enable */
  __HAL_RCC_DMA1_CLK_ENABLE();
  __HAL_RCC_DMA2_CLK_ENABLE();
  /* DMA interrupt init */
  /* DMA1_Stream0_IRQn interrupt configuration */
@@ -773,6 +828,9 @@
  /* DMA1_Stream7_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Stream7_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DMA1_Stream7_IRQn);
  /* DMA2_Stream0_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA2_Stream0_IRQn, 5, 0);
  HAL_NVIC_EnableIRQ(DMA2_Stream0_IRQn);
}
STM32H743/Core/Src/stm32h7xx_hal_msp.c
@@ -23,6 +23,8 @@
/* USER CODE BEGIN Includes */
/* USER CODE END Includes */
extern DMA_HandleTypeDef hdma_uart4_rx;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
@@ -123,7 +125,7 @@
    /* Peripheral clock enable */
    __HAL_RCC_TIM2_CLK_ENABLE();
    /* TIM2 interrupt Init */
    HAL_NVIC_SetPriority(TIM2_IRQn, 0, 0);
    HAL_NVIC_SetPriority(TIM2_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(TIM2_IRQn);
    /* USER CODE BEGIN TIM2_MspInit 1 */
@@ -137,7 +139,7 @@
    /* Peripheral clock enable */
    __HAL_RCC_TIM3_CLK_ENABLE();
    /* TIM3 interrupt Init */
    HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
    HAL_NVIC_SetPriority(TIM3_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(TIM3_IRQn);
    /* USER CODE BEGIN TIM3_MspInit 1 */
@@ -163,7 +165,7 @@
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);
    /* TIM4 interrupt Init */
    HAL_NVIC_SetPriority(TIM4_IRQn, 0, 0);
    HAL_NVIC_SetPriority(TIM4_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(TIM4_IRQn);
    /* USER CODE BEGIN TIM4_MspInit 1 */
@@ -323,7 +325,63 @@
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  RCC_PeriphCLKInitTypeDef PeriphClkInitStruct = {0};
  if(huart->Instance==USART1)
  if(huart->Instance==UART4)
  {
    /* USER CODE BEGIN UART4_MspInit 0 */
    /* USER CODE END UART4_MspInit 0 */
  /** Initializes the peripherals clock
  */
    PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_UART4;
    PeriphClkInitStruct.Usart234578ClockSelection = RCC_USART234578CLKSOURCE_D2PCLK1;
    if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK)
    {
      Error_Handler();
    }
    /* Peripheral clock enable */
    __HAL_RCC_UART4_CLK_ENABLE();
    __HAL_RCC_GPIOA_CLK_ENABLE();
    /**UART4 GPIO Configuration
    PA11     ------> UART4_RX
    PA12     ------> UART4_TX
    */
    GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
    GPIO_InitStruct.Alternate = GPIO_AF6_UART4;
    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    /* UART4 DMA Init */
    /* UART4_RX Init */
    hdma_uart4_rx.Instance = DMA2_Stream0;
    hdma_uart4_rx.Init.Request = DMA_REQUEST_UART4_RX;
    hdma_uart4_rx.Init.Direction = DMA_PERIPH_TO_MEMORY;
    hdma_uart4_rx.Init.PeriphInc = DMA_PINC_DISABLE;
    hdma_uart4_rx.Init.MemInc = DMA_MINC_ENABLE;
    hdma_uart4_rx.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
    hdma_uart4_rx.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
    hdma_uart4_rx.Init.Mode = DMA_CIRCULAR;
    hdma_uart4_rx.Init.Priority = DMA_PRIORITY_LOW;
    hdma_uart4_rx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    if (HAL_DMA_Init(&hdma_uart4_rx) != HAL_OK)
    {
      Error_Handler();
    }
    __HAL_LINKDMA(huart,hdmarx,hdma_uart4_rx);
    /* UART4 interrupt Init */
    HAL_NVIC_SetPriority(UART4_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(UART4_IRQn);
    /* USER CODE BEGIN UART4_MspInit 1 */
    /* USER CODE END UART4_MspInit 1 */
  }
  else if(huart->Instance==USART1)
  {
    /* USER CODE BEGIN USART1_MspInit 0 */
@@ -630,7 +688,30 @@
  */
void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
{
  if(huart->Instance==USART1)
  if(huart->Instance==UART4)
  {
    /* USER CODE BEGIN UART4_MspDeInit 0 */
    /* USER CODE END UART4_MspDeInit 0 */
    /* Peripheral clock disable */
    __HAL_RCC_UART4_CLK_DISABLE();
    /**UART4 GPIO Configuration
    PA11     ------> UART4_RX
    PA12     ------> UART4_TX
    */
    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);
    /* UART4 DMA DeInit */
    HAL_DMA_DeInit(huart->hdmarx);
    /* UART4 interrupt DeInit */
    HAL_NVIC_DisableIRQ(UART4_IRQn);
    /* USER CODE BEGIN UART4_MspDeInit 1 */
    /* USER CODE END UART4_MspDeInit 1 */
  }
  else if(huart->Instance==USART1)
  {
    /* USER CODE BEGIN USART1_MspDeInit 0 */
STM32H743/Core/Src/stm32h7xx_it.c
@@ -59,6 +59,7 @@
extern TIM_HandleTypeDef htim2;
extern TIM_HandleTypeDef htim3;
extern TIM_HandleTypeDef htim4;
extern DMA_HandleTypeDef hdma_uart4_rx;
extern DMA_HandleTypeDef hdma_usart1_rx;
extern DMA_HandleTypeDef hdma_usart1_tx;
extern DMA_HandleTypeDef hdma_usart2_rx;
@@ -67,6 +68,7 @@
extern DMA_HandleTypeDef hdma_usart3_tx;
extern DMA_HandleTypeDef hdma_usart6_rx;
extern DMA_HandleTypeDef hdma_usart6_tx;
extern UART_HandleTypeDef huart4;
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
extern UART_HandleTypeDef huart3;
@@ -372,6 +374,34 @@
}
/**
  * @brief This function handles UART4 global interrupt.
  */
void UART4_IRQHandler(void)
{
  /* USER CODE BEGIN UART4_IRQn 0 */
  /* USER CODE END UART4_IRQn 0 */
  HAL_UART_IRQHandler(&huart4);
  /* USER CODE BEGIN UART4_IRQn 1 */
  /* USER CODE END UART4_IRQn 1 */
}
/**
  * @brief This function handles DMA2 stream0 global interrupt.
  */
void DMA2_Stream0_IRQHandler(void)
{
  /* USER CODE BEGIN DMA2_Stream0_IRQn 0 */
  /* USER CODE END DMA2_Stream0_IRQn 0 */
  HAL_DMA_IRQHandler(&hdma_uart4_rx);
  /* USER CODE BEGIN DMA2_Stream0_IRQn 1 */
  /* USER CODE END DMA2_Stream0_IRQn 1 */
}
/**
  * @brief This function handles USART6 global interrupt.
  */
void USART6_IRQHandler(void)
STM32H743/FML/SBUS.c
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,432 @@
/*******************************************************************************
 * File Name         : SBUS.c
 * Description       : SBUS RC receiver protocol parser implementation
 * Created on        : 2025-11-13
 * Author            : Auto-generated
 *******************************************************************************/
/*******************************************************************************
 *                              Include Files                                  *
 *******************************************************************************/
#include "SBUS.h"
#include "Uart.h"
#include "stm32h7xx_hal.h"
#include "stm32h7xx_hal_uart.h"
#include "stm32h7xx_hal_dma.h"
#include <string.h>
#include "pwm_ctrol.h"
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
#define SBUS_TIMEOUT_MS 100
// è°ƒè¯•开关:设置为 1 å¯ç”¨è°ƒè¯•输出(需要 printf é‡å®šå‘),设置为 0 ç¦ç”¨
#define SBUS_DEBUG_ENABLE           0
#if SBUS_DEBUG_ENABLE
    #define SBUS_DEBUG_PRINT(...)   printf(__VA_ARGS__)
#else
    #define SBUS_DEBUG_PRINT(...)   ((void)0)
#endif
/*******************************************************************************
 *                             Global Variables                                *
 *******************************************************************************/
// SBUS æŽ¥æ”¶ç¼“冲区 (DMA å†™å…¥)
static HIDO_UINT8 g_au8SBUSRxBuf[SBUS_UART_RX_BUF_SIZE] = {0};
// SBUS å½“前通道数据
static ST_SBUSData g_stSBUSData = {0};
// ä¸´æ—¶è§£æžç¼“冲区 (用于帧边界对齐)
static HIDO_UINT8 g_au8ParseBuf[SBUS_FRAME_SIZE] = {0};
static HIDO_UINT8 g_u8ParseBufIdx = 0;
// è°ƒè¯•统计
static HIDO_UINT32 g_u32DebugPollCount = 0;
static HIDO_UINT32 g_u32DebugLastDmaRemaining = 0;
// SBUS failsafe active flag
static volatile HIDO_UINT8 g_bSBUSFailsafeActive = 0;
/*******************************************************************************
 *                             Local Function                                  *
 *******************************************************************************/
/**
 * @brief è§£æžå•个 SBUS å¸§ (25 å­—节)
 * @param _pu8Frame: å¸§æ•°æ®æŒ‡é’ˆ (必须指向完整的 25 å­—节)
 * @return HIDO_TRUE: è§£æžæˆåŠŸ, HIDO_FALSE: æ ¡éªŒå¤±è´¥
 */
static HIDO_INT32 SBUS_ParseFrame(const HIDO_UINT8 *_pu8Frame)
{
    // 1. æ ¡éªŒå¸§å¤´å’Œå¸§å°¾
    if (_pu8Frame[0] != SBUS_HEADER || _pu8Frame[24] != SBUS_FOOTER)
    {
        g_stSBUSData.m_u32ErrorCount++;
        return HIDO_FALSE;
    }
    // 2. æå– 16 ä¸ª 11-bit é€šé“ (bit-packed in bytes 1~22)
    // SBUS åè®®: 176 bits (16 channels * 11 bits) å­˜å‚¨åœ¨ 22 å­—节中
    // Channel layout (LSB first):
    // Byte 1:   Ch0[0:7]
    // Byte 2:   Ch0[8:10] | Ch1[0:4]
    // Byte 3:   Ch1[5:10] | Ch2[0:1]
    // ... (依次类推)
    g_stSBUSData.m_au16Channels[0]  = (HIDO_UINT16)((_pu8Frame[1]      | _pu8Frame[2] << 8)                    & 0x07FF);
    g_stSBUSData.m_au16Channels[1]  = (HIDO_UINT16)((_pu8Frame[2] >> 3 | _pu8Frame[3] << 5)                    & 0x07FF);
    g_stSBUSData.m_au16Channels[2]  = (HIDO_UINT16)((_pu8Frame[3] >> 6 | _pu8Frame[4] << 2 | _pu8Frame[5] << 10) & 0x07FF);
    g_stSBUSData.m_au16Channels[3]  = (HIDO_UINT16)((_pu8Frame[5] >> 1 | _pu8Frame[6] << 7)                    & 0x07FF);
    g_stSBUSData.m_au16Channels[4]  = (HIDO_UINT16)((_pu8Frame[6] >> 4 | _pu8Frame[7] << 4)                    & 0x07FF);
    g_stSBUSData.m_au16Channels[5]  = (HIDO_UINT16)((_pu8Frame[7] >> 7 | _pu8Frame[8] << 1 | _pu8Frame[9] << 9)  & 0x07FF);
    g_stSBUSData.m_au16Channels[6]  = (HIDO_UINT16)((_pu8Frame[9] >> 2 | _pu8Frame[10] << 6)                   & 0x07FF);
    g_stSBUSData.m_au16Channels[7]  = (HIDO_UINT16)((_pu8Frame[10] >> 5 | _pu8Frame[11] << 3)                  & 0x07FF);
    g_stSBUSData.m_au16Channels[8]  = (HIDO_UINT16)((_pu8Frame[12]      | _pu8Frame[13] << 8)                  & 0x07FF);
    g_stSBUSData.m_au16Channels[9]  = (HIDO_UINT16)((_pu8Frame[13] >> 3 | _pu8Frame[14] << 5)                  & 0x07FF);
    g_stSBUSData.m_au16Channels[10] = (HIDO_UINT16)((_pu8Frame[14] >> 6 | _pu8Frame[15] << 2 | _pu8Frame[16] << 10) & 0x07FF);
    g_stSBUSData.m_au16Channels[11] = (HIDO_UINT16)((_pu8Frame[16] >> 1 | _pu8Frame[17] << 7)                  & 0x07FF);
    g_stSBUSData.m_au16Channels[12] = (HIDO_UINT16)((_pu8Frame[17] >> 4 | _pu8Frame[18] << 4)                  & 0x07FF);
    g_stSBUSData.m_au16Channels[13] = (HIDO_UINT16)((_pu8Frame[18] >> 7 | _pu8Frame[19] << 1 | _pu8Frame[20] << 9) & 0x07FF);
    g_stSBUSData.m_au16Channels[14] = (HIDO_UINT16)((_pu8Frame[20] >> 2 | _pu8Frame[21] << 6)                  & 0x07FF);
    g_stSBUSData.m_au16Channels[15] = (HIDO_UINT16)((_pu8Frame[21] >> 5 | _pu8Frame[22] << 3)                  & 0x07FF);
    // 3. æå–标志位 (Byte 23)
    // Bit 0: CH17 digital
    // Bit 1: CH18 digital
    // Bit 2: Frame Lost
    // Bit 3: Failsafe
    g_stSBUSData.m_u8Ch17       = (_pu8Frame[23] & 0x01) ? 1 : 0;
    g_stSBUSData.m_u8Ch18       = (_pu8Frame[23] & 0x02) ? 1 : 0;
    g_stSBUSData.m_u8FrameLost  = (_pu8Frame[23] & 0x04) ? 1 : 0;
    g_stSBUSData.m_u8Failsafe   = (_pu8Frame[23] & 0x08) ? 1 : 0;
    // 4. æ›´æ–°æ—¶é—´æˆ³å’Œè®¡æ•°
    g_stSBUSData.m_u32LastUpdateTick = HAL_GetTick();
    g_stSBUSData.m_u32FrameCount++;
    // è§£æžæˆåŠŸåŽç«‹å³è§¦å‘ PWM æŽ§åˆ¶ï¼ˆæœ€å°å»¶è¿Ÿï¼‰
    // åŒæ—¶æ¸…除 failsafe æ ‡å¿—(如果之前触发过)
    if (g_bSBUSFailsafeActive)
    {
        g_bSBUSFailsafeActive = 0;
    }
    SBUS_Control_PWM();
    return HIDO_TRUE;
}
/**
 * @brief ä»Ž DMA ç¼“冲区中查找并解析 SBUS å¸§
 * @param _pu8Buf: DMA ç¼“冲区指针
 * @param _u32Len: å¯è¯»æ•°æ®é•¿åº¦
 * @return æ— 
 */
static HIDO_VOID SBUS_ProcessBuffer(const HIDO_UINT8 *_pu8Buf, HIDO_UINT32 _u32Len)
{
    static HIDO_UINT32 s_u32TotalBytesProcessed = 0;
    for (HIDO_UINT32 i = 0; i < _u32Len; i++)
    {
        HIDO_UINT8 byte = _pu8Buf[i];
        s_u32TotalBytesProcessed++;
        // çŠ¶æ€æœº: å¯»æ‰¾å¸§å¤´ 0x0F
        if (g_u8ParseBufIdx == 0)
        {
            if (byte == SBUS_HEADER)
            {
                g_au8ParseBuf[g_u8ParseBufIdx++] = byte;
            }
            // å¦åˆ™ä¸¢å¼ƒéžå¸§å¤´å­—节
        }
        else
        {
            g_au8ParseBuf[g_u8ParseBufIdx++] = byte;
            // æ”¶æ»¡ 25 å­—节后尝试解析
            if (g_u8ParseBufIdx >= SBUS_FRAME_SIZE)
            {
                SBUS_ParseFrame(g_au8ParseBuf);
                g_u8ParseBufIdx = 0;  // é‡ç½®çŠ¶æ€æœº
            }
        }
    }
}
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
/**
 * @brief åˆå§‹åŒ– SBUS æŽ¥æ”¶æ¨¡å—
 */
HIDO_INT32 SBUS_Init(HIDO_VOID)
{
    HIDO_INT32 ret;
    ST_UartInit stUartInit;
    UART_HandleTypeDef *pUart = NULL;
    // å…ˆæ£€æŸ¥ UART æ˜¯å¦å·²ç»æ³¨å†Œ
    ret = Uart_GetHandle(UART_ID_SBUS, (HIDO_VOID **)&pUart);
    if (pUart == NULL)
    {
        return HIDO_FALSE;
    }
    // åˆå§‹åŒ– SBUS æ•°æ®ç»“æž„
    memset(&g_stSBUSData, 0, sizeof(g_stSBUSData));
    memset(g_au8ParseBuf, 0, sizeof(g_au8ParseBuf));
    memset(g_au8SBUSRxBuf, 0, sizeof(g_au8SBUSRxBuf));
    g_u8ParseBufIdx = 0;
    g_u32DebugPollCount = 0;
    g_u32DebugLastDmaRemaining = 0;
    // é…ç½® UART4 æŽ¥æ”¶ (DMA æ¨¡å¼)
    stUartInit.m_eRxMode = UART_RX_MODE_DMA;
    stUartInit.m_pu8RxBuf = g_au8SBUSRxBuf;
    stUartInit.m_u32RxBufSize = SBUS_UART_RX_BUF_SIZE;
    // ä¸ä½¿ç”¨å‘送功能 (SBUS ä»…单向接收)
    stUartInit.m_eTxMode = UART_TX_MODE_POLL;
    stUartInit.m_pu8TxBuf = NULL;
    stUartInit.m_u32TxBufSize = 0;
    stUartInit.m_u32TxQueueMemberCnt = 0;
    stUartInit.m_fnRxISR = NULL;
    ret = Uart_Init(UART_ID_SBUS, &stUartInit);
    if (ret != HIDO_OK)
    {
        return HIDO_FALSE;
    }
    // èŽ·å– UART å¥æŸ„以验证初始化
    ret = Uart_GetHandle(UART_ID_SBUS, (HIDO_VOID **)&pUart);
    if (ret != HIDO_OK || pUart == NULL)
    {
        return HIDO_FALSE;
    }
    return HIDO_TRUE;
}
/**
 * @brief SBUS è½®è¯¢å‡½æ•° (主循环调用)
 */
HIDO_VOID SBUS_Poll(HIDO_VOID)
{
    UART_HandleTypeDef *pUart = NULL;
    HIDO_INT32 ret;
    g_u32DebugPollCount++;
    // èŽ·å– UART å¥æŸ„
    ret = Uart_GetHandle(UART_ID_SBUS, (HIDO_VOID **)&pUart);
    if (ret != HIDO_OK || pUart == NULL)
    {
        return;
    }
    // æ£€æŸ¥ DMA å¥æŸ„
    if (pUart->hdmarx == NULL)
    {
        return;
    }
    // è®¡ç®— DMA å·²æŽ¥æ”¶çš„æ•°æ®é‡
    // DMA->CNDTR è¿”回剩余未传输的数据个数,因此已接收 = BufSize - CNDTR
    HIDO_UINT32 dmaRemaining = __HAL_DMA_GET_COUNTER(pUart->hdmarx);
    HIDO_UINT32 receivedBytes = SBUS_UART_RX_BUF_SIZE - dmaRemaining;
    g_u32DebugLastDmaRemaining = dmaRemaining;
    // å¤„理新接收的数据
    // æ³¨æ„: è¿™é‡Œä½¿ç”¨çŽ¯å½¢ç¼“å†²åŒºç®€å•è¯»å–ç­–ç•¥ (适合短周期轮询)
    static HIDO_UINT32 s_u32LastProcessedIdx = 0;
    if (receivedBytes > s_u32LastProcessedIdx)
    {
        HIDO_UINT32 newBytes = receivedBytes - s_u32LastProcessedIdx;
        SBUS_ProcessBuffer(&g_au8SBUSRxBuf[s_u32LastProcessedIdx], newBytes);
        s_u32LastProcessedIdx = receivedBytes;
    }
    // å¤„理 DMA çŽ¯å½¢å›žç»• (当 CNDTR é‡è½½æ—¶)
    if (receivedBytes < s_u32LastProcessedIdx)
    {
        // å…ˆå¤„理缓冲区尾部
        HIDO_UINT32 tailBytes = SBUS_UART_RX_BUF_SIZE - s_u32LastProcessedIdx;
        if (tailBytes > 0)
        {
            SBUS_ProcessBuffer(&g_au8SBUSRxBuf[s_u32LastProcessedIdx], tailBytes);
        }
        // å†å¤„理缓冲区头部
        if (receivedBytes > 0)
        {
            SBUS_ProcessBuffer(&g_au8SBUSRxBuf[0], receivedBytes);
        }
        s_u32LastProcessedIdx = receivedBytes;
    }
    // Failsafe: å¦‚果距离上次有效帧超过 1000ms,触发中立脉宽(1500us)
    if (!g_bSBUSFailsafeActive)
    {
        HIDO_UINT32 currentTick = HAL_GetTick();
        HIDO_UINT32 elapsed = currentTick - g_stSBUSData.m_u32LastUpdateTick;
        if (elapsed >= 1000)
        {
            // è§¦å‘一次性 failsafe:将转向与电机脉宽设为中立 1500us
            Set_Steering_Pulse(1500);
            Set_Motor_Pulse(1500);
            g_bSBUSFailsafeActive = 1;
        }
    }
}
/**
 * @brief èŽ·å– SBUS é€šé“数据副本
 */
HIDO_INT32 SBUS_GetData(ST_SBUSData *_pstData)
{
    if (_pstData == NULL)
    {
        return HIDO_FALSE;
    }
    // æ£€æŸ¥ä¿¡å·æ˜¯å¦æœ‰æ•ˆ (最近 100ms å†…收到帧)
    if (!SBUS_IsSignalValid(SBUS_TIMEOUT_MS))
    {
        return HIDO_FALSE;
    }
    // æ‹·è´æ•°æ® (简单拷贝, è‹¥éœ€çº¿ç¨‹å®‰å…¨å¯åŠ ä¸´ç•ŒåŒº)
    memcpy(_pstData, &g_stSBUSData, sizeof(ST_SBUSData));
    return HIDO_TRUE;
}
/**
 * @brief èŽ·å–å•ä¸ªé€šé“å€¼
 */
HIDO_UINT16 SBUS_GetChannel(HIDO_UINT8 _u8Channel)
{
    if (_u8Channel >= SBUS_NUM_CHANNELS)
    {
        return SBUS_CENTER_VALUE;
    }
    if (!SBUS_IsSignalValid(SBUS_TIMEOUT_MS))
    {
        return SBUS_CENTER_VALUE;
    }
    return g_stSBUSData.m_au16Channels[_u8Channel];
}
/**
 * @brief èŽ·å–æ•°å­—é€šé“çŠ¶æ€
 */
HIDO_UINT8 SBUS_GetDigitalChannel(HIDO_UINT8 _u8DigitalChannel)
{
    if (!SBUS_IsSignalValid(SBUS_TIMEOUT_MS))
    {
        return 0;
    }
    if (_u8DigitalChannel == 17)
    {
        return g_stSBUSData.m_u8Ch17;
    }
    else if (_u8DigitalChannel == 18)
    {
        return g_stSBUSData.m_u8Ch18;
    }
    return 0;
}
/**
 * @brief æ£€æŸ¥ SBUS ä¿¡å·æ˜¯å¦æœ‰æ•ˆ
 */
HIDO_INT32 SBUS_IsSignalValid(HIDO_UINT32 _u32TimeoutMs)
{
    HIDO_UINT32 currentTick = HAL_GetTick();
    HIDO_UINT32 elapsed = currentTick - g_stSBUSData.m_u32LastUpdateTick;
    return (elapsed < _u32TimeoutMs) ? HIDO_TRUE : HIDO_FALSE;
}
/**
 * @brief èŽ·å–æŽ¥æ”¶ç»Ÿè®¡ä¿¡æ¯
 */
HIDO_VOID SBUS_GetStats(HIDO_UINT32 *_pu32FrameCount, HIDO_UINT32 *_pu32ErrorCount)
{
    if (_pu32FrameCount != NULL)
    {
        *_pu32FrameCount = g_stSBUSData.m_u32FrameCount;
    }
    if (_pu32ErrorCount != NULL)
    {
        *_pu32ErrorCount = g_stSBUSData.m_u32ErrorCount;
    }
}
/**
 * @brief è°ƒè¯•函数:打印 SBUS çŠ¶æ€å’Œç»Ÿè®¡ä¿¡æ¯
 */
HIDO_VOID SBUS_PrintDebugInfo(HIDO_VOID)
{
    UART_HandleTypeDef *pUart = NULL;
    HIDO_INT32 ret;
    HIDO_Debug2("\r\n========== SBUS Debug Info ==========\r\n");
    HIDO_Debug2("Poll count:      %u\r\n", g_u32DebugPollCount);
    HIDO_Debug2("Frame count:     %u\r\n", g_stSBUSData.m_u32FrameCount);
    HIDO_Debug2("Error count:     %u\r\n", g_stSBUSData.m_u32ErrorCount);
    HIDO_Debug2("Last update:     %u ms ago\r\n",
                HAL_GetTick() - g_stSBUSData.m_u32LastUpdateTick);
    HIDO_Debug2("Parse buf idx:   %u\r\n", g_u8ParseBufIdx);
    ret = Uart_GetHandle(UART_ID_SBUS, (HIDO_VOID **)&pUart);
    if (ret == HIDO_OK && pUart != NULL)
    {
        if (pUart->hdmarx != NULL)
        {
            HIDO_UINT32 dmaRemaining = __HAL_DMA_GET_COUNTER(pUart->hdmarx);
            HIDO_Debug2("DMA remaining:   %u\r\n", dmaRemaining);
            HIDO_Debug2("DMA received:    %u\r\n", SBUS_UART_RX_BUF_SIZE - dmaRemaining);
            HIDO_Debug2("DMA state:       %u\r\n", HAL_DMA_GetState(pUart->hdmarx));
        }
        else
        {
            HIDO_Debug2("DMA handle:      NULL!\r\n");
        }
    }
    else
    {
        HIDO_Debug2("UART handle:     NULL!\r\n");
    }
    if (g_stSBUSData.m_u32FrameCount > 0)
    {
        HIDO_Debug2("\r\nLast frame channels:\r\n");
        for (HIDO_UINT8 i = 0; i < 8; i++)
        {
            HIDO_Debug2("  CH%02u: %4u", i, g_stSBUSData.m_au16Channels[i]);
            if ((i + 1) % 4 == 0) HIDO_Debug2("\r\n");
        }
        HIDO_Debug2("  CH17: %u, CH18: %u\r\n",
                    g_stSBUSData.m_u8Ch17, g_stSBUSData.m_u8Ch18);
        HIDO_Debug2("  FrameLost: %u, Failsafe: %u\r\n",
                    g_stSBUSData.m_u8FrameLost, g_stSBUSData.m_u8Failsafe);
    }
    HIDO_Debug2("\r\nRaw RX buffer (first 32 bytes):\r\n");
    for (HIDO_UINT8 i = 0; i < 32; i++)
    {
        HIDO_Debug2("%02X ", g_au8SBUSRxBuf[i]);
        if ((i + 1) % 16 == 0) HIDO_Debug2("\r\n");
    }
    HIDO_Debug2("====================================\r\n\r\n");
}
STM32H743/FML/SBUS.h
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,119 @@
/*******************************************************************************
 * File Name         : SBUS.h
 * Description       : SBUS RC receiver protocol parser for STM32H7
 *                     UART4 (100kbps, 8E2) + DMA reception
 * Created on        : 2025-11-13
 * Author            : Auto-generated
 *******************************************************************************/
#ifndef FML_SBUS_H_
#define FML_SBUS_H_
/*******************************************************************************
 *                              Include Files                                  *
 *******************************************************************************/
#include "HIDO_TypeDef.h"
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
#define SBUS_FRAME_SIZE                 25      // SBUS帧长度 (字节)
#define SBUS_HEADER                     0x0F    // å¸§å¤´
#define SBUS_FOOTER                     0x00    // å¸§å°¾
#define SBUS_NUM_CHANNELS               16      // é€šé“数量
#define SBUS_CHANNEL_BITS               11      // æ¯é€šé“位数
#define SBUS_MIN_VALUE                  0       // é€šé“最小值
#define SBUS_MAX_VALUE                  2047    // é€šé“最大值 (11-bit)
#define SBUS_CENTER_VALUE               1024    // é€šé“中心值
// ç¼“冲区大小 (建议保留多帧空间以应对DMA环形接收)
#define SBUS_UART_RX_BUF_SIZE           128     // DMA æŽ¥æ”¶ç¼“冲区
/*******************************************************************************
 *                             Type Definition                                 *
 *******************************************************************************/
/**
 * @brief SBUS é€šé“数据结构
 */
typedef struct
{
    HIDO_UINT16 m_au16Channels[SBUS_NUM_CHANNELS];  // 16个通道值 (0~2047)
    HIDO_UINT8  m_u8Ch17;                            // æ•°å­—通道 CH17 (0/1)
    HIDO_UINT8  m_u8Ch18;                            // æ•°å­—通道 CH18 (0/1)
    HIDO_UINT8  m_u8FrameLost;                       // å¸§ä¸¢å¤±æ ‡å¿—
    HIDO_UINT8  m_u8Failsafe;                        // å¤±æŽ§ä¿æŠ¤æ ‡å¿—
    HIDO_UINT32 m_u32LastUpdateTick;                 // æœ€åŽæ›´æ–°æ—¶åˆ» (ms)
    HIDO_UINT32 m_u32FrameCount;                     // ç´¯è®¡å¸§æ•°
    HIDO_UINT32 m_u32ErrorCount;                     // é”™è¯¯å¸§æ•°
} ST_SBUSData;
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
/**
 * @brief åˆå§‹åŒ– SBUS æŽ¥æ”¶æ¨¡å—
 *        - æ³¨å†Œ UART4 DMA æŽ¥æ”¶å›žè°ƒ
 *        - å¯åЍ DMA å¾ªçŽ¯æŽ¥æ”¶
 * @return HIDO_TRUE: æˆåŠŸ, HIDO_FALSE: å¤±è´¥
 */
HIDO_INT32 SBUS_Init(HIDO_VOID);
/**
 * @brief SBUS è½®è¯¢å‡½æ•° (需在主循环中定期调用)
 *        - æ£€æŸ¥ DMA æŽ¥æ”¶ç¼“冲区
 *        - è§£æž SBUS å¸§
 *        - æ›´æ–°é€šé“数据
 * @return æ— 
 */
HIDO_VOID SBUS_Poll(HIDO_VOID);
/**
 * @brief èŽ·å– SBUS é€šé“数据副本 (线程安全)
 * @param _pstData: è¾“出参数, å¡«å……通道数据
 * @return HIDO_TRUE: æˆåŠŸ, HIDO_FALSE: æ— æœ‰æ•ˆæ•°æ®
 */
HIDO_INT32 SBUS_GetData(ST_SBUSData *_pstData);
/**
 * @brief èŽ·å–å•ä¸ªé€šé“å€¼
 * @param _u8Channel: é€šé“号 (0~15)
 * @return é€šé“值 (0~2047), å¤±è´¥è¿”回 SBUS_CENTER_VALUE
 */
HIDO_UINT16 SBUS_GetChannel(HIDO_UINT8 _u8Channel);
/**
 * @brief èŽ·å–æ•°å­—é€šé“çŠ¶æ€
 * @param _u8DigitalChannel: æ•°å­—通道号 (17 æˆ– 18)
 * @return 0 æˆ– 1, å¤±è´¥è¿”回 0
 */
HIDO_UINT8 SBUS_GetDigitalChannel(HIDO_UINT8 _u8DigitalChannel);
/**
 * @brief æ£€æŸ¥ SBUS ä¿¡å·æ˜¯å¦æœ‰æ•ˆ (最近是否收到帧)
 * @param _u32TimeoutMs: è¶…时阈值 (ms), é»˜è®¤ 100ms
 * @return HIDO_TRUE: æœ‰æ•ˆ, HIDO_FALSE: è¶…时无信号
 */
HIDO_INT32 SBUS_IsSignalValid(HIDO_UINT32 _u32TimeoutMs);
/**
 * @brief èŽ·å–æŽ¥æ”¶ç»Ÿè®¡ä¿¡æ¯
 * @param _pu32FrameCount: è¾“出累计帧数
 * @param _pu32ErrorCount: è¾“出错误帧数
 * @return æ— 
 */
HIDO_VOID SBUS_GetStats(HIDO_UINT32 *_pu32FrameCount, HIDO_UINT32 *_pu32ErrorCount);
/**
 * @brief è°ƒè¯•函数:打印 SBUS è¯¦ç»†çŠ¶æ€ä¿¡æ¯
 *        åŒ…括 DMA çŠ¶æ€ã€ç¼“å†²åŒºå†…å®¹ã€é€šé“å€¼ç­‰
 * @return æ— 
 */
// SBUS Debug function (使用 HIDO_Debug2 è¾“出到 UART_ID_DBG)
HIDO_VOID SBUS_PrintDebugInfo(void);
// å£°æ˜Ž HIDO_Debug2 å‡½æ•°
extern HIDO_INT32 HIDO_Debug2(const HIDO_CHAR *_pcFmt, ...);
#endif /* FML_SBUS_H_ */
STM32H743/FML/SBUS_ʹÓÃ˵Ã÷.md
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,412 @@
# SBUS èˆªæ¨¡é¥æŽ§å™¨æŽ¥æ”¶æ¨¡å—使用说明
## æ¦‚è¿°
本模块实现了 SBUS åè®®ï¼ˆFutaba SBUS)的解析,用于接收航模遥控器信号。
### ç¡¬ä»¶é…ç½®
- **UART**: UART4 (STM32H743)
- **波特率**: 100kbps
- **格式**: 8E2 (8 æ•°æ®ä½, å¶æ ¡éªŒ, 2 åœæ­¢ä½)
- **接收模式**: DMA å¾ªçŽ¯æŽ¥æ”¶
- **信号反向**: å·²å¯ç”¨ RX åå‘功能(适配 SBUS åå‘逻辑)
### åè®®è§„æ ¼
- **帧长度**: 25 å­—节
- **帧头**: 0x0F
- **帧尾**: 0x00
- **通道数**: 16 ä¸ªæ¨¡æ‹Ÿé€šé“ (11-bit, 0~2047) + 2 ä¸ªæ•°å­—通道 (CH17/CH18)
- **标志位**: Frame Lost、Failsafe
- **帧率**: çº¦ 7~14 ms/帧 (取决于发射机)
---
## API æŽ¥å£
### 1. åˆå§‹åŒ–
```c
#include "SBUS.h"
void app_task(void *pvParameters)
{
    // åœ¨ä»»åŠ¡åˆå§‹åŒ–é˜¶æ®µè°ƒç”¨ï¼ˆå·²é›†æˆåˆ° app.c)
    SBUS_Init();
    while(1)
    {
        // ä¸»å¾ªçŽ¯è½®è¯¢
        SBUS_Poll();
        // ...
    }
}
```
### 2. èŽ·å–å®Œæ•´é€šé“æ•°æ®
```c
ST_SBUSData sbusData;
if (SBUS_GetData(&sbusData) == HIDO_TRUE)
{
    // æˆåŠŸèŽ·å–æ•°æ®ï¼ˆä¿¡å·æœ‰æ•ˆï¼‰
    printf("CH0: %u, CH1: %u, CH2: %u\n",
           sbusData.m_au16Channels[0],
           sbusData.m_au16Channels[1],
           sbusData.m_au16Channels[2]);
    // æ£€æŸ¥å¤±æŽ§ä¿æŠ¤æ ‡å¿—
    if (sbusData.m_u8Failsafe)
    {
        printf("WARNING: Failsafe activated!\n");
    }
    // æ£€æŸ¥å¸§ä¸¢å¤±æ ‡å¿—
    if (sbusData.m_u8FrameLost)
    {
        printf("WARNING: Frame lost!\n");
    }
    // æ•°å­—通道
    printf("CH17: %u, CH18: %u\n", sbusData.m_u8Ch17, sbusData.m_u8Ch18);
}
else
{
    // ä¿¡å·è¶…时或无数据
    printf("SBUS signal lost\n");
}
```
### 3. èŽ·å–å•ä¸ªé€šé“å€¼
```c
// èŽ·å–æ²¹é—¨é€šé“ (假设 CH2 ä¸ºæ²¹é—¨)
HIDO_UINT16 throttle = SBUS_GetChannel(2);  // 0~2047
// å½’一化到 [-1.0, 1.0]
float throttle_normalized = (throttle - 1024.0f) / 1024.0f;
// æ˜ å°„到电机速度 (0~100%)
uint8_t motor_speed = (throttle * 100) / 2047;
```
### 4. èŽ·å–æ•°å­—é€šé“
```c
// èŽ·å–å¼€å…³çŠ¶æ€ (CH17 é€šå¸¸å¯¹åº”遥控器开关)
HIDO_UINT8 switch_state = SBUS_GetDigitalChannel(17);  // 0 æˆ– 1
if (switch_state == 1)
{
    printf("Switch ON\n");
}
else
{
    printf("Switch OFF\n");
}
```
### 5. æ£€æŸ¥ä¿¡å·æœ‰æ•ˆæ€§
```c
// æ£€æŸ¥æœ€è¿‘ 100ms å†…是否收到 SBUS å¸§
if (SBUS_IsSignalValid(100) == HIDO_TRUE)
{
    printf("SBUS signal OK\n");
}
else
{
    printf("SBUS signal LOST (timeout)\n");
    // è¿›å…¥å¤±æŽ§ä¿æŠ¤æ¨¡å¼
    // ...
}
```
### 6. èŽ·å–ç»Ÿè®¡ä¿¡æ¯
```c
HIDO_UINT32 frameCount, errorCount;
SBUS_GetStats(&frameCount, &errorCount);
printf("Total frames: %u, Errors: %u (%.2f%%)\n",
       frameCount, errorCount,
       (frameCount > 0) ? (errorCount * 100.0f / frameCount) : 0.0f);
```
---
## æ•°æ®ç»“构详解
### ST_SBUSData
```c
typedef struct
{
    HIDO_UINT16 m_au16Channels[16];      // 16 ä¸ªæ¨¡æ‹Ÿé€šé“, èŒƒå›´ 0~2047
    HIDO_UINT8  m_u8Ch17;                 // æ•°å­—通道 17, å€¼ 0 æˆ– 1
    HIDO_UINT8  m_u8Ch18;                 // æ•°å­—通道 18, å€¼ 0 æˆ– 1
    HIDO_UINT8  m_u8FrameLost;            // å¸§ä¸¢å¤±æ ‡å¿— (发射机标记)
    HIDO_UINT8  m_u8Failsafe;             // å¤±æŽ§ä¿æŠ¤æ ‡å¿— (接收机标记)
    HIDO_UINT32 m_u32LastUpdateTick;      // æœ€åŽæ›´æ–°æ—¶åˆ» (HAL_GetTick)
    HIDO_UINT32 m_u32FrameCount;          // ç´¯è®¡æŽ¥æ”¶å¸§æ•°
    HIDO_UINT32 m_u32ErrorCount;          // ç´¯è®¡é”™è¯¯å¸§æ•° (帧头/帧尾校验失败)
} ST_SBUSData;
```
### é€šé“映射示例(常见遥控器布局)
| é€šé“ | å¸¸è§åŠŸèƒ½ | å€¼èŒƒå›´ | ä¸­å¿ƒå€¼ |
|------|----------|--------|--------|
| CH0  | æ¨ªæ»š (Aileron) | 0~2047 | 1024 |
| CH1  | ä¿¯ä»° (Elevator) | 0~2047 | 1024 |
| CH2  | æ²¹é—¨ (Throttle) | 0~2047 | 172 (最低) |
| CH3  | æ–¹å‘ (Rudder) | 0~2047 | 1024 |
| CH4  | è¾…助开关 1 | 0~2047 | - |
| CH5  | è¾…助开关 2 | 0~2047 | - |
| ...  | å…¶ä»–自定义 | 0~2047 | - |
| CH17 | æ•°å­—开关 1 | 0/1 | - |
| CH18 | æ•°å­—开关 2 | 0/1 | - |
---
## å…¸åž‹åº”用场景
### åœºæ™¯1:手动遥控草坪机
```c
void Manual_Control_Task(void)
{
    ST_SBUSData sbus;
    if (SBUS_GetData(&sbus) != HIDO_TRUE)
    {
        // ä¿¡å·ä¸¢å¤±ï¼Œåœæ­¢ç”µæœº
        Motor_Stop();
        return;
    }
    // å¤±æŽ§ä¿æŠ¤è§¦å‘,停止
    if (sbus.m_u8Failsafe)
    {
        Motor_Stop();
        return;
    }
    // æå–控制量 (假设 CH1=前进/后退, CH3=左右转向)
    int16_t forward = (int16_t)sbus.m_au16Channels[1] - 1024;  // -1024~+1023
    int16_t turn = (int16_t)sbus.m_au16Channels[3] - 1024;     // -1024~+1023
    // å½’一化到 [-100, 100]
    int8_t forward_cmd = (forward * 100) / 1024;
    int8_t turn_cmd = (turn * 100) / 1024;
    // å‘送到差速电机控制器
    DiffDrive_SetCommand(forward_cmd, turn_cmd);
}
```
### åœºæ™¯2:模式切换(自动/手动)
```c
void Mode_Switch_Task(void)
{
    static uint8_t last_switch = 0;
    uint8_t current_switch = SBUS_GetDigitalChannel(17);
    // æ£€æµ‹å¼€å…³çŠ¶æ€å˜åŒ–
    if (current_switch != last_switch)
    {
        if (current_switch == 1)
        {
            // åˆ‡æ¢åˆ°è‡ªåŠ¨æ¨¡å¼
            System_SetMode(MODE_AUTO);
            printf("Switched to AUTO mode\n");
        }
        else
        {
            // åˆ‡æ¢åˆ°æ‰‹åŠ¨æ¨¡å¼
            System_SetMode(MODE_MANUAL);
            printf("Switched to MANUAL mode\n");
        }
        last_switch = current_switch;
    }
}
```
### åœºæ™¯3:失控保护监控
```c
void Failsafe_Monitor_Task(void)
{
    static uint32_t last_valid_tick = 0;
    if (SBUS_IsSignalValid(200) == HIDO_TRUE)
    {
        last_valid_tick = HAL_GetTick();
    }
    else
    {
        uint32_t lost_duration = HAL_GetTick() - last_valid_tick;
        if (lost_duration > 1000)  // ä¿¡å·ä¸¢å¤±è¶…过 1 ç§’
        {
            // è§¦å‘紧急停止
            Emergency_Stop();
            printf("EMERGENCY: SBUS signal lost for %u ms\n", lost_duration);
        }
    }
}
```
---
## è°ƒè¯•与诊断
### æ‰“印实时通道值
```c
void SBUS_Debug_Print(void)
{
    ST_SBUSData sbus;
    if (SBUS_GetData(&sbus) == HIDO_TRUE)
    {
        printf("SBUS Channels:\n");
        for (uint8_t i = 0; i < 16; i++)
        {
            printf("  CH%02u: %4u", i, sbus.m_au16Channels[i]);
            if ((i + 1) % 4 == 0) printf("\n");
        }
        printf("  CH17: %u, CH18: %u\n", sbus.m_u8Ch17, sbus.m_u8Ch18);
        printf("  FrameLost: %u, Failsafe: %u\n", sbus.m_u8FrameLost, sbus.m_u8Failsafe);
        printf("  Stats: Frames=%u, Errors=%u\n", sbus.m_u32FrameCount, sbus.m_u32ErrorCount);
    }
    else
    {
        printf("SBUS: No signal\n");
    }
}
```
### ä¿¡å·è´¨é‡æ£€æµ‹
```c
void SBUS_Quality_Check(void)
{
    HIDO_UINT32 frames, errors;
    SBUS_GetStats(&frames, &errors);
    if (frames > 1000)  // ç´¯ç§¯è¶³å¤Ÿæ ·æœ¬
    {
        float error_rate = (errors * 100.0f) / frames;
        if (error_rate > 5.0f)
        {
            printf("WARNING: High SBUS error rate: %.2f%%\n", error_rate);
            printf("  -> Check cable connection\n");
            printf("  -> Check RX pin inversion setting\n");
        }
        else
        {
            printf("SBUS quality: Good (error rate: %.2f%%)\n", error_rate);
        }
    }
}
```
---
## æ³¨æ„äº‹é¡¹
### 1. ä¿¡å·åå‘
- SBUS åè®®ä½¿ç”¨åå‘逻辑(idle high = 0V, idle low = 3.3V)
- STM32H7 UART4 å·²å¯ç”¨ `UART_ADVFEATURE_RXINV_ENABLE`
- å¦‚果收到的数据全是错误帧,检查是否需要禁用反向功能
### 2. æ³¢ç‰¹çއ容差
- SBUS æ ‡å‡†æ³¢ç‰¹çŽ‡ä¸º 100kbps
- STM32 å†…部时钟误差需控制在 Â±2% ä»¥å†…
- å¦‚果帧错误率高,可微调波特率 (99000 æˆ– 101000)
### 3. DMA ç¼“冲区大小
- å½“前设置为 128 å­—节(可容纳 5 å¸§ï¼‰
- å¦‚果主循环轮询间隔较长(>50ms),建议增大缓冲区
### 4. å¸§çŽ‡ä¸Žå»¶è¿Ÿ
- SBUS å¸§é—´éš”约 7~14ms
- `SBUS_Poll()` åº”至少以 20Hz é¢‘率调用(当前 app_task çº¦ 74Hz)
- æŽ§åˆ¶å»¶è¿Ÿ: é‡‡æ ·å»¶è¿Ÿ + è§£æžå»¶è¿Ÿ < 20ms
### 5. å¤±æŽ§ä¿æŠ¤ç­–ç•¥
- å»ºè®®åŒæ—¶ç›‘控 `m_u8Failsafe` æ ‡å¿—å’Œ `SBUS_IsSignalValid()` è¶…æ—¶
- å¤±æŽ§æ—¶ç«‹å³åœæ­¢æ‰€æœ‰è¿åŠ¨è¾“å‡º
- æ¢å¤ä¿¡å·åŽéœ€æ‰‹åŠ¨é‡æ–°ä½¿èƒ½ï¼ˆé˜²æ­¢æ„å¤–å¯åŠ¨ï¼‰
### 6. å¤šçº¿ç¨‹å®‰å…¨
- å½“前实现未使用临界区保护
- å¦‚需在 ISR æˆ–其他高优先级任务中访问,需添加互斥锁
---
## æ•…障排查
| é—®é¢˜ | å¯èƒ½åŽŸå›  | è§£å†³æ–¹æ¡ˆ |
|------|----------|----------|
| æ— æ³•接收数据 | UART4 æœªæ­£ç¡®åˆå§‹åŒ– | æ£€æŸ¥ `MX_UART4_Init()` è°ƒç”¨é¡ºåº |
| å¸§é”™è¯¯çއ 100% | RX ä¿¡å·åå‘设置错误 | åˆ‡æ¢ `UART_ADVFEATURE_RXINV` çŠ¶æ€ |
| ä¿¡å·è¶…æ—¶ | å‘射机未开启或距离过远 | æ£€æŸ¥é¥æŽ§å™¨ç”µæºå’Œå¤©çº¿ |
| é€šé“值抖动 | å¹²æ‰°æˆ–接触不良 | æ£€æŸ¥æŽ¥çº¿å±è”½å’ŒæŽ¥åœ° |
| éƒ¨åˆ†é€šé“无效 | å‘射机通道未激活 | æ£€æŸ¥å‘射机通道配置 |
| DMA æœªè§¦å‘ | DMA åˆå§‹åŒ–未完成 | ç¡®è®¤ `HAL_UART_Receive_DMA()` å·²è°ƒç”¨ |
---
## æŽ¥çº¿å‚考
### æ ‡å‡† SBUS æŽ¥å£ï¼ˆ3 çº¿ï¼‰
```
SBUS æ¨¡å—        STM32H743
---------        ----------
  GND    ------->   GND
  5V     ------->   5V (或 VCC)
  SBUS   ------->   UART4_RX (PA1 æˆ–根据实际引脚)
```
### æ³¨æ„
- SBUS ä¿¡å·ç”µå¹³ä¸º 3.3V TTL(部分模块需要电平转换)
- ç¡®ä¿ SBUS è¾“出端与 STM32 RX å¼•脚直连(无需上拉/下拉电阻)
---
## æ‰©å±•功能建议
### 1. ä¸­ä½æ ¡å‡†
```c
void SBUS_CalibrateCenter(uint8_t channel)
{
    uint16_t center_value = SBUS_GetChannel(channel);
    // ä¿å­˜åˆ° Flash æˆ–配置文件
    Config_SetChannelCenter(channel, center_value);
}
```
### 2. é€šé“映射重定义
```c
typedef enum {
    RC_AILERON = 0,
    RC_ELEVATOR = 1,
    RC_THROTTLE = 2,
    RC_RUDDER = 3,
    RC_SWITCH_A = 4,
    RC_SWITCH_B = 5,
} E_RCChannel;
uint16_t RC_GetMappedChannel(E_RCChannel ch)
{
    return SBUS_GetChannel(g_channel_map[ch]);
}
```
### 3. æŒ‡æ•°æ›²çº¿è°ƒæ•´
```c
int16_t RC_ApplyExpo(int16_t raw_value, float expo_factor)
{
    float normalized = raw_value / 1024.0f;  // -1.0 ~ 1.0
    float expo = expo_factor * normalized * normalized * normalized +
                 (1 - expo_factor) * normalized;
    return (int16_t)(expo * 1024.0f);
}
```
---
生成时间:2025-11-13
模块版本:v1.0
维护者:项目团队
STM32H743/FML/pwm_ctrol.c
@@ -10,6 +10,7 @@
#include "DBG.h"
#include "Uart.h"
#include "HIDO_Util.h"
#include "SBUS.h"
#define STATE_WAIT_RISING   0
#define STATE_WAIT_FALLING  1
@@ -21,7 +22,7 @@
// è®¾ç½®æ‰€æœ‰ç”µæœºåˆ°æŒ‡å®šå ç©ºæ¯”
// ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ðµï¿½ï¿½ï¿½ï¿½Ö¸ï¿½ï¿½Õ¼ï¿½Õ±ï¿½
void set_all_pwm(uint16_t duty)
{
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, duty);
@@ -34,45 +35,45 @@
    __HAL_TIM_SET_COMPARE(&htim3, TIM_CHANNEL_2, duty);
}
// å‘左:前轮左转,后轮右转
// ï¿½ï¿½ï¿½ï¿½Ç°ï¿½ï¿½ï¿½ï¿½×ªï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½×ª
void set_pwm_left()
{
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 1000); // å‰å·¦
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 2000); // å‰å³
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 2000); // åŽå·¦
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 1000); // åŽå³
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 1000); // Ç°ï¿½ï¿½
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 2000); // Ç°ï¿½ï¿½
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 2000); // ï¿½ï¿½ï¿½ï¿½
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 1000); // ï¿½ï¿½ï¿½ï¿½
}
// å‘右:前轮右转,后轮左转
// ï¿½ï¿½ï¿½Ò£ï¿½Ç°ï¿½ï¿½ï¿½ï¿½×ªï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½×ª
void set_pwm_right()
{
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 2000); // å‰å·¦
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 1000); // å‰å³
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 1000); // åŽå·¦
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 2000); // åŽå³
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, 2000); // Ç°ï¿½ï¿½
    __HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_2, 1000); // Ç°ï¿½ï¿½
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 1000); // ï¿½ï¿½ï¿½ï¿½
    __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_2, 2000); // ï¿½ï¿½ï¿½ï¿½
}
// æ˜ å°„函数:将 [-100,100] æ˜ å°„到 [1000,2000]
// Ó³ï¿½äº¯ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ [-100,100] Ó³ï¿½äµ½ [1000,2000]
uint32_t Map(int16_t input, int16_t in_min, int16_t in_max, uint32_t out_min, uint32_t out_max)
{
    return (input - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
// è®¾ç½®ç”µæœº PWM(前进/后退)
// ï¿½ï¿½ï¿½Ãµï¿½ï¿½ PWM��ǰ��/���ˣ�
void Set_Motor_PWM(int16_t speed)
{
    static HIDO_UINT8 l_Motor[50];
    uint32_t pulse = Map(speed, -100, 100, 1000, 2000);  // -100~100 â†’ 1000~2000
    uint32_t pulse = Map(speed, -100, 100, 1000, 2000);  // -100~100 ï¿½ï¿½ 1000~2000
    __HAL_TIM_SetCompare(&MOTOR_TIM, MOTOR_CHANNEL, pulse);
    HIDO_UtilSnprintf((HIDO_CHAR *)l_Motor, sizeof(l_Motor), "Motor cortrol:speed=%d,pulse=%d\r\n", speed,pulse);
    Uart_Send(UART_ID_DBG, (HIDO_UINT8 *)l_Motor, strlen(l_Motor));
}
// è®¾ç½®è½¬å‘ PWM(左转/右转)
// ï¿½ï¿½ï¿½ï¿½×ªï¿½ï¿½ PWM����ת/��ת��
void Set_Steering_PWM(int16_t steer)
{
   static HIDO_UINT8 l_Steering[50];
    uint32_t pulse = Map(steer, -100, 100, 1000, 2000);  // -100~100 â†’ 1000~2000
    uint32_t pulse = Map(steer, -100, 100, 1000, 2000);  // -100~100 ï¿½ï¿½ 1000~2000
    __HAL_TIM_SetCompare(&STEERING_TIM, STEERING_CHANNEL, pulse);
    HIDO_UtilSnprintf((HIDO_CHAR *)l_Steering, sizeof(l_Steering), "Steering cortrol:steer=%d,pulse=%d\r\n", steer,pulse);
    Uart_Send(UART_ID_DBG, (HIDO_UINT8 *)l_Steering, strlen(l_Steering));
@@ -89,40 +90,79 @@
        if (capture_state == STATE_WAIT_RISING)
        {
            // å½“前是上升沿 â†’ è®°å½•并切换到等待下降沿
            // ï¿½ï¿½Ç°ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½Â¼ï¿½ï¿½ï¿½Ð»ï¿½ï¿½ï¿½ï¿½È´ï¿½ï¿½Â½ï¿½ï¿½ï¿½
            rising_time = current_time;
            // åˆ‡æ¢ä¸ºä¸‹é™æ²¿è§¦å‘
            htim->Instance->CCER &= ~TIM_CCER_CC1P; // ä¸Šå‡æ²¿
            htim->Instance->CCER |= TIM_CCER_CC1NP; // åŠ ä¸Š NP è¡¨ç¤ºéžåç›¸ï¼Ÿå®žé™…应使用极性控制函数
            // ï¿½Ð»ï¿½Îªï¿½Â½ï¿½ï¿½Ø´ï¿½ï¿½ï¿½
            htim->Instance->CCER &= ~TIM_CCER_CC1P; // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
            htim->Instance->CCER |= TIM_CCER_CC1NP; // ï¿½ï¿½ï¿½ï¿½ NP ï¿½ï¿½Ê¾ï¿½Ç·ï¿½ï¿½à£¿Êµï¿½ï¿½Ó¦Ê¹ï¿½Ã¼ï¿½ï¿½Ô¿ï¿½ï¿½Æºï¿½ï¿½ï¿½
            // æ›´æŽ¨èä½¿ç”¨ HAL å‡½æ•°è®¾ç½®æžæ€§
            // ï¿½ï¿½ï¿½Æ¼ï¿½Ê¹ï¿½ï¿½ HAL ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ã¼ï¿½ï¿½ï¿½
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
            capture_state = STATE_WAIT_FALLING;
        }
        else if (capture_state == STATE_WAIT_FALLING)
        {
            // å½“前是下降沿 â†’ è®¡ç®—高电平宽度
            // ï¿½ï¿½Ç°ï¿½ï¿½ï¿½Â½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ßµï¿½Æ½ï¿½ï¿½ï¿½ï¿½
            uint32_t pulse_width = current_time - rising_time;
            if (pulse_width > 65535)  // è¶…过最大合理值
            if (pulse_width > 65535)  // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Öµ
            {
                pulse_width = 0; // æˆ–者标记为无效
                pulse_width = 0; // ï¿½ï¿½ï¿½ß±ï¿½ï¿½Îªï¿½ï¿½Ð§
            }
            //printf("High Pulse Width: %lu Î¼s\n", pulse_width);
            //printf("High Pulse Width: %lu ï¿½ï¿½s\n", pulse_width);
            HIDO_UtilSnprintf((HIDO_CHAR *)l_pulse_width, sizeof(l_pulse_width), "pulse_width=%d\r\n", pulse_width);
            Uart_Send(UART_ID_DBG, (HIDO_UINT8 *)l_pulse_width, strlen(l_pulse_width));
            // åˆ‡å›žä¸Šå‡æ²¿è§¦å‘
            // ï¿½Ð»ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ø´ï¿½ï¿½ï¿½
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
            capture_state = STATE_WAIT_RISING;
        }
        // æ¸…除中断标志
        // ï¿½ï¿½ï¿½ï¿½Ð¶Ï±ï¿½Ö¾
        __HAL_TIM_CLEAR_IT(htim, TIM_IT_CC1);
    }
}
uint32_t steering_pulse,motor_pulse;
void SBUS_Control_PWM(void)
{
    ST_SBUSData sbusData;
    // èŽ·å– SBUS æ•°æ®
    if (SBUS_GetData(&sbusData) != HIDO_TRUE)
    {
        return;  // æ²¡æœ‰æœ‰æ•ˆæ•°æ®
    }
    // CH0: è½¬å‘通道 (200-1800) -> (1000-2000us)
    uint16_t ch0 = sbusData.m_au16Channels[0];
    if (ch0 < 200) ch0 = 200;
    if (ch0 > 1800) ch0 = 1800;
    steering_pulse = ((ch0 - 200) * 1000) / 1600 + 1000;
    // CH1: è¡Œè¿›é€šé“ (200-1800) -> (1000-2000us)
    uint16_t ch1 = sbusData.m_au16Channels[1];
    if (ch1 < 200) ch1 = 200;
    if (ch1 > 1800) ch1 = 1800;
    motor_pulse = ((ch1 - 200) * 1000) / 1600 + 1000;
    // è®¾ç½® PWM è¾“出
    __HAL_TIM_SetCompare(&STEERING_TIM, STEERING_CHANNEL, steering_pulse);
    __HAL_TIM_SetCompare(&MOTOR_TIM, MOTOR_CHANNEL, motor_pulse);
}
// ç›´æŽ¥è®¾ç½®è„‰å®½ï¼ˆå¾®ç§’)
void Set_Steering_Pulse(uint32_t pulse_us)
{
    steering_pulse = pulse_us;
    __HAL_TIM_SetCompare(&STEERING_TIM, STEERING_CHANNEL, steering_pulse);
}
void Set_Motor_Pulse(uint32_t pulse_us)
{
    motor_pulse = pulse_us;
    __HAL_TIM_SetCompare(&MOTOR_TIM, MOTOR_CHANNEL, motor_pulse);
}
#if 0
/**
  * @brief  Update Callback (for overflow protection)
@@ -131,10 +171,10 @@
{
    if (htim->Instance == TIM4)
    {
        // åªåœ¨é•¿æ—¶é—´æ— å“åº”时才重置状态
        // Ö»ï¿½Ú³ï¿½Ê±ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ó¦Ê±ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½×´Ì¬
        static uint32_t last_reset_ms = 0;
        if (HAL_GetTick() - last_reset_ms > 100)  // 100ms è¶…æ—¶
        if (HAL_GetTick() - last_reset_ms > 100)  // 100ms ï¿½ï¿½Ê±
        {
            capture_state = 0;
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
@@ -154,30 +194,30 @@
        if (capture_state == 0)
        {
            // ä¸Šå‡æ²¿ï¼šè®°å½•èµ·å§‹æ—¶é—´
            // ï¿½ï¿½ï¿½ï¿½ï¿½Ø£ï¿½ï¿½ï¿½Â¼ï¿½ï¿½Ê¼Ê±ï¿½ï¿½
            rising_time = current_value;
            printf("Rising Edge: %lu\r\n", rising_time);
            // åˆ‡æ¢ä¸ºä¸‹é™æ²¿æ£€æµ‹
            // ï¿½Ð»ï¿½Îªï¿½Â½ï¿½ï¿½Ø¼ï¿½ï¿½
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_FALLING);
            capture_state = 1;
        }
        else if (capture_state == 1)
        {
            // ä¸‹é™æ²¿ï¼šè®¡ç®—脉宽
            // ï¿½Â½ï¿½ï¿½Ø£ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
            falling_time = current_value;
            pulse_width_us = falling_time - rising_time;
            // é˜²æ­¢è´Ÿæ•°ï¼ˆé˜²æ­¢æº¢å‡ºï¼‰
            if (pulse_width_us > 65535)  // è¶…过最大合理值
            // ï¿½ï¿½Ö¹ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ö¹ï¿½ï¿½ï¿½ï¿½ï¿½
            if (pulse_width_us > 65535)  // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Öµ
            {
                pulse_width_us = 0; // æˆ–者标记为无效
                pulse_width_us = 0; // ï¿½ï¿½ï¿½ß±ï¿½ï¿½Îªï¿½ï¿½Ð§
            }
            printf("Falling Edge: %lu\r\n", falling_time);
            printf("Pulse Width: %lu Î¼s\r\n", pulse_width_us);
            printf("Pulse Width: %lu ï¿½ï¿½s\r\n", pulse_width_us);
            // é‡æ–°è®¾ç½®ä¸ºä¸Šå‡æ²¿ï¼Œç­‰å¾…下一个周期
            // ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Îªï¿½ï¿½ï¿½ï¿½ï¿½Ø£ï¿½ï¿½È´ï¿½ï¿½ï¿½Ò»ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
            __HAL_TIM_SET_CAPTUREPOLARITY(htim, TIM_CHANNEL_1, TIM_INPUTCHANNELPOLARITY_RISING);
            capture_state = 0;
        }
STM32H743/FML/pwm_ctrol.h
@@ -16,12 +16,12 @@
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
// PWM è¾“出通道宏定义(根据您的硬件连接修改)
// PWM ï¿½ï¿½ï¿½Í¨ï¿½ï¿½ï¿½ê¶¨ï¿½å£¨ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Ó²ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½Þ¸Ä£ï¿½
#define MOTOR_TIM          htim3
#define STEERING_TIM       htim3
#define MOTOR_CHANNEL      TIM_CHANNEL_1   // æŽ¥ TIM3_CH1
#define STEERING_CHANNEL   TIM_CHANNEL_2   // æŽ¥ TIM3_CH2
#define MOTOR_CHANNEL      TIM_CHANNEL_1   // ï¿½ï¿½ TIM3_CH1
#define STEERING_CHANNEL   TIM_CHANNEL_2   // ï¿½ï¿½ TIM3_CH2
void set_all_pwm(uint16_t duty);
void set_pwm_left();
@@ -29,6 +29,10 @@
void Set_Steering_PWM(int16_t steer) ;
uint32_t Map(int16_t input, int16_t in_min, int16_t in_max, uint32_t out_min, uint32_t out_max);
void Set_Motor_PWM(int16_t speed) ;
void SBUS_Control_PWM(void);
// ç›´æŽ¥è®¾ç½®è„‰å®½ï¼ˆå¾®ç§’),用于 failsafe æˆ–外部直接控制
void Set_Steering_Pulse(uint32_t pulse_us);
void Set_Motor_Pulse(uint32_t pulse_us);
#endif
STM32H743/HAL/Uart.h
@@ -1,8 +1,8 @@
/*******************************************************************************
 * File Name         : Uart.h
 * Description       :
 * Created on        : 2018å¹´4月24日
 * Author            : æœé”®
 * Created on        : 2018��4��24��
 * Author            : ï¿½Å¼ï¿½
 *******************************************************************************/
#ifndef HAL_UART_H_
@@ -41,6 +41,7 @@
    UART_ID_4G,
    UART_ID_GPS,
    UART_ID_BT,
    UART_ID_SBUS,
    UART_ID_LAST,
}E_UartID;
STM32H743/MDK-ARM/RTE/_STM32H743/RTE_Components.h
@@ -11,11 +11,5 @@
#define RTE_COMPONENTS_H
/*
 * Define the Device Header File:
 */
#define CMSIS_device_header "stm32h7xx.h"
#endif /* RTE_COMPONENTS_H */
STM32H743/MDK-ARM/STM32H743.uvoptx
@@ -103,7 +103,7 @@
        <bEvRecOn>1</bEvRecOn>
        <bSchkAxf>0</bSchkAxf>
        <bTchkAxf>0</bTchkAxf>
        <nTsel>4</nTsel>
        <nTsel>3</nTsel>
        <sDll></sDll>
        <sDllPa></sDllPa>
        <sDlgDll></sDlgDll>
@@ -114,7 +114,7 @@
        <tDlgDll></tDlgDll>
        <tDlgPa></tDlgPa>
        <tIfile></tIfile>
        <pMon>Segger\JL2CM3.dll</pMon>
        <pMon>BIN\CMSIS_AGDI.dll</pMon>
      </DebugOpt>
      <TargetDriverDllRegistry>
        <SetRegEntry>
@@ -162,18 +162,18 @@
        <Bp>
          <Number>0</Number>
          <Type>0</Type>
          <LineNumber>170</LineNumber>
          <LineNumber>150</LineNumber>
          <EnabledFlag>1</EnabledFlag>
          <Address>134565196</Address>
          <Address>134543186</Address>
          <ByteObject>0</ByteObject>
          <HtxType>0</HtxType>
          <ManyObjects>0</ManyObjects>
          <SizeOfObject>0</SizeOfObject>
          <BreakByAccess>0</BreakByAccess>
          <BreakIfRCount>1</BreakIfRCount>
          <Filename>../Core/Src/main.c</Filename>
          <Filename>..\FML\pwm_ctrol.c</Filename>
          <ExecCommand></ExecCommand>
          <Expression>\\STM32H743\../Core/Src/main.c\170</Expression>
          <Expression>\\STM32H743\../FML/pwm_ctrol.c\150</Expression>
        </Bp>
      </Breakpoint>
      <WatchWindow1>
@@ -222,6 +222,41 @@
          <WinNumber>1</WinNumber>
          <ItemText>g_com_map[0]</ItemText>
        </Ww>
        <Ww>
          <count>9</count>
          <WinNumber>1</WinNumber>
          <ItemText>g_stSBUSData</ItemText>
        </Ww>
        <Ww>
          <count>10</count>
          <WinNumber>1</WinNumber>
          <ItemText>g_stSBUSData.m_au16Channels,0x0A</ItemText>
        </Ww>
        <Ww>
          <count>11</count>
          <WinNumber>1</WinNumber>
          <ItemText>steering_pulse,0x0A</ItemText>
        </Ww>
        <Ww>
          <count>12</count>
          <WinNumber>1</WinNumber>
          <ItemText>motor_pulse,0x0A</ItemText>
        </Ww>
        <Ww>
          <count>13</count>
          <WinNumber>1</WinNumber>
          <ItemText>sbusData.m_au16Channels[0],0x0A</ItemText>
        </Ww>
        <Ww>
          <count>14</count>
          <WinNumber>1</WinNumber>
          <ItemText>ch0,0x0A</ItemText>
        </Ww>
        <Ww>
          <count>15</count>
          <WinNumber>1</WinNumber>
          <ItemText>ch1,0x0A</ItemText>
        </Ww>
      </WatchWindow1>
      <MemoryWindow1>
        <Mm>
@@ -237,7 +272,7 @@
      <DebugFlag>
        <trace>0</trace>
        <periodic>1</periodic>
        <aLwin>1</aLwin>
        <aLwin>0</aLwin>
        <aCover>0</aCover>
        <aSer1>0</aSer1>
        <aSer2>0</aSer2>
@@ -613,6 +648,18 @@
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
    <File>
      <GroupNumber>4</GroupNumber>
      <FileNumber>26</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
      <bDave2>0</bDave2>
      <PathWithFileName>..\FML\SBUS.c</PathWithFileName>
      <FilenameWithoutPath>SBUS.c</FilenameWithoutPath>
      <RteFlg>0</RteFlg>
      <bShared>0</bShared>
    </File>
  </Group>
  <Group>
@@ -623,7 +670,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>5</GroupNumber>
      <FileNumber>26</FileNumber>
      <FileNumber>27</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -635,7 +682,7 @@
    </File>
    <File>
      <GroupNumber>5</GroupNumber>
      <FileNumber>27</FileNumber>
      <FileNumber>28</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -655,7 +702,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>28</FileNumber>
      <FileNumber>29</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -667,7 +714,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>29</FileNumber>
      <FileNumber>30</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -679,7 +726,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>30</FileNumber>
      <FileNumber>31</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -691,7 +738,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>31</FileNumber>
      <FileNumber>32</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -703,7 +750,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>32</FileNumber>
      <FileNumber>33</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -715,7 +762,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>33</FileNumber>
      <FileNumber>34</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -727,7 +774,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>34</FileNumber>
      <FileNumber>35</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -739,7 +786,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>35</FileNumber>
      <FileNumber>36</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -751,7 +798,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>36</FileNumber>
      <FileNumber>37</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -763,7 +810,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>37</FileNumber>
      <FileNumber>38</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -775,7 +822,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>38</FileNumber>
      <FileNumber>39</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -787,7 +834,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>39</FileNumber>
      <FileNumber>40</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -799,7 +846,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>40</FileNumber>
      <FileNumber>41</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -811,7 +858,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>41</FileNumber>
      <FileNumber>42</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -823,7 +870,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>42</FileNumber>
      <FileNumber>43</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -835,7 +882,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>43</FileNumber>
      <FileNumber>44</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -847,7 +894,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>44</FileNumber>
      <FileNumber>45</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -859,7 +906,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>45</FileNumber>
      <FileNumber>46</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -871,7 +918,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>46</FileNumber>
      <FileNumber>47</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -883,7 +930,7 @@
    </File>
    <File>
      <GroupNumber>6</GroupNumber>
      <FileNumber>47</FileNumber>
      <FileNumber>48</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -903,7 +950,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>7</GroupNumber>
      <FileNumber>48</FileNumber>
      <FileNumber>49</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -923,7 +970,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>49</FileNumber>
      <FileNumber>50</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -935,7 +982,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>50</FileNumber>
      <FileNumber>51</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -947,7 +994,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>51</FileNumber>
      <FileNumber>52</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -959,7 +1006,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>52</FileNumber>
      <FileNumber>53</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -971,7 +1018,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>53</FileNumber>
      <FileNumber>54</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -983,7 +1030,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>54</FileNumber>
      <FileNumber>55</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -995,7 +1042,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>55</FileNumber>
      <FileNumber>56</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1007,7 +1054,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>56</FileNumber>
      <FileNumber>57</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1019,7 +1066,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>57</FileNumber>
      <FileNumber>58</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1031,7 +1078,7 @@
    </File>
    <File>
      <GroupNumber>8</GroupNumber>
      <FileNumber>58</FileNumber>
      <FileNumber>59</FileNumber>
      <FileType>1</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
@@ -1051,7 +1098,7 @@
    <RteFlg>0</RteFlg>
    <File>
      <GroupNumber>9</GroupNumber>
      <FileNumber>59</FileNumber>
      <FileNumber>60</FileNumber>
      <FileType>4</FileType>
      <tvExp>0</tvExp>
      <tvExpOptDlg>0</tvExpOptDlg>
STM32H743/MDK-ARM/STM32H743.uvprojx
@@ -16,8 +16,8 @@
        <TargetCommonOption>
          <Device>STM32H743VITx</Device>
          <Vendor>STMicroelectronics</Vendor>
          <PackID>Keil.STM32H7xx_DFP.2.7.0</PackID>
          <PackURL>http://www.keil.com/pack/</PackURL>
          <PackID>Keil.STM32H7xx_DFP.4.1.3</PackID>
          <PackURL>https://www.keil.com/pack/</PackURL>
          <Cpu>IRAM(0x20000000-0x2001FFFF) IRAM2(0x24000000-0x2407FFFF) IROM(0x8000000-0x81FFFFF) CLOCK(12000000) FPU3(DFPU) CPUTYPE("Cortex-M7") ELITTLE TZ</Cpu>
          <FlashUtilSpec></FlashUtilSpec>
          <StartupFile></StartupFile>
@@ -523,6 +523,11 @@
              <FileType>1</FileType>
              <FilePath>..\FML\pwm_ctrol.c</FilePath>
            </File>
            <File>
              <FileName>SBUS.c</FileName>
              <FileType>1</FileType>
              <FilePath>..\FML\SBUS.c</FilePath>
            </File>
          </Files>
        </Group>
        <Group>
STM32H743/MDK-ARM/STM32H743/ExtDll.iex
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,2 @@
[EXTDLL]
Count=0
STM32H743/MDK-ARM/STM32H743/STM32H743.map
¶Ô±ÈÐÂÎļþ
ÎļþÌ«´ó
STM32H743/MDK-ARM/startup_stm32h743xx.lst
@@ -1284,12 +1284,10 @@
x_HAL_Driver/Inc/Legacy -I../Middlewares/Third_Party/FreeRTOS/Source/include -I
../Middlewares/Third_Party/FreeRTOS/Source/CMSIS_RTOS_V2 -I../Middlewares/Third
_Party/FreeRTOS/Source/portable/RVDS/ARM_CM4F -I../Drivers/CMSIS/Device/ST/STM3
2H7xx/Include -I../Drivers/CMSIS/Include -I.\RTE\_STM32H743 -IC:\Users\HXZK\App
Data\Local\Arm\Packs\ARM\CMSIS\5.7.0\CMSIS\Core\Include -IC:\Users\HXZK\AppData
\Local\Arm\Packs\Keil\STM32H7xx_DFP\2.7.0\Drivers\CMSIS\Device\ST\STM32H7xx\Inc
lude --predefine="__UVISION_VERSION SETA 530" --predefine="_RTE_ SETA 1" --pred
efine="STM32H743xx SETA 1" --predefine="_RTE_ SETA 1" --list=startup_stm32h743x
x.lst startup_stm32h743xx.s
2H7xx/Include -I../Drivers/CMSIS/Include -I.\RTE\_STM32H743 -ID:\Users\zhyin\Ap
pData\Local\Arm\Packs\ARM\CMSIS\5.8.0\CMSIS\Core\Include --predefine="__UVISION
_VERSION SETA 530" --predefine="_RTE_ SETA 1" --predefine="STM32H743xx SETA 1"
--predefine="_RTE_ SETA 1" --list=startup_stm32h743xx.lst startup_stm32h743xx.s
STM32H743/STM32H743.ioc
@@ -12,7 +12,26 @@
Dma.Request5=USART3_TX
Dma.Request6=USART6_RX
Dma.Request7=USART6_TX
Dma.RequestsNb=8
Dma.Request8=UART4_RX
Dma.RequestsNb=9
Dma.UART4_RX.8.Direction=DMA_PERIPH_TO_MEMORY
Dma.UART4_RX.8.EventEnable=DISABLE
Dma.UART4_RX.8.FIFOMode=DMA_FIFOMODE_DISABLE
Dma.UART4_RX.8.Instance=DMA2_Stream0
Dma.UART4_RX.8.MemDataAlignment=DMA_MDATAALIGN_BYTE
Dma.UART4_RX.8.MemInc=DMA_MINC_ENABLE
Dma.UART4_RX.8.Mode=DMA_CIRCULAR
Dma.UART4_RX.8.PeriphDataAlignment=DMA_PDATAALIGN_BYTE
Dma.UART4_RX.8.PeriphInc=DMA_PINC_DISABLE
Dma.UART4_RX.8.Polarity=HAL_DMAMUX_REQ_GEN_RISING
Dma.UART4_RX.8.Priority=DMA_PRIORITY_LOW
Dma.UART4_RX.8.RequestNumber=1
Dma.UART4_RX.8.RequestParameters=Instance,Direction,PeriphInc,MemInc,PeriphDataAlignment,MemDataAlignment,Mode,Priority,FIFOMode,SignalID,Polarity,RequestNumber,SyncSignalID,SyncPolarity,SyncEnable,EventEnable,SyncRequestNumber
Dma.UART4_RX.8.SignalID=NONE
Dma.UART4_RX.8.SyncEnable=DISABLE
Dma.UART4_RX.8.SyncPolarity=HAL_DMAMUX_SYNC_NO_EVENT
Dma.UART4_RX.8.SyncRequestNumber=1
Dma.UART4_RX.8.SyncSignalID=NONE
Dma.USART1_RX.0.Direction=DMA_PERIPH_TO_MEMORY
Dma.USART1_RX.0.EventEnable=DISABLE
Dma.USART1_RX.0.FIFOMode=DMA_FIFOMODE_DISABLE
@@ -170,10 +189,11 @@
Mcu.IP1=DEBUG
Mcu.IP10=TIM3
Mcu.IP11=TIM4
Mcu.IP12=USART1
Mcu.IP13=USART2
Mcu.IP14=USART3
Mcu.IP15=USART6
Mcu.IP12=UART4
Mcu.IP13=USART1
Mcu.IP14=USART2
Mcu.IP15=USART3
Mcu.IP16=USART6
Mcu.IP2=DMA
Mcu.IP3=FREERTOS
Mcu.IP4=MEMORYMAP
@@ -182,7 +202,7 @@
Mcu.IP7=SYS
Mcu.IP8=TIM1
Mcu.IP9=TIM2
Mcu.IPNb=16
Mcu.IPNb=17
Mcu.Name=STM32H743VITx
Mcu.Package=LQFP100
Mcu.Pin0=PC13
@@ -201,23 +221,25 @@
Mcu.Pin20=PC7
Mcu.Pin21=PA9
Mcu.Pin22=PA10
Mcu.Pin23=PA13 (JTMS/SWDIO)
Mcu.Pin24=PA14 (JTCK/SWCLK)
Mcu.Pin25=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin26=VP_SYS_VS_tim17
Mcu.Pin27=VP_TIM1_VS_ClockSourceINT
Mcu.Pin28=VP_TIM2_VS_ClockSourceINT
Mcu.Pin29=VP_TIM3_VS_ClockSourceINT
Mcu.Pin23=PA11
Mcu.Pin24=PA12
Mcu.Pin25=PA13 (JTMS/SWDIO)
Mcu.Pin26=PA14 (JTCK/SWCLK)
Mcu.Pin27=VP_FREERTOS_VS_CMSIS_V2
Mcu.Pin28=VP_SYS_VS_tim17
Mcu.Pin29=VP_TIM1_VS_ClockSourceINT
Mcu.Pin3=PC0
Mcu.Pin30=VP_TIM4_VS_ClockSourceINT
Mcu.Pin31=VP_MEMORYMAP_VS_MEMORYMAP
Mcu.Pin30=VP_TIM2_VS_ClockSourceINT
Mcu.Pin31=VP_TIM3_VS_ClockSourceINT
Mcu.Pin32=VP_TIM4_VS_ClockSourceINT
Mcu.Pin33=VP_MEMORYMAP_VS_MEMORYMAP
Mcu.Pin4=PC1
Mcu.Pin5=PC2_C
Mcu.Pin6=PA0
Mcu.Pin7=PA1
Mcu.Pin8=PA2
Mcu.Pin9=PA3
Mcu.PinsNb=32
Mcu.PinsNb=34
Mcu.ThirdPartyNb=0
Mcu.UserConstants=
Mcu.UserName=STM32H743VITx
@@ -232,6 +254,7 @@
NVIC.DMA1_Stream5_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Stream6_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA1_Stream7_IRQn=true\:5\:0\:false\:false\:true\:true\:false\:true\:true
NVIC.DMA2_Stream0_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
@@ -250,6 +273,7 @@
NVIC.TIM4_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.TimeBase=TIM17_IRQn
NVIC.TimeBaseIP=TIM17
NVIC.UART4_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.USART1_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.USART2_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
NVIC.USART3_IRQn=true\:5\:0\:false\:false\:true\:true\:true\:true\:true
@@ -260,6 +284,10 @@
PA10.Locked=true
PA10.Mode=Asynchronous
PA10.Signal=USART1_RX
PA11.Mode=Asynchronous
PA11.Signal=UART4_RX
PA12.Mode=Asynchronous
PA12.Signal=UART4_TX
PA13\ (JTMS/SWDIO).Mode=Serial_Wire
PA13\ (JTMS/SWDIO).Signal=DEBUG_JTMS-SWDIO
PA14\ (JTCK/SWCLK).Mode=Serial_Wire
@@ -345,7 +373,7 @@
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_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_USART2_UART_Init-USART2-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true,7-MX_TIM1_Init-TIM1-false-HAL-true,8-MX_TIM2_Init-TIM2-false-HAL-true,9-MX_TIM3_Init-TIM3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true,11-MX_TIM4_Init-TIM4-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_DMA_Init-DMA-false-HAL-true,4-MX_USART1_UART_Init-USART1-false-HAL-true,5-MX_USART2_UART_Init-USART2-false-HAL-true,6-MX_USART3_UART_Init-USART3-false-HAL-true,7-MX_TIM1_Init-TIM1-false-HAL-true,8-MX_TIM2_Init-TIM2-false-HAL-true,9-MX_TIM3_Init-TIM3-false-HAL-true,10-MX_USART6_UART_Init-USART6-false-HAL-true,11-MX_TIM4_Init-TIM4-false-HAL-true,12-MX_UART4_Init-UART4-false-HAL-true,0-MX_CORTEX_M7_Init-CORTEX_M7-false-HAL-true
RCC.ADCFreq_Value=129000000
RCC.AHB12Freq_Value=240000000
RCC.AHB4Freq_Value=240000000
@@ -484,12 +512,19 @@
TIM4.ICFilter_CH1=0xF
TIM4.IPParameters=Channel-Input_Capture1_from_TI1,Prescaler,ICFilter_CH1
TIM4.Prescaler=239
UART4.BaudRate=100000
UART4.IPParameters=BaudRate,RxPinLevelInvertParam,WordLength,Parity,StopBits
UART4.Parity=PARITY_EVEN
UART4.RxPinLevelInvertParam=UART_ADVFEATURE_RXINV_ENABLE
UART4.StopBits=UART_STOPBITS_2
UART4.WordLength=WORDLENGTH_9B
USART1.BaudRate=921600
USART1.IPParameters=VirtualMode-Asynchronous,BaudRate
USART1.VirtualMode-Asynchronous=VM_ASYNC
USART2.IPParameters=VirtualMode-Asynchronous
USART2.VirtualMode-Asynchronous=VM_ASYNC
USART3.IPParameters=VirtualMode-Asynchronous
USART3.IPParameters=VirtualMode-Asynchronous,SwapParam
USART3.SwapParam=ADVFEATURE_SWAP_DISABLE
USART3.VirtualMode-Asynchronous=VM_ASYNC
USART6.IPParameters=VirtualMode
USART6.VirtualMode=VM_ASYNC