如何配置USART串口的接收
1.配置时钟
2.配置TX和RX的GPIO结构体
3.配置串口USART1的结构体
4.在主函数中调用与编写功能程序
5.在串口调试助手中接收字符,实现功能
1.配置时钟: GPIO, USART(串口), AFIO(引脚复用)
在这里我用的是stm32上位于APB2总线下的USART1。
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //APB2总线下的GPIOA,使能
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); //引脚复用时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE); //USART1串口时钟
2.配置TX和RX的GPIO结构体
TX:发送(使用PA9引脚)。 RX:接收 ,(使用PA10引脚)。
GPIO_InitTypeDef gpioinitstruct; //定义GPIO口的结构体,可自行定义名
//TX
gpioinitstruct.GPIO_Pin = GPIO_Pin_9; //PA9为发送
gpioinitstruct.GPIO_Mode = GPIO_Mode_AF_PP; //配置模式为复用推挽输出
gpioinitstruct.GPIO_Speed = GPIO_Speed_50MHz; //速度50MHZ,速度可随意配置
GPIO_Init(GPIOA, &gpioinitstruct); //结构体初始化
//RX
gpioinitstruct.GPIO_Pin = GPIO_Pin_10;
gpioinitstruct.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入,完全由外部输入决定电平高低
GPIO_Init(GPIOA, &gpioinitstruct);
3.配置串口USART1的结构体
USART_InitTypeDef usartinitstruct; //串口初始化
usartinitstruct.USART_BaudRate = 9600; //波特率,常用115200和9600,区别是传输数据速度不同
usartinitstruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None; //不使用硬件流
usartinitstruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //允许用逻辑或运算选择接收和发送模式
usartinitstruct.USART_Parity = USART_Parity_No; //奇偶校验位,选择不校验
usartinitstruct.USART_StopBits = USART_StopBits_1; //停止位,正常用1
usartinitstruct.USART_WordLength = USART_WordLength_8b; //字长,即为有效数据位,有八位和九位
USART_Init(USART1, &usartinitstruct); //初始化串口结构体
USART_Cmd(USART1, ENABLE); //使能串口
4.在主函数中调用与编写功能程序
int main()
{
USART_Init();
while(1)
{
USART_SendData(USART1, 'Z'); //发送数据 Z到串口的上位机,在usart.h库函数中调用
while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); //判断串口目前状态的库函数,没发送完则一直循环,发送完则跳转下一语句
//TXE(”发送“数据寄存器为空标志) ,等待串口发送完成再执行下一句
USART_SendData(USART1, 'C');
while (USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET); //继续等待是否发送完成
USART_SendData(USART1, '\n'); //换行,发送一个字符,等待串口发送.....
delay(1000); //延时1S
}
}
5.在串口调试助手中接收字符,实现功能