OpenEdv-开源电子网

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

多从机SPI通信

[复制链接]

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2012-5-31
在线时间
0 小时
发表于 2014-12-6 20:28:53 | 显示全部楼层 |阅读模式
5金钱
用STM32f4做主机,和3个从设备通过一个SPI用中断进行通信
现在TXE的中断进去了以后,往DR里面写命令
很奇葩的有两个问题
第一,SPI4->DR = 0x28;
用debug看了之后DR寄存器里是0x00ff,数据位是8bit
第二,现在DR里面写了0x00ff之后,TXE仍然置位,
RXNE一直进不去。。。。
什么个原因啊?为何不能往DR里正确写命令呢?

最佳答案

查看完整内容[请看2#楼]

1、DR是一个名字、一个地址、两个buffer,       读的时候自动指向“接收寄存器”,而不是“发送寄存器”。后者不可读——设计者认为不需要。 2、SPI动作很快,你没有观察到 TXE 为0的情况。     RXNE=1,说明接收到新内容了,你要读一下DR,就会自动清除;或者你武力清除。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2014-12-6 20:28:54 | 显示全部楼层
1、DR是一个名字、一个地址、两个buffer,
      读的时候自动指向“接收寄存器”,而不是“发送寄存器”。后者不可读——设计者认为不需要。
2、SPI动作很快,你没有观察到 TXE 为0的情况。
    RXNE=1,说明接收到新内容了,你要读一下DR,就会自动清除;或者你武力清除。

回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2012-5-31
在线时间
0 小时
 楼主| 发表于 2014-12-7 07:40:18 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
感谢你的回复
我明白你的意思,发送时,写入数据寄存器DR后发送至发送缓存器,同时接受到数据后,进入接受混存器后从DR中读取
你的意思是我debug中SPI4->DR中显示的数据时由从器件收到的数据?而不是我发送的指令?
那么,如果是这样的话,为何RXNE没有置位呢?说不通啊
而且,在TXE中断中,我向DR写入命令后,应该会复位TXE,但实际debug来看并没有复位,而是一直死在TXE的中断里面了
何况,debug每一步运行,应该可以观测到TXE=0 RXNE=1的吧。。。。。。
望解答谢谢
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2014-12-7 12:06:02 | 显示全部楼层
1、关于DR,你理解对了。
   两个物理buffer,虽然同名,但读、写的对象是分开的。

2、标志该变化但没有变化,可能与你的操作方法有关。
  单步调试时,芯片的中断往往观察不到。这种情况其他地方也会有。
  正确做法是:
  从触发SPI工作(即给DR赋值),到产生标志和中断,这期间要保证芯片连续运行,不能单步,也不能设置断点。
  这种调试方法,会经常用到。
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2012-5-31
在线时间
0 小时
 楼主| 发表于 2014-12-7 12:09:19 | 显示全部楼层
回复【4楼】xuande:
---------------------------------
确实如你所说的DR里面的数值其实就是从器件里返回的数据了。。。
但是RXNE的中断一直进不去。。。。难道是其实进去了,而我以为没进去?
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2012-5-31
在线时间
0 小时
 楼主| 发表于 2014-12-7 12:12:17 | 显示全部楼层
回复【4楼】xuande:
---------------------------------
测试了,确实是RXNE无法置位。。。。。我再看看到底哪里设置有问题
回复

使用道具 举报

58

主题

6291

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11406
金钱
11406
注册时间
2014-4-1
在线时间
1282 小时
发表于 2014-12-7 12:32:20 | 显示全部楼层
我用407,至少用到两个硬件SPI,没有发现问题。
回复

使用道具 举报

26

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
209
金钱
209
注册时间
2012-5-31
在线时间
0 小时
 楼主| 发表于 2014-12-7 12:45:38 | 显示全部楼层
回复【4楼】xuande:
---------------------------------
感谢,问题找到了。。。其实一直能读,RXNE中断也进去了,只是没观测到而已。。。。。。。。。。。。。。。。。。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 09:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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