diff --git a/bsp/stm32/README.md b/bsp/stm32/README.md index 565a8fbea38d2632ae8afec0892dd35462140708..57142a680a5f6eb69e3e4083e9a7ae042db23c4b 100644 --- a/bsp/stm32/README.md +++ b/bsp/stm32/README.md @@ -21,6 +21,7 @@ STM32 系列 BSP 目前支持情况如下表所示: | [stm32f407-st-discovery](stm32f407-st-discovery) | ST 官方 STM32F407-discovery 开发板 | | [stm32f407-atk-explorer](stm32f407-atk-explorer) | 正点原子 F407 探索者开发板 | | [stm32f411-st-nucleo](stm32f411-st-nucleo/) | ST 官方 STM32F411-Nucleo-64 开发板 | +| [stm32f427-robomaster-a](stm32f427-robomaster-a/) |大疆公司 RoboMaster A型开发板| | [stm32f429-atk-apollo](stm32f429-atk-apollo) | 正点原子 F429 阿波罗开发板 | | [stm32f429-fire-challenger](stm32f429-fire-challenger/) | 野火 F429 挑战者开发板 | | [stm32f429-armfly-v6](stm32f429-armfly-v6) | 安富莱 F429-v6 开发板 | diff --git a/bsp/stm32/libraries/HAL_Drivers/config/f4/dma_config.h b/bsp/stm32/libraries/HAL_Drivers/config/f4/dma_config.h index 86a2c9380b6c97ef5e201d265bb3bf4eed381920..46411c5441ec6a0e5263426e63d8fc42a43a5cbb 100644 --- a/bsp/stm32/libraries/HAL_Drivers/config/f4/dma_config.h +++ b/bsp/stm32/libraries/HAL_Drivers/config/f4/dma_config.h @@ -31,6 +31,12 @@ extern "C" { #define UART5_RX_DMA_INSTANCE DMA1_Stream0 #define UART5_RX_DMA_CHANNEL DMA_CHANNEL_4 #define UART5_RX_DMA_IRQ DMA1_Stream0_IRQn +#elif defined(BSP_UART8_TX_USING_DMA) && !defined(UART8_TX_DMA_INSTANCE) +#define UART8_DMA_TX_IRQHandler DMA1_Stream0_IRQHandler +#define UART8_TX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define UART8_TX_DMA_INSTANCE DMA1_Stream0 +#define UART8_TX_DMA_CHANNEL DMA_CHANNEL_5 +#define UART8_TX_DMA_IRQ DMA1_Stream0_IRQn #endif /* DMA1 stream1 */ @@ -40,6 +46,12 @@ extern "C" { #define UART3_RX_DMA_INSTANCE DMA1_Stream1 #define UART3_RX_DMA_CHANNEL DMA_CHANNEL_4 #define UART3_RX_DMA_IRQ DMA1_Stream1_IRQn +#elif defined(BSP_UART7_RX_USING_DMA) && !defined(UART7_RX_DMA_INSTANCE) +#define UART7_DMA_RX_IRQHandler DMA1_Stream1_IRQHandler +#define UART7_RX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define UART7_RX_DMA_INSTANCE DMA1_Stream1 +#define UART7_RX_DMA_CHANNEL DMA_CHANNEL_5 +#define UART7_RX_DMA_IRQ DMA1_Stream1_IRQn #endif /* DMA1 stream2 */ @@ -70,6 +82,12 @@ extern "C" { #define UART3_TX_DMA_INSTANCE DMA1_Stream3 #define UART3_TX_DMA_CHANNEL DMA_CHANNEL_4 #define UART3_TX_DMA_IRQ DMA1_Stream3_IRQn +#elif defined(BSP_UART7_TX_USING_DMA) && !defined(UART7_TX_DMA_INSTANCE) +#define UART7_DMA_RX_IRQHandler DMA1_Stream3_IRQHandler +#define UART7_RX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define UART7_RX_DMA_INSTANCE DMA1_Stream3 +#define UART7_RX_DMA_CHANNEL DMA_CHANNEL_5 +#define UART7_RX_DMA_IRQ DMA1_Stream3_IRQn #endif /* DMA1 stream4 */ @@ -109,6 +127,12 @@ extern "C" { #define UART2_TX_DMA_INSTANCE DMA1_Stream6 #define UART2_TX_DMA_CHANNEL DMA_CHANNEL_4 #define UART2_TX_DMA_IRQ DMA1_Stream6_IRQn +#elif defined(BSP_UART8_RX_USING_DMA) && !defined(UART8_RX_DMA_INSTANCE) +#define UART8_DMA_RX_IRQHandler DMA1_Stream6_IRQHandler +#define UART8_RX_DMA_RCC RCC_AHB1ENR_DMA1EN +#define UART8_RX_DMA_INSTANCE DMA1_Stream6 +#define UART8_RX_DMA_CHANNEL DMA_CHANNEL_5 +#define UART8_RX_DMA_IRQ DMA1_Stream6_IRQn #endif /* DMA1 stream7 */ diff --git a/bsp/stm32/libraries/HAL_Drivers/config/f4/pwm_config.h b/bsp/stm32/libraries/HAL_Drivers/config/f4/pwm_config.h index 1a5575de0c7985018b30bbe439546a0ffe688ddc..14d4aa2affeb7cb2dcf2d8ff945db8cd03494838 100644 --- a/bsp/stm32/libraries/HAL_Drivers/config/f4/pwm_config.h +++ b/bsp/stm32/libraries/HAL_Drivers/config/f4/pwm_config.h @@ -61,6 +61,17 @@ extern "C" { #endif /* PWM5_CONFIG */ #endif /* BSP_USING_PWM5 */ +#ifdef BSP_USING_PWM12 +#ifndef PWM12_CONFIG +#define PWM12_CONFIG \ + { \ + .tim_handle.Instance = TIM12, \ + .name = "pwm12", \ + .channel = 0 \ + } +#endif /* PWM12_CONFIG */ +#endif /* BSP_USING_PWM12 */ + #ifdef __cplusplus } #endif diff --git a/bsp/stm32/libraries/HAL_Drivers/config/f4/uart_config.h b/bsp/stm32/libraries/HAL_Drivers/config/f4/uart_config.h index 6d8655fc2e387821215e53fd0b43e6042073ee1e..e42b5a1a9adb4c920f5d00d606d0f33cda14bd69 100644 --- a/bsp/stm32/libraries/HAL_Drivers/config/f4/uart_config.h +++ b/bsp/stm32/libraries/HAL_Drivers/config/f4/uart_config.h @@ -228,6 +228,76 @@ extern "C" { #endif /* BSP_UART6_TX_USING_DMA */ #endif /* BSP_USING_UART6 */ +#if defined(BSP_USING_UART7) +#ifndef UART7_CONFIG +#define UART7_CONFIG \ + { \ + .name = "uart7", \ + .Instance = UART7, \ + .irq_type = UART7_IRQn, \ + } +#endif /* UART7_CONFIG */ + +#if defined(BSP_UART7_RX_USING_DMA) +#ifndef UART7_DMA_RX_CONFIG +#define UART7_DMA_RX_CONFIG \ + { \ + .Instance = UART7_RX_DMA_INSTANCE, \ + .channel = UART7_RX_DMA_CHANNEL, \ + .dma_rcc = UART7_RX_DMA_RCC, \ + .dma_irq = UART7_RX_DMA_IRQ, \ + } +#endif /* UART7_DMA_RX_CONFIG */ +#endif /* BSP_UART7_RX_USING_DMA */ + +#if defined(BSP_UART7_TX_USING_DMA) +#ifndef UART7_DMA_TX_CONFIG +#define UART7_DMA_TX_CONFIG \ + { \ + .Instance = UART7_TX_DMA_INSTANCE, \ + .channel = UART7_TX_DMA_CHANNEL, \ + .dma_rcc = UART7_TX_DMA_RCC, \ + .dma_irq = UART7_TX_DMA_IRQ, \ + } +#endif /* UART7_DMA_TX_CONFIG */ +#endif /* BSP_UART7_TX_USING_DMA */ +#endif /* BSP_USING_UART7 */ + +#if defined(BSP_USING_UART8) +#ifndef UART8_CONFIG +#define UART8_CONFIG \ + { \ + .name = "uart8", \ + .Instance = UART8, \ + .irq_type = UART8_IRQn, \ + } +#endif /* UART8_CONFIG */ + +#if defined(BSP_UART8_RX_USING_DMA) +#ifndef UART8_DMA_RX_CONFIG +#define UART8_DMA_RX_CONFIG \ + { \ + .Instance = UART8_RX_DMA_INSTANCE, \ + .channel = UART8_RX_DMA_CHANNEL, \ + .dma_rcc = UART8_RX_DMA_RCC, \ + .dma_irq = UART8_RX_DMA_IRQ, \ + } +#endif /* UART8_DMA_RX_CONFIG */ +#endif /* BSP_UART8_RX_USING_DMA */ + +#if defined(BSP_UART8_TX_USING_DMA) +#ifndef UART8_DMA_TX_CONFIG +#define UART8_DMA_TX_CONFIG \ + { \ + .Instance = UART8_TX_DMA_INSTANCE, \ + .channel = UART8_TX_DMA_CHANNEL, \ + .dma_rcc = UART8_TX_DMA_RCC, \ + .dma_irq = UART8_TX_DMA_IRQ, \ + } +#endif /* UART8_DMA_TX_CONFIG */ +#endif /* BSP_UART8_TX_USING_DMA */ +#endif /* BSP_USING_UART8 */ + #ifdef __cplusplus } #endif diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c b/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c index 247c8f88fe946180c981d1b9f7d8b89d6111758c..ef89018eca3a4bf27754cdb199004184fa7504ad 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_pwm.c @@ -520,6 +520,12 @@ static void pwm_get_channel(void) #ifdef BSP_USING_PWM9_CH4 stm32_pwm_obj[PWM9_INDEX].channel |= 1 << 3; #endif +#ifdef BSP_USING_PWM12_CH1 + stm32_pwm_obj[PWM12_INDEX].channel |= 1 << 0; +#endif +#ifdef BSP_USING_PWM12_CH2 + stm32_pwm_obj[PWM12_INDEX].channel |= 1 << 1; +#endif } static int stm32_pwm_init(void) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_usart.c b/bsp/stm32/libraries/HAL_Drivers/drv_usart.c index caf5dfac0ab7bbd9f4f868b667d0d8e4d41f3a29..a52b497721b0d5608508a2bbbef2c77a0f6f0adc 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_usart.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_usart.c @@ -18,8 +18,9 @@ #define LOG_TAG "drv.usart" #include -#if !defined(BSP_USING_UART1) && !defined(BSP_USING_UART2) && !defined(BSP_USING_UART3) \ - && !defined(BSP_USING_UART4) && !defined(BSP_USING_UART5) && !defined(BSP_USING_UART6) && !defined(BSP_USING_LPUART1) +#if !defined(BSP_USING_UART1) && !defined(BSP_USING_UART2) && !defined(BSP_USING_UART3) && \ + !defined(BSP_USING_UART4) && !defined(BSP_USING_UART5) && !defined(BSP_USING_UART6) && \ + !defined(BSP_USING_UART7) && !defined(BSP_USING_UART8) && !defined(BSP_USING_LPUART1) #error "Please define at least one BSP_USING_UARTx" /* this driver can be disabled at menuconfig → RT-Thread Components → Device Drivers */ #endif @@ -48,6 +49,12 @@ enum #ifdef BSP_USING_UART6 UART6_INDEX, #endif +#ifdef BSP_USING_UART7 + UART7_INDEX, +#endif +#ifdef BSP_USING_UART8 + UART8_INDEX, +#endif #ifdef BSP_USING_LPUART1 LPUART1_INDEX, #endif @@ -73,6 +80,12 @@ static struct stm32_uart_config uart_config[] = #ifdef BSP_USING_UART6 UART6_CONFIG, #endif +#ifdef BSP_USING_UART7 + UART7_CONFIG, +#endif +#ifdef BSP_USING_UART8 + UART8_CONFIG, +#endif #ifdef BSP_USING_LPUART1 LPUART1_CONFIG, #endif @@ -606,6 +619,80 @@ void UART6_DMA_TX_IRQHandler(void) #endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART6_TX_USING_DMA) */ #endif /* BSP_USING_UART6*/ +#if defined(BSP_USING_UART7) +void UART7_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&(uart_obj[UART7_INDEX].serial)); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART7_RX_USING_DMA) +void UART7_DMA_RX_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + HAL_DMA_IRQHandler(&uart_obj[UART7_INDEX].dma_rx.handle); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART7_RX_USING_DMA) */ +#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART7_TX_USING_DMA) +void UART7_DMA_TX_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + HAL_DMA_IRQHandler(&uart_obj[UART7_INDEX].dma_tx.handle); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART7_TX_USING_DMA) */ +#endif /* BSP_USING_UART7*/ + +#if defined(BSP_USING_UART8) +void UART8_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + uart_isr(&(uart_obj[UART8_INDEX].serial)); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART8_RX_USING_DMA) +void UART8_DMA_RX_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + HAL_DMA_IRQHandler(&uart_obj[UART8_INDEX].dma_rx.handle); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART8_RX_USING_DMA) */ +#if defined(RT_SERIAL_USING_DMA) && defined(BSP_UART8_TX_USING_DMA) +void UART8_DMA_TX_IRQHandler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + HAL_DMA_IRQHandler(&uart_obj[UART8_INDEX].dma_tx.handle); + + /* leave interrupt */ + rt_interrupt_leave(); +} +#endif /* defined(RT_SERIAL_USING_DMA) && defined(BSP_UART8_TX_USING_DMA) */ +#endif /* BSP_USING_UART8*/ + #if defined(BSP_USING_LPUART1) void LPUART1_IRQHandler(void) { diff --git a/bsp/stm32/stm32f427-robomaster-a/.config b/bsp/stm32/stm32f427-robomaster-a/.config index d0a340e904cd09cb97206c2082476b41ff0c9522..5f13d8b4d1028803e3563554f818748fab8aab76 100644 --- a/bsp/stm32/stm32f427-robomaster-a/.config +++ b/bsp/stm32/stm32f427-robomaster-a/.config @@ -123,7 +123,7 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_I2C is not set CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_ADC is not set -# CONFIG_RT_USING_PWM is not set +CONFIG_RT_USING_PWM=y # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set # CONFIG_RT_USING_PM is not set @@ -136,7 +136,7 @@ CONFIG_RT_USING_SENSOR=y CONFIG_RT_USING_SENSOR_CMD=y # CONFIG_RT_USING_TOUCH is not set # CONFIG_RT_USING_HWCRYPTO is not set -# CONFIG_RT_USING_ENCODER is not set +# CONFIG_RT_USING_PULSE_ENCODER is not set # CONFIG_RT_USING_INPUT_CAPTURE is not set # CONFIG_RT_USING_WIFI is not set @@ -413,6 +413,18 @@ CONFIG_BSP_USING_UART6=y # CONFIG_BSP_UART6_RX_USING_DMA is not set CONFIG_BSP_USING_UART3=y # CONFIG_BSP_UART3_RX_USING_DMA is not set +# CONFIG_BSP_USING_UART7 is not set +# CONFIG_BSP_USING_UART8 is not set +# CONFIG_BSP_USING_UART1 is not set +CONFIG_BSP_USING_PWM=y +CONFIG_BSP_USING_PWM12=y +CONFIG_BSP_USING_PWM12_CH1=y +CONFIG_BSP_USING_PWM4=y +CONFIG_BSP_USING_PWM4_CH1=y +CONFIG_BSP_USING_PWM4_CH2=y +# CONFIG_BSP_USING_PWM4_CH3 is not set +# CONFIG_BSP_USING_PWM4_CH4 is not set +# CONFIG_BSP_USING_PWM5 is not set # CONFIG_BSP_USING_RNG is not set # CONFIG_BSP_USING_UDID is not set diff --git a/bsp/stm32/stm32f427-robomaster-a/README.md b/bsp/stm32/stm32f427-robomaster-a/README.md index 2ef183b8825ad1086ddceef38d05be5fafdafe79..2a8ab17ca2c06c08a7a0c3729be03b64b8128057 100644 --- a/bsp/stm32/stm32f427-robomaster-a/README.md +++ b/bsp/stm32/stm32f427-robomaster-a/README.md @@ -38,14 +38,14 @@ RoboMaster开发板套件是一款面向机器人DIY的开源主控套件。开 | **板载外设** | **支持情况** | **备注** | | :----------------- | :----------: | :------------------------------------- | | SD卡 | 暂不支持 | | -| CAN | 支持 | | +| CAN | 暂不支持 | | | **片上外设** | **支持情况** | **备注** | | GPIO | 支持 | PA0, PA1... PK15 ---> PIN: 0, 1...176 | -| UART | 支持 | UART3/6 | -| SPI | 暂不支持 | SPI5/ | +| UART | 支持 | UART1/3/6/7/8 | +| SPI | 暂不支持 | SPI5 | | I2C | 暂不支持 | | | SDIO | 暂不支持 | 即将支持 | -| RTC | 暂不支持 | 即将支持 | +| RTC | 不支持 | | | PWM | 暂不支持 | 即将支持 | | **扩展模块** | **支持情况** | **备注** | | 无 |... | ... diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc index 91f42a655c3e25deac9a65c3f6f1acf0f2e7ebae..78f2d579f2638a77ec5af91334f5bc61c425dbb9 100644 --- a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc @@ -8,37 +8,64 @@ KeepUserPlacement=true Mcu.Family=STM32F4 Mcu.IP0=CAN1 Mcu.IP1=CAN2 +Mcu.IP10=UART8 +Mcu.IP11=USART1 +Mcu.IP12=USART3 +Mcu.IP13=USART6 Mcu.IP2=NVIC Mcu.IP3=RCC Mcu.IP4=SPI5 Mcu.IP5=SYS -Mcu.IP6=USART6 -Mcu.IPNb=7 +Mcu.IP6=TIM4 +Mcu.IP7=TIM5 +Mcu.IP8=TIM12 +Mcu.IP9=UART7 +Mcu.IPNb=14 Mcu.Name=STM32F427I(G-I)Hx Mcu.Package=UFBGA176 -Mcu.Pin0=PG14 -Mcu.Pin1=PA14 -Mcu.Pin10=PF9 -Mcu.Pin11=PF8 -Mcu.Pin12=PE11 -Mcu.Pin13=PB12 -Mcu.Pin14=PB13 -Mcu.Pin15=PF14 -Mcu.Pin16=VP_SYS_VS_Systick -Mcu.Pin2=PA13 -Mcu.Pin3=PD0 -Mcu.Pin4=PG9 -Mcu.Pin5=PD1 -Mcu.Pin6=PH0/OSC_IN -Mcu.Pin7=PH1/OSC_OUT -Mcu.Pin8=PF7 -Mcu.Pin9=PF6 -Mcu.PinsNb=17 +Mcu.Pin0=PE1 +Mcu.Pin1=PE0 +Mcu.Pin10=PI0 +Mcu.Pin11=PH0/OSC_IN +Mcu.Pin12=PH1/OSC_OUT +Mcu.Pin13=PF7 +Mcu.Pin14=PF6 +Mcu.Pin15=PH12 +Mcu.Pin16=PF9 +Mcu.Pin17=PF8 +Mcu.Pin18=PH11 +Mcu.Pin19=PH10 +Mcu.Pin2=PG14 +Mcu.Pin20=PD15 +Mcu.Pin21=PH6 +Mcu.Pin22=PD14 +Mcu.Pin23=PD13 +Mcu.Pin24=PD12 +Mcu.Pin25=PE8 +Mcu.Pin26=PE11 +Mcu.Pin27=PB12 +Mcu.Pin28=PB13 +Mcu.Pin29=PD9 +Mcu.Pin3=PA14 +Mcu.Pin30=PD8 +Mcu.Pin31=PF14 +Mcu.Pin32=PE7 +Mcu.Pin33=VP_SYS_VS_Systick +Mcu.Pin34=VP_TIM4_VS_ClockSourceINT +Mcu.Pin35=VP_TIM5_VS_ClockSourceINT +Mcu.Pin36=VP_TIM12_VS_ClockSourceINT +Mcu.Pin4=PA13 +Mcu.Pin5=PB7 +Mcu.Pin6=PB6 +Mcu.Pin7=PD0 +Mcu.Pin8=PG9 +Mcu.Pin9=PD1 +Mcu.PinsNb=37 Mcu.ThirdPartyNb=0 Mcu.UserConstants= Mcu.UserName=STM32F427IIHx -MxCube.Version=5.2.1 -MxDb.Version=DB.5.0.21 +MxCube.Version=5.3.0 +MxDb.Version=DB.5.0.30 NVIC.BusFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.DebugMonitor_IRQn=true\:0\:0\:false\:false\:true\:false\:false NVIC.HardFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false @@ -60,6 +87,11 @@ PB12.Signal=CAN2_RX PB13.Locked=true PB13.Mode=Slave PB13.Signal=CAN2_TX +PB6.Mode=Asynchronous +PB6.Signal=USART1_TX +PB7.Locked=true +PB7.Mode=Asynchronous +PB7.Signal=USART1_RX PCC.Checker=false PCC.Line=STM32F427/437 PCC.MCU=STM32F427I(G-I)Hx @@ -73,10 +105,36 @@ PD0.Mode=Master PD0.Signal=CAN1_RX PD1.Mode=Master PD1.Signal=CAN1_TX +PD12.Locked=true +PD12.Signal=S_TIM4_CH1 +PD13.Locked=true +PD13.Signal=S_TIM4_CH2 +PD14.Locked=true +PD14.Signal=S_TIM4_CH3 +PD15.Locked=true +PD15.Signal=S_TIM4_CH4 +PD8.Locked=true +PD8.Mode=Asynchronous +PD8.Signal=USART3_TX +PD9.Locked=true +PD9.Mode=Asynchronous +PD9.Signal=USART3_RX +PE0.Locked=true +PE0.Mode=Asynchronous +PE0.Signal=UART8_RX +PE1.Locked=true +PE1.Mode=Asynchronous +PE1.Signal=UART8_TX PE11.GPIOParameters=GPIO_Label PE11.GPIO_Label=LED_RED PE11.Locked=true PE11.Signal=GPIO_Output +PE7.Locked=true +PE7.Mode=Asynchronous +PE7.Signal=UART7_RX +PE8.Locked=true +PE8.Mode=Asynchronous +PE8.Signal=UART7_TX PF14.GPIOParameters=GPIO_Label PF14.GPIO_Label=LED_GREEN PF14.Locked=true @@ -97,6 +155,15 @@ PH0/OSC_IN.Mode=HSE-External-Oscillator PH0/OSC_IN.Signal=RCC_OSC_IN PH1/OSC_OUT.Mode=HSE-External-Oscillator PH1/OSC_OUT.Signal=RCC_OSC_OUT +PH10.Locked=true +PH10.Signal=S_TIM5_CH1 +PH11.Locked=true +PH11.Signal=S_TIM5_CH2 +PH12.Locked=true +PH12.Signal=S_TIM5_CH3 +PH6.Signal=S_TIM12_CH1 +PI0.Locked=true +PI0.Signal=S_TIM5_CH4 PinOutPanel.CurrentBGAView=Top PinOutPanel.RotationAngle=0 ProjectManager.AskForMigrate=true @@ -164,14 +231,58 @@ RCC.VCOSAIOutputFreq_Value=98000000 RCC.VCOSAIOutputFreq_ValueQ=24500000 RCC.VcooutputI2S=192000000 RCC.VcooutputI2SQ=192000000 +SH.S_TIM12_CH1.0=TIM12_CH1,PWM Generation1 CH1 +SH.S_TIM12_CH1.ConfNb=1 +SH.S_TIM4_CH1.0=TIM4_CH1,PWM Generation1 CH1 +SH.S_TIM4_CH1.ConfNb=1 +SH.S_TIM4_CH2.0=TIM4_CH2,PWM Generation2 CH2 +SH.S_TIM4_CH2.ConfNb=1 +SH.S_TIM4_CH3.0=TIM4_CH3,PWM Generation3 CH3 +SH.S_TIM4_CH3.ConfNb=1 +SH.S_TIM4_CH4.0=TIM4_CH4,PWM Generation4 CH4 +SH.S_TIM4_CH4.ConfNb=1 +SH.S_TIM5_CH1.0=TIM5_CH1,PWM Generation1 CH1 +SH.S_TIM5_CH1.ConfNb=1 +SH.S_TIM5_CH2.0=TIM5_CH2,PWM Generation2 CH2 +SH.S_TIM5_CH2.ConfNb=1 +SH.S_TIM5_CH3.0=TIM5_CH3,PWM Generation3 CH3 +SH.S_TIM5_CH3.ConfNb=1 +SH.S_TIM5_CH4.0=TIM5_CH4,PWM Generation4 CH4 +SH.S_TIM5_CH4.ConfNb=1 SPI5.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_128 SPI5.CalculateBaudRate=656.25 KBits/s SPI5.Direction=SPI_DIRECTION_2LINES SPI5.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,BaudRatePrescaler SPI5.Mode=SPI_MODE_MASTER SPI5.VirtualType=VM_MASTER +TIM12.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM12.IPParameters=Channel-PWM Generation1 CH1 +TIM4.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM4.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM4.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM4.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 +TIM4.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4 +TIM5.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1 +TIM5.Channel-PWM\ Generation2\ CH2=TIM_CHANNEL_2 +TIM5.Channel-PWM\ Generation3\ CH3=TIM_CHANNEL_3 +TIM5.Channel-PWM\ Generation4\ CH4=TIM_CHANNEL_4 +TIM5.IPParameters=Channel-PWM Generation1 CH1,Channel-PWM Generation2 CH2,Channel-PWM Generation3 CH3,Channel-PWM Generation4 CH4 +UART7.IPParameters=VirtualMode +UART7.VirtualMode=Asynchronous +UART8.IPParameters=VirtualMode +UART8.VirtualMode=Asynchronous +USART1.IPParameters=VirtualMode +USART1.VirtualMode=VM_ASYNC +USART3.IPParameters=VirtualMode +USART3.VirtualMode=VM_ASYNC USART6.IPParameters=VirtualMode USART6.VirtualMode=VM_ASYNC VP_SYS_VS_Systick.Mode=SysTick VP_SYS_VS_Systick.Signal=SYS_VS_Systick +VP_TIM12_VS_ClockSourceINT.Mode=Internal +VP_TIM12_VS_ClockSourceINT.Signal=TIM12_VS_ClockSourceINT +VP_TIM4_VS_ClockSourceINT.Mode=Internal +VP_TIM4_VS_ClockSourceINT.Signal=TIM4_VS_ClockSourceINT +VP_TIM5_VS_ClockSourceINT.Mode=Internal +VP_TIM5_VS_ClockSourceINT.Signal=TIM5_VS_ClockSourceINT board=Imu diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h index 3270857a002d9a7d0953361e4fc06ce6e0da1f9e..2cb0603ef01fe0d8c94f5519ff502e83dbc96a82 100644 --- a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h @@ -70,6 +70,8 @@ extern "C" { /* USER CODE END EM */ +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + /* Exported functions prototypes ---------------------------------------------*/ void Error_Handler(void); diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h index 13fc970d868f402381292cf967726ce7f6a42eab..8cf0bc8bf0b60569371e989c9b83684e0f16de78 100644 --- a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h @@ -61,7 +61,7 @@ /* #define HAL_SD_MODULE_ENABLED */ /* #define HAL_MMC_MODULE_ENABLED */ #define HAL_SPI_MODULE_ENABLED -/* #define HAL_TIM_MODULE_ENABLED */ +#define HAL_TIM_MODULE_ENABLED #define HAL_UART_MODULE_ENABLED /* #define HAL_USART_MODULE_ENABLED */ /* #define HAL_IRDA_MODULE_ENABLED */ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c index 2d54ce416d628d361d96ab40894398ea87b99c49..f2575455b34114a2bae70ec4870b9c37116cddcf 100644 --- a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c @@ -67,6 +67,14 @@ CAN_HandleTypeDef hcan2; SPI_HandleTypeDef hspi5; +TIM_HandleTypeDef htim4; +TIM_HandleTypeDef htim5; +TIM_HandleTypeDef htim12; + +UART_HandleTypeDef huart7; +UART_HandleTypeDef huart8; +UART_HandleTypeDef huart1; +UART_HandleTypeDef huart3; UART_HandleTypeDef huart6; /* USER CODE BEGIN PV */ @@ -80,6 +88,13 @@ static void MX_SPI5_Init(void); static void MX_USART6_UART_Init(void); static void MX_CAN1_Init(void); static void MX_CAN2_Init(void); +static void MX_TIM4_Init(void); +static void MX_TIM5_Init(void); +static void MX_TIM12_Init(void); +static void MX_UART7_Init(void); +static void MX_UART8_Init(void); +static void MX_USART1_UART_Init(void); +static void MX_USART3_UART_Init(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ @@ -122,6 +137,13 @@ int main(void) MX_USART6_UART_Init(); MX_CAN1_Init(); MX_CAN2_Init(); + MX_TIM4_Init(); + MX_TIM5_Init(); + MX_TIM12_Init(); + MX_UART7_Init(); + MX_UART8_Init(); + MX_USART1_UART_Init(); + MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ /* USER CODE END 2 */ @@ -291,6 +313,332 @@ static void MX_SPI5_Init(void) } +/** + * @brief TIM4 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM4_Init(void) +{ + + /* USER CODE BEGIN TIM4_Init 0 */ + + /* USER CODE END TIM4_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM4_Init 1 */ + + /* USER CODE END TIM4_Init 1 */ + htim4.Instance = TIM4; + htim4.Init.Prescaler = 0; + htim4.Init.CounterMode = TIM_COUNTERMODE_UP; + htim4.Init.Period = 0; + htim4.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim4.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim4, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim4) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim4, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_ConfigChannel(&htim4, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM4_Init 2 */ + + /* USER CODE END TIM4_Init 2 */ + HAL_TIM_MspPostInit(&htim4); + +} + +/** + * @brief TIM5 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM5_Init(void) +{ + + /* USER CODE BEGIN TIM5_Init 0 */ + + /* USER CODE END TIM5_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_MasterConfigTypeDef sMasterConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM5_Init 1 */ + + /* USER CODE END TIM5_Init 1 */ + htim5.Instance = TIM5; + htim5.Init.Prescaler = 0; + htim5.Init.CounterMode = TIM_COUNTERMODE_UP; + htim5.Init.Period = 0; + htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim5) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim5) != HAL_OK) + { + Error_Handler(); + } + sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET; + sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE; + if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_2) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_3) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_ConfigChannel(&htim5, &sConfigOC, TIM_CHANNEL_4) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM5_Init 2 */ + + /* USER CODE END TIM5_Init 2 */ + HAL_TIM_MspPostInit(&htim5); + +} + +/** + * @brief TIM12 Initialization Function + * @param None + * @retval None + */ +static void MX_TIM12_Init(void) +{ + + /* USER CODE BEGIN TIM12_Init 0 */ + + /* USER CODE END TIM12_Init 0 */ + + TIM_ClockConfigTypeDef sClockSourceConfig = {0}; + TIM_OC_InitTypeDef sConfigOC = {0}; + + /* USER CODE BEGIN TIM12_Init 1 */ + + /* USER CODE END TIM12_Init 1 */ + htim12.Instance = TIM12; + htim12.Init.Prescaler = 0; + htim12.Init.CounterMode = TIM_COUNTERMODE_UP; + htim12.Init.Period = 0; + htim12.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1; + htim12.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE; + if (HAL_TIM_Base_Init(&htim12) != HAL_OK) + { + Error_Handler(); + } + sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL; + if (HAL_TIM_ConfigClockSource(&htim12, &sClockSourceConfig) != HAL_OK) + { + Error_Handler(); + } + if (HAL_TIM_PWM_Init(&htim12) != HAL_OK) + { + Error_Handler(); + } + sConfigOC.OCMode = TIM_OCMODE_PWM1; + sConfigOC.Pulse = 0; + sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH; + sConfigOC.OCFastMode = TIM_OCFAST_DISABLE; + if (HAL_TIM_PWM_ConfigChannel(&htim12, &sConfigOC, TIM_CHANNEL_1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN TIM12_Init 2 */ + + /* USER CODE END TIM12_Init 2 */ + HAL_TIM_MspPostInit(&htim12); + +} + +/** + * @brief UART7 Initialization Function + * @param None + * @retval None + */ +static void MX_UART7_Init(void) +{ + + /* USER CODE BEGIN UART7_Init 0 */ + + /* USER CODE END UART7_Init 0 */ + + /* USER CODE BEGIN UART7_Init 1 */ + + /* USER CODE END UART7_Init 1 */ + huart7.Instance = UART7; + huart7.Init.BaudRate = 115200; + huart7.Init.WordLength = UART_WORDLENGTH_8B; + huart7.Init.StopBits = UART_STOPBITS_1; + huart7.Init.Parity = UART_PARITY_NONE; + huart7.Init.Mode = UART_MODE_TX_RX; + huart7.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart7.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart7) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART7_Init 2 */ + + /* USER CODE END UART7_Init 2 */ + +} + +/** + * @brief UART8 Initialization Function + * @param None + * @retval None + */ +static void MX_UART8_Init(void) +{ + + /* USER CODE BEGIN UART8_Init 0 */ + + /* USER CODE END UART8_Init 0 */ + + /* USER CODE BEGIN UART8_Init 1 */ + + /* USER CODE END UART8_Init 1 */ + huart8.Instance = UART8; + huart8.Init.BaudRate = 115200; + huart8.Init.WordLength = UART_WORDLENGTH_8B; + huart8.Init.StopBits = UART_STOPBITS_1; + huart8.Init.Parity = UART_PARITY_NONE; + huart8.Init.Mode = UART_MODE_TX_RX; + huart8.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart8.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart8) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN UART8_Init 2 */ + + /* USER CODE END UART8_Init 2 */ + +} + +/** + * @brief USART1 Initialization Function + * @param None + * @retval None + */ +static void MX_USART1_UART_Init(void) +{ + + /* USER CODE BEGIN USART1_Init 0 */ + + /* USER CODE END USART1_Init 0 */ + + /* USER CODE BEGIN USART1_Init 1 */ + + /* USER CODE END USART1_Init 1 */ + huart1.Instance = USART1; + huart1.Init.BaudRate = 115200; + huart1.Init.WordLength = UART_WORDLENGTH_8B; + huart1.Init.StopBits = UART_STOPBITS_1; + huart1.Init.Parity = UART_PARITY_NONE; + huart1.Init.Mode = UART_MODE_TX_RX; + huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart1.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart1) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART1_Init 2 */ + + /* USER CODE END USART1_Init 2 */ + +} + +/** + * @brief USART3 Initialization Function + * @param None + * @retval None + */ +static void MX_USART3_UART_Init(void) +{ + + /* USER CODE BEGIN USART3_Init 0 */ + + /* USER CODE END USART3_Init 0 */ + + /* USER CODE BEGIN USART3_Init 1 */ + + /* USER CODE END USART3_Init 1 */ + huart3.Instance = USART3; + huart3.Init.BaudRate = 115200; + huart3.Init.WordLength = UART_WORDLENGTH_8B; + huart3.Init.StopBits = UART_STOPBITS_1; + huart3.Init.Parity = UART_PARITY_NONE; + huart3.Init.Mode = UART_MODE_TX_RX; + huart3.Init.HwFlowCtl = UART_HWCONTROL_NONE; + huart3.Init.OverSampling = UART_OVERSAMPLING_16; + if (HAL_UART_Init(&huart3) != HAL_OK) + { + Error_Handler(); + } + /* USER CODE BEGIN USART3_Init 2 */ + + /* USER CODE END USART3_Init 2 */ + +} + /** * @brief USART6 Initialization Function * @param None @@ -334,13 +682,14 @@ static void MX_GPIO_Init(void) GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ + __HAL_RCC_GPIOE_CLK_ENABLE(); __HAL_RCC_GPIOG_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); + __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); + __HAL_RCC_GPIOI_CLK_ENABLE(); __HAL_RCC_GPIOH_CLK_ENABLE(); __HAL_RCC_GPIOF_CLK_ENABLE(); - __HAL_RCC_GPIOE_CLK_ENABLE(); - __HAL_RCC_GPIOB_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6|LED_GREEN_Pin, GPIO_PIN_RESET); diff --git a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c index 5d80144ae76ce5309589ee33510f42861e183eec..2871a669498ca81cb7f35750d405152429e1cee8 100644 --- a/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c +++ b/bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c @@ -78,7 +78,9 @@ /* USER CODE BEGIN 0 */ /* USER CODE END 0 */ -/** + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef *htim); + /** * Initializes the Global MSP. */ void HAL_MspInit(void) @@ -287,6 +289,175 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) } +/** +* @brief TIM_Base MSP Initialization +* This function configures the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspInit 0 */ + + /* USER CODE END TIM4_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM4_CLK_ENABLE(); + /* USER CODE BEGIN TIM4_MspInit 1 */ + + /* USER CODE END TIM4_MspInit 1 */ + } + else if(htim_base->Instance==TIM5) + { + /* USER CODE BEGIN TIM5_MspInit 0 */ + + /* USER CODE END TIM5_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM5_CLK_ENABLE(); + /* USER CODE BEGIN TIM5_MspInit 1 */ + + /* USER CODE END TIM5_MspInit 1 */ + } + else if(htim_base->Instance==TIM12) + { + /* USER CODE BEGIN TIM12_MspInit 0 */ + + /* USER CODE END TIM12_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_TIM12_CLK_ENABLE(); + /* USER CODE BEGIN TIM12_MspInit 1 */ + + /* USER CODE END TIM12_MspInit 1 */ + } + +} + +void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim) +{ + GPIO_InitTypeDef GPIO_InitStruct = {0}; + if(htim->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspPostInit 0 */ + + /* USER CODE END TIM4_MspPostInit 0 */ + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**TIM4 GPIO Configuration + PD15 ------> TIM4_CH4 + PD14 ------> TIM4_CH3 + PD13 ------> TIM4_CH2 + PD12 ------> TIM4_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_15|GPIO_PIN_14|GPIO_PIN_13|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_AF2_TIM4; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM4_MspPostInit 1 */ + + /* USER CODE END TIM4_MspPostInit 1 */ + } + else if(htim->Instance==TIM5) + { + /* USER CODE BEGIN TIM5_MspPostInit 0 */ + + /* USER CODE END TIM5_MspPostInit 0 */ + + __HAL_RCC_GPIOI_CLK_ENABLE(); + __HAL_RCC_GPIOH_CLK_ENABLE(); + /**TIM5 GPIO Configuration + PI0 ------> TIM5_CH4 + PH12 ------> TIM5_CH3 + PH11 ------> TIM5_CH2 + PH10 ------> TIM5_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM5; + HAL_GPIO_Init(GPIOI, &GPIO_InitStruct); + + GPIO_InitStruct.Pin = GPIO_PIN_12|GPIO_PIN_11|GPIO_PIN_10; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF2_TIM5; + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM5_MspPostInit 1 */ + + /* USER CODE END TIM5_MspPostInit 1 */ + } + else if(htim->Instance==TIM12) + { + /* USER CODE BEGIN TIM12_MspPostInit 0 */ + + /* USER CODE END TIM12_MspPostInit 0 */ + + __HAL_RCC_GPIOH_CLK_ENABLE(); + /**TIM12 GPIO Configuration + PH6 ------> TIM12_CH1 + */ + GPIO_InitStruct.Pin = GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_NOPULL; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; + GPIO_InitStruct.Alternate = GPIO_AF9_TIM12; + HAL_GPIO_Init(GPIOH, &GPIO_InitStruct); + + /* USER CODE BEGIN TIM12_MspPostInit 1 */ + + /* USER CODE END TIM12_MspPostInit 1 */ + } + +} +/** +* @brief TIM_Base MSP De-Initialization +* This function freeze the hardware resources used in this example +* @param htim_base: TIM_Base handle pointer +* @retval None +*/ +void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base) +{ + if(htim_base->Instance==TIM4) + { + /* USER CODE BEGIN TIM4_MspDeInit 0 */ + + /* USER CODE END TIM4_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM4_CLK_DISABLE(); + /* USER CODE BEGIN TIM4_MspDeInit 1 */ + + /* USER CODE END TIM4_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM5) + { + /* USER CODE BEGIN TIM5_MspDeInit 0 */ + + /* USER CODE END TIM5_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM5_CLK_DISABLE(); + /* USER CODE BEGIN TIM5_MspDeInit 1 */ + + /* USER CODE END TIM5_MspDeInit 1 */ + } + else if(htim_base->Instance==TIM12) + { + /* USER CODE BEGIN TIM12_MspDeInit 0 */ + + /* USER CODE END TIM12_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_TIM12_CLK_DISABLE(); + /* USER CODE BEGIN TIM12_MspDeInit 1 */ + + /* USER CODE END TIM12_MspDeInit 1 */ + } + +} + /** * @brief UART MSP Initialization * This function configures the hardware resources used in this example @@ -296,7 +467,103 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi) void HAL_UART_MspInit(UART_HandleTypeDef* huart) { GPIO_InitTypeDef GPIO_InitStruct = {0}; - if(huart->Instance==USART6) + if(huart->Instance==UART7) + { + /* USER CODE BEGIN UART7_MspInit 0 */ + + /* USER CODE END UART7_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_UART7_CLK_ENABLE(); + + __HAL_RCC_GPIOE_CLK_ENABLE(); + /**UART7 GPIO Configuration + PE8 ------> UART7_TX + PE7 ------> UART7_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_8|GPIO_PIN_7; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART7; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + /* USER CODE BEGIN UART7_MspInit 1 */ + + /* USER CODE END UART7_MspInit 1 */ + } + else if(huart->Instance==UART8) + { + /* USER CODE BEGIN UART8_MspInit 0 */ + + /* USER CODE END UART8_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_UART8_CLK_ENABLE(); + + __HAL_RCC_GPIOE_CLK_ENABLE(); + /**UART8 GPIO Configuration + PE1 ------> UART8_TX + PE0 ------> UART8_RX + */ + GPIO_InitStruct.Pin = GPIO_PIN_1|GPIO_PIN_0; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF8_UART8; + HAL_GPIO_Init(GPIOE, &GPIO_InitStruct); + + /* USER CODE BEGIN UART8_MspInit 1 */ + + /* USER CODE END UART8_MspInit 1 */ + } + else if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspInit 0 */ + + /* USER CODE END USART1_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART1_CLK_ENABLE(); + + __HAL_RCC_GPIOB_CLK_ENABLE(); + /**USART1 GPIO Configuration + PB7 ------> USART1_RX + PB6 ------> USART1_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_7|GPIO_PIN_6; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART1; + HAL_GPIO_Init(GPIOB, &GPIO_InitStruct); + + /* USER CODE BEGIN USART1_MspInit 1 */ + + /* USER CODE END USART1_MspInit 1 */ + } + else if(huart->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspInit 0 */ + + /* USER CODE END USART3_MspInit 0 */ + /* Peripheral clock enable */ + __HAL_RCC_USART3_CLK_ENABLE(); + + __HAL_RCC_GPIOD_CLK_ENABLE(); + /**USART3 GPIO Configuration + PD9 ------> USART3_RX + PD8 ------> USART3_TX + */ + GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_8; + GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; + GPIO_InitStruct.Pull = GPIO_PULLUP; + GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH; + GPIO_InitStruct.Alternate = GPIO_AF7_USART3; + HAL_GPIO_Init(GPIOD, &GPIO_InitStruct); + + /* USER CODE BEGIN USART3_MspInit 1 */ + + /* USER CODE END USART3_MspInit 1 */ + } + else if(huart->Instance==USART6) { /* USER CODE BEGIN USART6_MspInit 0 */ @@ -334,7 +601,79 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart) */ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart) { - if(huart->Instance==USART6) + if(huart->Instance==UART7) + { + /* USER CODE BEGIN UART7_MspDeInit 0 */ + + /* USER CODE END UART7_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART7_CLK_DISABLE(); + + /**UART7 GPIO Configuration + PE8 ------> UART7_TX + PE7 ------> UART7_RX + */ + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_8|GPIO_PIN_7); + + /* USER CODE BEGIN UART7_MspDeInit 1 */ + + /* USER CODE END UART7_MspDeInit 1 */ + } + else if(huart->Instance==UART8) + { + /* USER CODE BEGIN UART8_MspDeInit 0 */ + + /* USER CODE END UART8_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_UART8_CLK_DISABLE(); + + /**UART8 GPIO Configuration + PE1 ------> UART8_TX + PE0 ------> UART8_RX + */ + HAL_GPIO_DeInit(GPIOE, GPIO_PIN_1|GPIO_PIN_0); + + /* USER CODE BEGIN UART8_MspDeInit 1 */ + + /* USER CODE END UART8_MspDeInit 1 */ + } + else if(huart->Instance==USART1) + { + /* USER CODE BEGIN USART1_MspDeInit 0 */ + + /* USER CODE END USART1_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART1_CLK_DISABLE(); + + /**USART1 GPIO Configuration + PB7 ------> USART1_RX + PB6 ------> USART1_TX + */ + HAL_GPIO_DeInit(GPIOB, GPIO_PIN_7|GPIO_PIN_6); + + /* USER CODE BEGIN USART1_MspDeInit 1 */ + + /* USER CODE END USART1_MspDeInit 1 */ + } + else if(huart->Instance==USART3) + { + /* USER CODE BEGIN USART3_MspDeInit 0 */ + + /* USER CODE END USART3_MspDeInit 0 */ + /* Peripheral clock disable */ + __HAL_RCC_USART3_CLK_DISABLE(); + + /**USART3 GPIO Configuration + PD9 ------> USART3_RX + PD8 ------> USART3_TX + */ + HAL_GPIO_DeInit(GPIOD, GPIO_PIN_9|GPIO_PIN_8); + + /* USER CODE BEGIN USART3_MspDeInit 1 */ + + /* USER CODE END USART3_MspDeInit 1 */ + } + else if(huart->Instance==USART6) { /* USER CODE BEGIN USART6_MspDeInit 0 */ diff --git a/bsp/stm32/stm32f427-robomaster-a/board/Kconfig b/bsp/stm32/stm32f427-robomaster-a/board/Kconfig index 42745922e073a9bf0772b558a286c4682fa87338..ae3b2d3f0e49a9db3460f1e0604a5c457d3c090c 100644 --- a/bsp/stm32/stm32f427-robomaster-a/board/Kconfig +++ b/bsp/stm32/stm32f427-robomaster-a/board/Kconfig @@ -23,7 +23,6 @@ menu "On-chip Peripheral Drivers" config BSP_USING_UART6 bool "Enable UART6 (debug usart)" default y - config BSP_UART6_RX_USING_DMA bool "Enable UART6 RX DMA" depends on BSP_USING_UART6 && RT_SERIAL_USING_DMA @@ -32,24 +31,85 @@ menu "On-chip Peripheral Drivers" config BSP_USING_UART3 bool "Enable UART3" default n - config BSP_UART3_RX_USING_DMA bool "Enable UART3 RX DMA" depends on BSP_USING_UART3 && RT_SERIAL_USING_DMA default n + + config BSP_USING_UART7 + bool "Enable UART7" + default n + config BSP_UART7_RX_USING_DMA + bool "Enable UART7 RX DMA" + depends on BSP_USING_UART7 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART8 + bool "Enable UART8" + default n + config BSP_UART8_RX_USING_DMA + bool "Enable UART8 RX DMA" + depends on BSP_USING_UART8 && RT_SERIAL_USING_DMA + default n + + config BSP_USING_UART1 + bool "Enable UART1 (DBUS)" + default n + config BSP_UART1_RX_USING_DMA + bool "Enable UART1 RX DMA" + depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA + default n endif - menuconfig BSP_USING_CAN - bool "Enable CAN" + menuconfig BSP_USING_PWM + bool "Enable pwm" default n - select RT_USING_CAN - if BSP_USING_CAN - config BSP_USING_CAN1 - bool "using CAN1" + select RT_USING_PWM + if BSP_USING_PWM + menuconfig BSP_USING_PWM12 + bool "Enable timer12 output pwm" default n - config BSP_USING_CAN2 - bool "using CAN2" + if BSP_USING_PWM12 + config BSP_USING_PWM12_CH1 + bool "Enable PWM12 channel1(buzzer) " + default n + endif + + menuconfig BSP_USING_PWM4 + bool "Enable timer4 output pwm" + default n + if BSP_USING_PWM4 + config BSP_USING_PWM4_CH1 + bool "Enable PWM4 channel1" + default n + config BSP_USING_PWM4_CH2 + bool "Enable PWM4 channel2" + default n + config BSP_USING_PWM4_CH3 + bool "Enable PWM4 channel3" + default n + config BSP_USING_PWM4_CH4 + bool "Enable PWM4 channel4" + default n + endif + + menuconfig BSP_USING_PWM5 + bool "Enable timer5 output pwm" default n + if BSP_USING_PWM5 + config BSP_USING_PWM5_CH1 + bool "Enable PWM5 channel1" + default n + config BSP_USING_PWM5_CH2 + bool "Enable PWM5 channel2" + default n + config BSP_USING_PWM5_CH3 + bool "Enable PWM5 channel3" + default n + config BSP_USING_PWM5_CH4 + bool "Enable PWM5 channel4" + default n + endif endif source "../libraries/HAL_Drivers/Kconfig"