串口的基本配置 (使用固件库)
根据这图我们可以知道 stm32 至少会有3个串口
由于自己是使用串口一 所以配置的为usart1
1 时钟使能(用到哪个串口`和GPIO要把相应的时钟开启)
2 串口复位;(一般在系统刚开始配置外设的时候,都会先执行复位该外设的操作。)
3 GPIO口配置;
4 串口参数配置;
5 根据需要开启中断
下面的代码部分
一 时钟使能
由于UART的TX和RX和AFIO都挂在APB2桥上,因此采用固件库函数RCC_APB2PeriphClockCmd()进行初始化。UARTx需要分情况讨论,如果是UART1,则挂在APB2桥上,因此采用RCC_APB2PeriphClockCmd()进行初始化,其余的UART2~5均挂在APB1上。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
二 时钟复用
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
三 GPIO的配置
定义结构体
GPIO_InitTypeDef gpioInit_struct;
GPIO的属性包含在结构体GPIO_InitTypeDef,其中对于TX引脚,GPIO_Mode字段设置为GPIO_Mode_AF_PP(复用推挽输出),GPIO_Speed切换速率设置为GPIO_Speed_50MHz;对于RX引脚,GPIO_Mode字段设置为GPIO_Mode_IN_FLOATING(浮空输入),不需要设置切换速率。最后通过GPIO_Init()使能IO口。
配置A9 为 TX
gpioInit_struct.GPIO_Mode=GPIO_Mode_AF_PP;
gpioInit_struct.GPIO_Pin=GPIO_Pin_9;
gpioInit_struct.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_Init(GPIOA,&gpioInit_struct);
配置A10 为RX
gpioInit_struct.GPIO_Mode=GPIO_Mode_IN_FLOATING;
gpioInit_struct.GPIO_Pin=GPIO_Pin_10
GPIO_Init(GPIOA,&gpioInit_struct);
四 串口参数配置
结构体的定义
USART_InitTypeDef usartInit_struct;
UART模式下的字段如下
USART_BaudRate:波特率,视具体设备而定
USART_WordLength:字长
USART_StopBits:停止位
USART_Parity:校验方式
USART_HardwareFlowControl:硬件流控制
USART_Mode:单/双工
配置 usart
usartInit_struct.USART_BaudRate =115200;
usartInit_struct.USART_HardwareFlowControl =USART_HardwareFlowControl_None;
usartInit_struct.USART_Mode =USART_Mode_Rx | USART_Mode_Tx;
usartInit_struct.USART_Parity =USART_Parity_No;
usartInit_struct.USART_StopBits =USART_StopBits_1;
usartInit_struct.USART_WordLength =USART_WordLength_8b;
USART_Init(USART1,&usartInit_struct);
//!!
USART_Cmd(USART1,ENABLE ); // 启动设备