[STM32F1] 真是没天理......

[复制链接]
3123|29
 楼主| 西门看雪 发表于 2015-5-31 22:09 | 显示全部楼层 |阅读模式
[STM32F103CB]

使用ST的固件库 3.5.0


有没有发现,USART1 接收中断和发送中断只能用一个啊?!!


如果 USART 接收中断和发送中断 同时使能的话,只能进发送中断,进不了接收中断啊,有木有?


把发送中断使能关了,立马就可以正常进入接收中断了!!


没天理啊~~~有没有大神,可以解决这个问题?


这到底是STM32 MCU硬件的bug还是固件库的bug?还是程序写错了,或者它本来就是如此??


yklstudent 发表于 2015-5-31 23:20 | 显示全部楼层
直观MCU硬件应该没这么傻,多半是自己的代码问题,但库文件问题也还是有可能的
 楼主| 西门看雪 发表于 2015-6-1 00:54 | 显示全部楼层
yklstudent 发表于 2015-5-31 23:20
直观MCU硬件应该没这么傻,多半是自己的代码问题,但库文件问题也还是有可能的 ...

为了这个破事已经玩儿了大半天了,目前已经找到解决方法,原因未明。

以下猜测未经验证:

大约是 STM32 MCU 的硬件太吊,我等无法用常人的思维去理解。

当你使能发送中断之后,并不是每次你调用发送函数USART_SendData(USARTxx, SendData);就会产生一个发送中断的。
huarana 发表于 2015-6-1 11:40 | 显示全部楼层
囧,发送有两个中断 一个是发送完成中断 一个是寄存器为空中断

wind~风 发表于 2015-6-1 12:23 | 显示全部楼层
优先级设置不当的问题
 楼主| 西门看雪 发表于 2015-6-1 12:27 来自手机 | 显示全部楼层
huarana 发表于 2015-6-1 11:40
囧,发送有两个中断 一个是发送完成中断 一个是寄存器为空中断

TXE,应该是寄存器为空中断吧。
coslight 发表于 2015-6-1 12:34 | 显示全部楼层
你的通讯协议是不是搞得太复杂了,导致收发没有时隙啊,再加上中断优先级的配置,才会出现这种现象,个人猜测
 楼主| 西门看雪 发表于 2015-6-1 12:34 来自手机 | 显示全部楼层
wind~风 发表于 2015-6-1 12:23
优先级设置不当的问题

这个应该和优先级设置没什么关系吧?如果在初始化(串口)的时候使能发送中断,然后在main中发送数据,你就会发现,数据发送完成之后,竟然不会产生发送完成中断!
wind~风 发表于 2015-6-1 16:57 | 显示全部楼层
西门看雪 发表于 2015-6-1 12:34
这个应该和优先级设置没什么关系吧?如果在初始化(串口)的时候使能发送中断,然后在main中发送数据,你 ...

如果在发生这个中断的同时发生了一个更高优先级的中断,你这个就会被屏蔽,根本就看不到
error_dan 发表于 2015-6-1 18:22 | 显示全部楼层
官方给的例子里有,自己找哪里不对.肯定是你程序问题.
mmuuss586 发表于 2015-6-1 18:39 | 显示全部楼层

应该是你程序问题;

程序跟踪下,看下中断的寄存器是否正确;
diweo 发表于 2015-6-1 19:48 | 显示全部楼层
wind~风 发表于 2015-6-1 16:57
如果在发生这个中断的同时发生了一个更高优先级的中断,你这个就会被屏蔽,根本就看不到 ...

不会看不到,只不过高优先级先响应,等它中断函数退出后,会快速响应低优先级中断。
戈卫东 发表于 2015-6-1 20:17 | 显示全部楼层
TXE在没有数据要发送的时候都是要禁止的。
如果没有数据的时候允许TXE那么将会不停地进入TXE中断。
错误的用法当然无法得到良好的结果。
wind~风 发表于 2015-6-1 21:08 | 显示全部楼层
diweo 发表于 2015-6-1 19:48
不会看不到,只不过高优先级先响应,等它中断函数退出后,会快速响应低优先级中断。 ...

但是高优先级退出后,低优先级中断可能已经结束了
玄德 发表于 2015-6-1 22:32 | 显示全部楼层

对于串口之类慢速设备,从来只用查询,不用中断。

几万行的程序,我最多开 1 ~ 2 个中断。


zh113214 发表于 2015-6-1 23:03 | 显示全部楼层
对此,我一点都不懂,学习了,增长了不少知识.
 楼主| 西门看雪 发表于 2015-6-2 00:26 | 显示全部楼层
戈卫东 发表于 2015-6-1 20:17
TXE在没有数据要发送的时候都是要禁止的。
如果没有数据的时候允许TXE那么将会不停地进入TXE中断。
错误的 ...

差不多,不过不完全对。

评论

你什么应用要用到发送中断???  发表于 2015-6-2 01:30
戈卫东 发表于 2015-6-2 02:44 | 显示全部楼层
西门看雪 发表于 2015-6-2 00:26
差不多,不过不完全对。

噗。。。。。。。。。。。怎么可能不完全对。。。。。。。。。。。。
diweo 发表于 2015-6-2 08:21 | 显示全部楼层
wind~风 发表于 2015-6-1 21:08
但是高优先级退出后,低优先级中断可能已经结束了

低优先级中断会悬起,等高优先级中断退出后,会继续处理低优先级中断.而且是"咬尾"机制,所以是快速响应.
建议你看看<<CM3权威指南>>第9章
 楼主| 西门看雪 发表于 2015-6-2 09:55 来自手机 | 显示全部楼层
戈卫东 发表于 2015-6-1 20:17
TXE在没有数据要发送的时候都是要禁止的。
如果没有数据的时候允许TXE那么将会不停地进入TXE中断。
错误的 ...

第一句近似对的,剩下的估计就是乱说一通的了,不信你就去验证一下,看看会不会不停地进入TXE中断?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:……

87

主题

3000

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部