STM32 串口发送来龙去脉以及一些问题的分析
扫描二维码
随时随地手机看文章
1.介绍的串口部分会有如下优缺点:
优点:简单,适合很少量数据传输。(只要求这个优点,其实本可以不用串口中断,但是为了知道来龙去脉,避免串口故弄玄虚,故加入中断进行串口发送的分析。)
缺点:无缓存区,并且对数据的正确性没有判断,数据量稍大可能导致数据丢失。
2.了解一些基础知识:TXE=1代表发送数据寄存器空。
TC=1代表移位寄存器传输完成。
TXEIE允许在TXE标志为'1'时产生中断
TCIE允许在TC标志为'1'时产生中断
画个图介绍数据传输:
串口发送数据
3.采用判断TC的方式进行串口中断发送字符串.a.首先按照官网上的配置进行(这么晚了,码字太难了,直接上手写版)?官网配置
配置完了就得使能TC:
USART_ITCongfig(USART1,USART_IT_TC,ENABLE);
注意:此时使能了TC,在上述第6步里面会有 发送空闲帧的步骤。发送完毕,要是不加个清除TC标志的程序,可能会丢失第1个字节的数据,所以我们加上。
DelayMs(10);
USART_ClearFlag(USART1,USART_FLAG_TC);
注意:加完了还是会出现错误,空闲帧没发完,就清零发送完成标志,导致使能TC之后就开始进入中断,故中间还加个延时,如上。
2.发送数据函数voidUSART_SendDataString(u8*pData)
{ pDataByte=pData;
USART_ClearFlag(USART1,USART_FLAG_TC);//作用和上面一样,清除传输完成标志位,否则可能会丢失第1个字节的数据.
USART_SendData(USART1,*(pDataByte++));//必须要++,不然会把第一个字符t发送两次}
3.中断处理函数voidUSART1_IRQHandler(void){
if(USART_GetITStatus(USART1,USART_IT_TC)==SET)
{if(*pDataByte=='