原子哥 串口通信代码笔记2

本文详细介绍了STM32串口的收发状态函数USART_GetFlagStatus和USART_GetITStatus的区别,以及如何利用它们进行中断处理。同时,讲解了串口发送的三种方法和串口接收函数的使用。还提到了在STM32中实现printf功能的配置方法,以及串口发送数据字符串的技巧。

本人小白 有什么错误多多指教 

串口收发状态的函数USART_GetFlagStatus和USART_GetFlagStatus

函数USART_GetITStatus与USART_GetFlagStatus的区别是:该函数不仅会判断标志位是否置1,同时还会判断是否使能了相应的中断。通常在中断函数中使用

USART_GetFlagStatus(USART1, USART_FLAG_TC);当其置1 标志着串口1发送完成

USART_GetFlagStatus(USART1, USART_FLAG_RXNE);当其置1 标志着串口1接收完成

USART_GetITStatus(USART1, USART_IT_RXNE);当其置1 标志着串口1接收完成且接收中断开启

USART_GetITStatus(USART1, USART_IT_TC);当其置1 标志着串口1发送完成且发送中断开启

在此解释一下USART_IT_TC和USART_IT_TXE的区别  TC表示发送完成 TXE表示发送了但并未完成(USART_FLAG_TC和USART_FLAG_TXD同理)

简单举个例子:你要发送10个数据  此时已经发送了5个,第六个还未发送,对于TXE来说它已发送了 它的USART_GetITStatus函数置1 但对TC来说并未发送完成它的USART_GetITStatus函数置0

串口发送函数 单片机发送给其他外设

方法1:USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

方法2:USART1->DR=Data;  //将数值赋给DR寄存器 通过寄存器直接发送出去

方法3:printf("%d",200);  //以这样的方式发送数据

方法1和方法2的缺陷为只能发送单个字符单个参数 方法3可以发送字符串和多个参数

许多STM32不可以直接使用printf 则需要加入以下代码

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

}; 

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
_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 

 或者勾选以下的Use MicroLI选项来支持printf函数使用:

 也可以自行设置函数来达到使用USART_SendData函数发送字符串的目的

串口接收函数

USART_ReceiveData(USART_TypeDef* USARTx);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值