本人小白 有什么错误多多指教
串口收发状态的函数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);
本文详细介绍了STM32串口的收发状态函数USART_GetFlagStatus和USART_GetITStatus的区别,以及如何利用它们进行中断处理。同时,讲解了串口发送的三种方法和串口接收函数的使用。还提到了在STM32中实现printf功能的配置方法,以及串口发送数据字符串的技巧。
1659

被折叠的 条评论
为什么被折叠?



