专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
STM32
多从机SPI通信
2019-07-21 04:22
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
STM32/STM8
4261
7
1687
用STM32f4做主机,和3个从设备通过一个SPI用中断进行通信
现在TXE的中断进去了以后,往DR里面写命令
很奇葩的有两个问题
第一,SPI4->DR = 0x28;
用debug看了之后DR寄存器里是0x00ff,数据位是8bit
第二,现在DR里面写了0x00ff之后,TXE仍然置位,
RXNE一直进不去。。。。
什么个原因啊?为何不能往DR里正确写命令呢?
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
xuande
1楼-- · 2019-07-21 09:24
1、DR是一个名字、一个地址、两个buffer,
读的时候自动指向“接收寄存器”,而不是“发送寄存器”。后者不可读——设计者认为不需要。
2、SPI动作很快,你没有观察到 TXE 为0的情况。
RXNE=1,说明接收到新内容了,你要读一下DR,就会自动清除;或者你武力清除。
加载中...
yyisme1988
2楼-- · 2019-07-21 11:35
回复【2楼】xuande:
---------------------------------
感谢你的回复
我明白你的意思,发送时,写入数据寄存器DR后发送至发送缓存器,同时接受到数据后,进入接受混存器后从DR中读取
你的意思是我debug中SPI4->DR中显示的数据时由从器件收到的数据?而不是我发送的指令?
那么,如果是这样的话,为何RXNE没有置位呢?说不通啊
而且,在TXE中断中,我向DR写入命令后,应该会复位TXE,但实际debug来看并没有复位,而是一直死在TXE的中断里面了
何况,debug每一步运行,应该可以观测到TXE=0 RXNE=1的吧。。。。。。
望解答谢谢
加载中...
xuande
3楼-- · 2019-07-21 17:24
1、关于DR,你理解对了。
两个物理buffer,虽然同名,但读、写的对象是分开的。
2、标志该变化但没有变化,可能与你的操作方法有关。
单步调试时,芯片的中断往往观察不到。这种情况其他地方也会有。
正确做法是:
从触发SPI工作(即给DR赋值),到产生标志和中断,这期间要保证芯片连续运行,不能单步,也不能设置断点。
这种调试方法,会经常用到。
加载中...
yyisme1988
4楼-- · 2019-07-21 22:41
回复【4楼】xuande:
---------------------------------
确实如你所说的DR里面的数值其实就是从器件里返回的数据了。。。
但是RXNE的中断一直进不去。。。。难道是其实进去了,而我以为没进去?
加载中...
yyisme1988
5楼-- · 2019-07-22 03:56
回复【4楼】xuande:
---------------------------------
测试了,确实是RXNE无法置位。。。。。我再看看到底哪里设置有问题
加载中...
xuande
6楼-- · 2019-07-22 08:10
我用407,至少用到两个硬件SPI,没有发现问题。
加载中...
1
2
下一页
一周热门
更多
>
相关问题
STM32F4上I2C(在PROTEUS中模拟)调试不通的问题
6 个回答
芯片供应紧张,准备换个MCU,MM32L系列替换STM32L系列的怎么样?
7 个回答
STM32同时使用两个串口进行数据收发时数据丢包的问题
5 个回答
STM32F103串口通信死机问题
4 个回答
STM32WLE5CC连接SX1268在LoRa模式下能与 SX1278互通吗?
2 个回答
STM32开发板免费用活动
7 个回答
stm32 处理 DHT11占用太多时间,大家程序是怎么设计的
8 个回答
分享一个STM32单片机做的离线编程器代码
9 个回答
相关文章
ST公司第一款无线低功耗单片机模块有效提高物联网设计生产效率
0个评论
如何实现对单片机寄存器的访问
0个评论
通过USB用STM32片内自带Bootloader下载程序及注意事项
0个评论
欲练此功必先自宫之STM32汇编启动,放慢是为了更好的前行
0个评论
×
关闭
采纳回答
向帮助了您的网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
STM32
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
关闭
您已邀请
15
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
读的时候自动指向“接收寄存器”,而不是“发送寄存器”。后者不可读——设计者认为不需要。
2、SPI动作很快,你没有观察到 TXE 为0的情况。
RXNE=1,说明接收到新内容了,你要读一下DR,就会自动清除;或者你武力清除。
---------------------------------
感谢你的回复
我明白你的意思,发送时,写入数据寄存器DR后发送至发送缓存器,同时接受到数据后,进入接受混存器后从DR中读取
你的意思是我debug中SPI4->DR中显示的数据时由从器件收到的数据?而不是我发送的指令?
那么,如果是这样的话,为何RXNE没有置位呢?说不通啊
而且,在TXE中断中,我向DR写入命令后,应该会复位TXE,但实际debug来看并没有复位,而是一直死在TXE的中断里面了
何况,debug每一步运行,应该可以观测到TXE=0 RXNE=1的吧。。。。。。
望解答谢谢
两个物理buffer,虽然同名,但读、写的对象是分开的。
2、标志该变化但没有变化,可能与你的操作方法有关。
单步调试时,芯片的中断往往观察不到。这种情况其他地方也会有。
正确做法是:
从触发SPI工作(即给DR赋值),到产生标志和中断,这期间要保证芯片连续运行,不能单步,也不能设置断点。
这种调试方法,会经常用到。
---------------------------------
确实如你所说的DR里面的数值其实就是从器件里返回的数据了。。。
但是RXNE的中断一直进不去。。。。难道是其实进去了,而我以为没进去?
---------------------------------
测试了,确实是RXNE无法置位。。。。。我再看看到底哪里设置有问题
一周热门 更多>