STM32F429 discovery 解决串口打印问题

为利用USART 实现开发板与电脑通信,需要用到一个USB 转USART 的IC,我们选
择CH340G 芯片来实现这个功能,CH340G 是一个USB 总线的转接芯片,实现USB 转
USART、USB 转IrDA 红外或者USB 转打印机接口,我们使用其USB 转USART 功能。具
体电路设计见图 20-11。
我们将CH340G 的TXD 引脚与USART1 的RX 引脚连接,CH340G 的RXD 引脚与
USART1 的TX 引脚连接。CH340G 芯片集成在开发板上,其地线(GND)已与控制器的
GND 连通。
STM32F429 discovery 解决串口打印问题

这里只讲解核心的部分代码,有些变量的设置,头文件的包含等并没有涉及到,完整
的代码请参考本章配套的工程。我们创建了两个文件:bsp_debug_usart.c 和
bsp_debug_usart.h 文件用来存放USART 驱动程序及相关宏定义。

GPIO 和USART 宏定义
代码清单 20-1 GPIO 和USART 宏定义
1 #define DEBUG_USART USART1
2 #define DEBUG_USART_CLK RCC_APB2Periph_USART1
3 #define DEBUG_USART_BAUDRATE 115200 //串口波特率
4
5 #define DEBUG_USART_RX_GPIO_PORT GPIOA
6 #define DEBUG_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOA
7 #define DEBUG_USART_RX_PIN GPIO_Pin_10
8 #define DEBUG_USART_RX_AF GPIO_AF_USART1
9 #define DEBUG_USART_RX_SOURCE GPIO_PinSource10
10
11 #define DEBUG_USART_TX_GPIO_PORT GPIOA
12 #define DEBUG_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOA
13 #define DEBUG_USART_TX_PIN GPIO_Pin_9
14 #define DEBUG_USART_TX_AF GPIO_AF_USART1
15 #define DEBUG_USART_TX_SOURCE GPIO_PinSource9
16
17 #define DEBUG_USART_IRQHandler USART1_IRQHandler
18 #define DEBUG_USART_IRQ USART1_IRQn


GPIO 和USART 宏定义
代码清单 20-1 GPIO 和USART 宏定义
1 #define DEBUG_USART USART1
2 #define DEBUG_USART_CLK RCC_APB2Periph_USART1
3 #define DEBUG_USART_BAUDRATE 115200 //串口波特率
4
5 #define DEBUG_USART_RX_GPIO_PORT GPIOA
6 #define DEBUG_USART_RX_GPIO_CLK RCC_AHB1Periph_GPIOA
7 #define DEBUG_USART_RX_PIN GPIO_Pin_10
8 #define DEBUG_USART_RX_AF GPIO_AF_USART1
9 #define DEBUG_USART_RX_SOURCE GPIO_PinSource10
10
11 #define DEBUG_USART_TX_GPIO_PORT GPIOA
12 #define DEBUG_USART_TX_GPIO_CLK RCC_AHB1Periph_GPIOA
13 #define DEBUG_USART_TX_PIN GPIO_Pin_9
14 #define DEBUG_USART_TX_AF GPIO_AF_USART1
15 #define DEBUG_USART_TX_SOURCE GPIO_PinSource9
16
17 #define DEBUG_USART_IRQHandler USART1_IRQHandler
18 #define DEBUG_USART_IRQ USART1_IRQn

1 static void NVIC_Configuration(void)
2 {
3 NVIC_InitTypeDef NVIC_InitStructure;
4
5 /* 嵌套向量中断控制器组选择 */
6 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
7
8 /* 配置USART 为中断源 */
9 NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
10 /* 抢断优先级为1 */
11 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
12 /* 子优先级为1 */
13 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
14 /* 使能中断 */
15 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
16 /* 初始化配置NVIC */
17 NVIC_Init(&NVIC_InitStructure);
18 }
19