你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用F1的SPI从机,中断计数不正常

[复制链接]
顾影_ 提问时间:2019-9-19 14:27 /
rt,我使用;两块F1,一块作为主机,一块作为从机,SPI时钟分频256,主机发送8个字节,主机NSS使用软件设置,从机NSS信号使用硬件NSS,并且作为外部上升沿中断使用。

在从机的SPI中断中进行计数,每个上升沿中断中判断计数值是不是8,并将计数值清零,但是我在运行了一段时间之后出现计数值不是8的情况,出现这种情况的时间不定。

其实需要的是主机通信正常,但是我接受的数据长度都不能保证,也就不能保证数据的正确,

请问有没有什么办法能保证进入SPI接受中断的次数一直准确,或者通信正常?

考虑过进行双向通信,我返回一个数据帧,通知主机通信的数据是否正常,如果没有办法的话,这种方式是否可行,对通信速度影响大不大?
收藏 评论6 发布时间:2019-9-19 14:27

举报

6个回答
xmshao 回答时间:2019-10-12 16:57:22
问题描述得有点模糊。

你是说从机SPI的NSS片选脚同时开启了其对应的外部中断吗?每个上升沿对应1个数据的接收。还是??

然后你又说到每个上升沿中断中判断计数值是不是8,到底是啥意思? 没看明白。
顾影_ 回答时间:2019-10-14 09:18:34
xmshao 发表于 2019-10-12 16:57
问题描述得有点模糊。

你是说从机SPI的NSS片选脚同时开启了其对应的外部中断吗?每个上升沿对应1个数据的 ...

NSS的引脚同时开启外部中断,
上升沿不对应数据接收,只是作为一帧数据的结束标志,
SPI通信时NSS时低电平,通信结束之后会拉高,触发NSS的上升沿中断,
在NSS低电平时,主机发送数据,从机的SPI触发接收中断,在这个地方计数是不是8个字节
在NSS高电平时,触发从机的外部中断,判断之前是不是接收到8个字节
顾影_ 回答时间:2019-10-14 09:20:02
xmshao 发表于 2019-10-12 16:57
问题描述得有点模糊。

你是说从机SPI的NSS片选脚同时开启了其对应的外部中断吗?每个上升沿对应1个数据的 ...

这个上升沿指的是NSS的上升沿,
谢谢指出,之前描述是模糊了
butterflyspring 回答时间:2019-10-14 10:32:51
还是没太看明白。
1.楼主是想通过从机的NSS信号的上升沿中断来判断通讯结束,来决定是否是收到8个字节么?如果是的话,这上升沿信号是谁来触发的。看描述主机的NSS配置成软件模式,不可能来自主机。
2. 这个上升沿触发信号与最后一个字节之间的相隔多长时间呢?因为从机SPI收到最后一个字节并去通知从机去收第8个数据,这需要一定时间的,而在这个时间中触发从机NSS上升沿中断是否就意味着提前结束,判断成小于8个字节呢?
3. 参考其他标准通讯协议,一般都会有通讯数据字节数,校验值。这样通过协议的设计就能保证不同长度数据的稳定接收,所以通讯协议定的功能强一点,会比较容易解决问题增加可靠性。同时也节省一点硬件资源
奏奏奏 回答时间:2019-10-14 10:37:41
我做SPI的MCU主从机通讯时都不用NSS这个引脚,直接3个引脚连上就可以了。跟用普通TTL串口互连没有区别。
xmshao 回答时间:2019-10-14 16:11:45
大致清楚了你的意思。

你上面表述的问题 好像是在说 主机发送了8个字节数据,结果发现从机没收到8个字节数据。你通过从机的NSS脚的上升沿触发外部中断来对接收数据个数计数。

看你的描述你的主机NSS是配置在软件管理模式,那给到从机的片选信号是如何控制的呢?或者说你的数据发送是如何跟给到从机的片选信号同步的呢?

其实,你从机每收到1个数据通过RXNE事件就可以做一次计数,并即使输出到某全局变量,调试状态下用观察窗口即时查看即可。

你现在的问题实质好像是说数据收发不正常。

首先不要误判了。
另外,注意硬件连接可靠、时钟速率够用就好、不建议使用飞线,同步传输尤其速率较高时,对时钟稳定度较高。
软件方面 注意收据接收的快速处理、合理安排中断优先级,防止接收溢出。

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版