OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4335|回复: 2

STM32 串口中断的一些问题

[复制链接]

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
发表于 2013-11-15 10:09:04 | 显示全部楼层 |阅读模式
            


串口中断中有发送数据有两个中断,一个是发送数据寄存器空中断,一个是发送完成中断。这两个中断怎么理解?

我下面写的中断函数正确吗?
/*USART1->CR1|=1<<8;    //PE中断使能
 USART1->CR1|=1<<5;    //接收缓冲区非空中断使能 
 USART1->CR1|=1<<6;   //发送完成中断使能
 USART1->CR1|=1<<7;    //发送缓冲区中断使能 */  
/*上面的代码是串口初始化函数的部分设置*/
void USART1_IRQHandler()
{
     unsigned char temp=0x3A;
     if(USART1->SR&(1<<7))  //判断是不是发送数据寄存器空产生的中断
     {
          USART1->SR&=0x37F;
          while(!(USART1->SR&(1<<6))); //判断数据是否发送完成
          USART1->DR=temp;    //数据发送完成,将新的数据赋值给发送数据寄存器
     }
     else if (USART1->SR&(1<<6)) //判断是不是发送完成产生的中断
     {
          USART1->SR &=0x3BF;
          while(!(USART->SR&(1<<7)));
     } 
}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-11-15 12:16:30 | 显示全部楼层
TXE,表示数据仅仅是从TDR寄存器转移到移位寄存器了,并不代表数据已经从TXD这个引脚,发送出去了。
TC,则表示移位寄存器的数据也发送完毕了,就是说一定是从TXD这个脚,发送出去了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

32

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
金钱
227
注册时间
2013-10-16
在线时间
1 小时
 楼主| 发表于 2013-11-15 12:58:59 | 显示全部楼层
谢谢原子哥 明白了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-9 02:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表