summaryrefslogtreecommitdiff
path: root/bsp/stm32
diff options
context:
space:
mode:
authora1012112796 <[email protected]>2019-09-10 19:17:38 +0800
committera1012112796 <[email protected]>2019-09-10 19:17:38 +0800
commit60bda424eb3b659338e757d701b7e70716243680 (patch)
treec8679878b541392dd545689211d58e35c0d87671 /bsp/stm32
parent187a860e172f4633ac37144e15190df64fe62801 (diff)
[bsp][stm32] 更新stm32f427-robomaster-a外设驱动配置
1.增加串口1,7,8配置,经实机测试无误 2.增加PWM4 CH1 -- 4, PWM12(BUZZER)配置,因条件有限,仅测试了TIM12 CH1 3.经测试,CAN通信无法正常使用,原因尚未找出,故暂时删去此配置 测试所用编译器: mdk5, IAR
Diffstat (limited to 'bsp/stm32')
-rw-r--r--bsp/stm32/README.md1
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/config/f4/dma_config.h24
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/config/f4/pwm_config.h11
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/config/f4/uart_config.h70
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_pwm.c6
-rw-r--r--bsp/stm32/libraries/HAL_Drivers/drv_usart.c91
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/.config16
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/README.md8
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/CubeMX_Config.ioc155
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/main.h2
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Inc/stm32f4xx_hal_conf.h2
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/main.c353
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/board/CubeMX_Config/Src/stm32f4xx_hal_msp.c345
-rw-r--r--bsp/stm32/stm32f427-robomaster-a/board/Kconfig80
14 files changed, 1118 insertions, 46 deletions
diff --git a/bsp/stm32/README.md b/bsp/stm32/README.md
index 565a8fbea3..57142a680a 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 86a2c9380b..46411c5441 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 1a5575de0c..14d4aa2aff 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 6d8655fc2e..e42b5a1a9a 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 247c8f88fe..ef89018eca 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 caf5dfac0a..a52b497721 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 <drv_log.h>
-#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 d0a340e904..5f13d8b4d1 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 2ef183b882..2a8ab17ca2 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 91f42a655c..78f2d579f2 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 3270857a00..2cb0603ef0 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 13fc970d86..8cf0bc8bf0 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 2d54ce416d..f2575455b3 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 */
@@ -292,6 +314,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
* @retval 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 5d80144ae7..2871a66949 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)
@@ -288,6 +290,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
* @param huart: UART handle pointer
@@ -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 42745922e0..ae3b2d3f0e 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"