STM32正点原子串口例程——USART_RX_STA为什么可以接收回车和换行

本文详细介绍了STM32微控制器中串口通信的基本原理与实现方法,重点讲解了USART_RX_STA标志位的作用及如何通过修改fputc函数来改变串口接收端。通过具体的代码示例展示了如何设置串口通信并实现数据发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

正点原子stm32--串口通信实验讲解里关于USART_RX_STA的问题与思考icon-default.png?t=M0H8https://blog.csdn.net/milu_yu/article/details/108523888

SET,是标志位满足的情况。

RESET,是标志位未满足的情况。

为什么printf能通过串口1发送到电脑。

只要修改 fputc里的USART1中的1即可更改接收的串口。

#if 1
#pragma import(__use_no_semihosting)             
//标准库需要的支持函数                 
struct __FILE 
{ 
	int handle; 

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
	x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
	while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
	return ch;
}
#endif 

#include "sys.h" #include "delay.h" #include "usart.h" #include "led.h" #include<string.h> #include"key.h" int main(void) { u16 t; u16 len; u16 times=0; vu8 key=0; Stm32_Clock_Init(9); //系统时钟设置 uart1_init(72,115200); //串口初始化为 115200 delay_init_(72); //延时初始化 LED_Init(); //初始化与 LED 连接的硬件接口 KEY_Init(); //初始化与按键连接的硬件接口 while(1) { if(USART_RX_STA&0x8000) { len=USART_RX_STA&0x3FFF;//得到此次接收到的数据长度 printf("\r\n 您发送的消息为:\r\n\r\n"); for(t=0;t<len;t++) { USART1->DR=USART_RX_BUF[t]; while((USART1->SR&0X40)==0);//等待发送结束 } USART_RX_BUF[len]='\0'; if(strcmp((char*)USART_RX_BUF,"Are you OK?")==0) printf("\r\nYes,I am OK!\r\n"); printf("\r\n\r\n");//插入换行 \r(回车,Carriage Return): ASCII 码 13,对应的控制字符是 CR。最早用于打印机,表示将打印头移到当前行的开头。 USART_RX_STA=0; } else { times++; if(times%5000==0) { printf("\r\n 精英 STM32 开发板 串口实验\r\n"); printf("正点原子@ALIENTEK\r\n\r\n"); } if(times%200==0)printf("请输入数据,以回车键结束\r\n"); if(times%30==0)LED0=!LED0;//闪烁 LED,提示系统正在运行. delay_ms(10); key=KEY_Scan(0); if(key==KEY0_PRES) // 检测按键key0是否被按下 { char str[]="Are you OK?"; for(t=0;str[t];t++) { USART1->DR = str[t]; // 将数据写入发送寄存器 while((USART1->SR&0X40)==0); // 等待发送结束 } } } } } /* //外部中断实验 int main(void) { Stm32_Clock_Init(9); //系统时钟设置 uart1_init(72,115200); //串口初始化为 115200 delay_init_(72); //延时初始化 LED_Init(); //初
最新发布
03-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值