单片机
返回首页

STM32学习——中断方式下的发送数据

2022-01-25 来源:eefocus

利用中断接收数据较为简单,但利用中断去发送数据弄了半天才搞定。。。


注:在设置USART的控制寄存器的TE位时,会发送一个空闲帧,于是便会进入中断。


错误的做法

本来的思路是中断里的代码尽可能地少,发送字符放在主函数中,类似这样


while(1)

{

USART_SendData(DEBUG_USARTx,Buf[j]);

//Delay(0xfffff);

if(j>=5)

break;

}


然而。。。要是不加Delay延时j就无法在中断服务函数中自加,通过调试,发现调用USART_SendData(),发送完成标志位TC并不是马上置位,该函数只是将数据送入数据寄存器DR,并不代表发送完毕,所以就会乱套。。。而且加了Delay后还会在最后发送一个H,惊了。。。


改进方法

参考了别人的方法,在中断里进行发送

1.利用USART_SendData()触发TC中断,然后在中断中一直发送,直到最后一个字节


//发送函数

void uart_senddata(u8* ptr)

{

ptrdata=ptr;

USART_ClearFlag(USART1, USART_FLAG_TC); //如果不加的话可能会丢失第一个字节

USART_SendData(USART1, *(ptrdata++)); //触发TC中断

}


//中断服务函数中的部分代码

if(USART_GetITStatus(DEBUG_USARTx,USART_IT_TC)!=RESET)

{

if((*ptrdata)=='')

USART_ClearFlag(USART1, USART_FLAG_TC);

else

{

USART_SendData(DEBUG_USARTx,*ptrdata++);

}

}


参考的那些博客不太看得懂,调试的结果也比较神奇。。。暂且先这样吧,能用就行。。。

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • PIC单片机控制的遥控防盗报警器电路

  • 用数字电路CD4069制作的万能遥控轻触开关

  • 使用ESP8266从NTP服务器获取时间并在OLED显示器上显示

  • 开关电源的基本组成及工作原理

  • 如何构建一个触摸传感器电路

  • 基于ICL296的大电流开关稳压器电源电路

    相关电子头条文章