打印

请教关于串口中断的问题

[复制链接]
2222|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mcuatmel|  楼主 | 2012-6-12 11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
STM32F103RC的串口中断,发送中断和接收中断在使用中是不是可以一直处于打开状态?我的程序中接收中断一直处于使能状态,发送中断则根据需要来使用,用完后关闭,发现这样用,第一次发数时不好用,得重新发一次才能把数发出去,再有,如果发送中断一直处于使能状态好像对程序有影响。请高手指点下!
沙发
jgphu| | 2012-6-12 11:20 | 只看该作者
STM32F103RC的串口中断,发送中断和接收中断在使用中是不是可以一直处于打开状态?
答案:是的;

我的程序中接收中断一直处于使能状态,发送中断则根据需要来使用,用完后关闭,发现这样用,第一次发数时不好用,得重新发一次才能把数发出去?

答案:你先往DR寄存器里写数据,然后再打开发送中断。

如果发送中断一直处于使能状态好像对程序有影响?
答案:会有影响,所以我一般建一个串口的接发队列,有数据发送的时候打开发送中断使能,没有就关闭。

使用特权

评论回复
板凳
mcuatmel|  楼主 | 2012-6-12 12:05 | 只看该作者
谢楼上!
第一:接收中断应该是总开的,是吧?这个不应该有问题。
第二:我也是先往发送DR中送一个数据,然后再开发送中断,发现并不能进入发送中断程序,得连续送几次后才可以中断,不知为什么,如果在程序初始化时就打开中断,这时只要往DR中放数就会中断。
第三:发送中断是如何影响程序运行的?

使用特权

评论回复
地板
airwill| | 2012-6-12 13:52 | 只看该作者
应该是在程序初始化时就打开中断

如果在程序初始化时就打开中断,这时只要往DR中放数就会中断。

是的, 原因是 USART没有在发送数据,处于空闲状态,对USART_DR寄存器的写操作直接把数据放进移位寄存器,数据传输开始,TXE位立即被置起  (RM0008 Reference Manual  中译第10版 P522)

使用特权

评论回复
5
mcuatmel|  楼主 | 2012-6-12 14:40 | 只看该作者
如果程序一开始不打开中断,那么发送进第一个数据就不会进中断。

使用特权

评论回复
6
jgphu| | 2012-6-12 16:08 | 只看该作者
怎么会呢。初始华的时候不开发送中断使能。有数据发送的时候再开。是可以发送的。

使用特权

评论回复
7
mcuatmel|  楼主 | 2012-6-12 17:24 | 只看该作者
如果发送中断一直开着,影响会多大?

使用特权

评论回复
8
airwill| | 2012-6-12 20:39 | 只看该作者
不是特别的要求, 中断应该一直开着, 避免中断丢失(也许有些库函数在发送数据前会清除中断标志, 或者多次中断的一次响应)

使用特权

评论回复
9
figo20042005| | 2012-6-13 15:13 | 只看该作者
你发送的数据多不?如果发送一个字,应该没问题啊,发送的多的话,看看你的缓冲区有问题不

使用特权

评论回复
10
mcuatmel|  楼主 | 2012-6-14 08:59 | 只看该作者
我一次发送8个字节,两次发送时间间隔为500ms以上,属机性发送,也可能很长时间才会发一次。我没有便能系统的收发缓冲区,采用一字节一中断方式收发数据。

使用特权

评论回复
11
figo20042005| | 2012-6-14 16:04 | 只看该作者
你看过波形确实没发出去,还是只看了下串口助手的结果呢。那你把其他程序去掉,只让他发,看是不是还会发不出去。怀疑你发送时有时进入别的中断了或者接受那有时有问题,具体情况你测下波形吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

512

主题

1456

帖子

2

粉丝