OpenEdv-开源电子网

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

关于 STM32F103R8T6 硬件SPI2 的 单工模式通信问题

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-3-9
在线时间
0 小时
发表于 2014-10-28 14:42:33 | 显示全部楼层 |阅读模式
5金钱
最近在用A7139无线模块,该模块是SPI通信,不过数据口是双向的,即SIMO/SOMI公用一个SDIO口。

软件SPI一切OK,所以尝试用硬件SPI驱动。

关于STM32的SPI有这么个功能,见下图:


当我启用接收数据的模式时,就出问题了,一直是数据接收溢出,即 ( SPI2->SR == 0x43) 


各种尝试均无果,请求各位指点,在此谢过!

以下为配置SPI的部分代码:

[mw_shl_code=c,true]void A7139_Ports_Init(Uint8 bdr) { Uint16 tmp = 0; //------------------------------单工硬件SPI RCC->APB2ENR |= 1<<3;//使能GPIOB时钟 RCC->APB1ENR |= 1<<14;//使能SPI2时钟 GPIOB->CRH &= 0x0F00FFFF;//PB15,PB13推挽复用输出,PB12 GPIOB->CRH |= 0xB0B30000; GPIOB->ODR |= (1<<15)|(1<<13)|(1<<12); // SPI2->CR1 = 0; tmp |= (1<<2);//主设备 tmp |= (1<<15);//BIDIMODE=1 tmp |= (1<<14);//BIDIOE=1 // tmp |= (0<<11);//8Bit tmp |= (1<<9);//软件NSS tmp |= (1<<8); // SPI2->CR1 |= (0<<7);//MSB tmp |= (bdr<<3);//设置SPI2波特率 // SPI2->CR1 |= (0<<1);//空闲SCK保存低电平 // SPI2->CR1 |= (0<<0);//第一个时钟边沿采样 tmp |= (1<<6);//使能SPI SPI2->CR1 = tmp; SPI2->CR2 |= (1<<5);//使能 错误中断 SPI2->CR2 |= (1<<6);//RXNE 接收中断使能 MY_NVIC_Init(1, 1, SPI2_IRQChannel, 3); // SPI2->DR = 0xFE; }[/mw_shl_code]

不知道  SPI 读  部分的代码怎么写,自己各种尝试都不行...

另外有个需要注意的地方是:SPI2->CR1 |= (1<<2);//设置SPI为主设备,如果这个不置位,单工模式下的数据无法发送,手册说的不是很清楚

最佳答案

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

问题我终于解决了 我用示波器看了下整个的SPI读写时序:NSS / SCK / MOSI 由于我启用的是软件NSS管理,当时的  SPI写  代码如下: [mw_shl_code=c,true]void StrobeCMD(Uint8 cmd) { SCS = 0; while((SPI2->SR&0x02)!=0x02);//SPI TX Busy SPI2->DR = cmd; SCS=1; } [/mw_shl_code] 这里面有个问题:由于SPI发送数据是硬件处理,所以当执行了下面发送数据的2句话后 while((SPI2->SR&0x02) ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-3-9
在线时间
0 小时
 楼主| 发表于 2014-10-28 14:42:34 | 显示全部楼层
问题我终于解决了
我用示波器看了下整个的SPI读写时序:NSS / SCK / MOSI
由于我启用的是软件NSS管理,当时的  SPI写  代码如下:
[mw_shl_code=c,true]void StrobeCMD(Uint8 cmd) { SCS = 0; while((SPI2->SR&0x02)!=0x02);//SPI TX Busy SPI2->DR = cmd; SCS=1; } [/mw_shl_code]
这里面有个问题:由于SPI发送数据是硬件处理,所以当执行了下面发送数据的2句话后
while((SPI2->SR&0x02)!=0x02);//SPI TX Busy
SPI2->DR = cmd;
就立即执行了  SCS = 1;
而此时 硬件SPI的数据仍在发送,此时的片选信号已经提前结束了,所以 SPI写 根本就没写进去,当然也就读不出任何有效数据了!
犯同样错误的朋友们注意啦
[mw_shl_code=c,true][/mw_shl_code]
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-10-28 23:13:57 | 显示全部楼层
帮顶.....
回复

使用道具 举报

70

主题

6761

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13110
金钱
13110
注册时间
2012-11-26
在线时间
3812 小时
发表于 2014-10-29 11:21:59 | 显示全部楼层
mark下   。
学无止境
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2014-10-29 23:14:40 | 显示全部楼层
回复【3楼】人人:
---------------------------------
恭喜
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
82
金钱
82
注册时间
2014-11-9
在线时间
6 小时
发表于 2015-8-19 16:46:43 | 显示全部楼层
马克下,谢谢楼主分享
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-19 16:58:13 | 显示全部楼层
回复【3楼】人人:
---------------------------------
有没有A7139的中文手册或者使用介绍
合肥-文盲
回复

使用道具 举报

86

主题

983

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1848
金钱
1848
注册时间
2013-4-15
在线时间
163 小时
发表于 2015-8-19 17:00:21 | 显示全部楼层
楼主,还有你用的A7139是自己利用芯片开发的,还是用别人开发好的模块(带A7139外围电路的那种)?如果是后者,能不能告知下厂家的名称
合肥-文盲
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-16
在线时间
3 小时
发表于 2016-9-1 20:05:05 | 显示全部楼层
SCS = 0;
    while((SPI2->SR&0x02)!=0x02);//SPI TX Busy
    SPI2->DR = cmd;
    SCS=1;
没有明白楼主的意思,您一开始不是这样的吗:可不可以贴出来对比一下。
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
41
金钱
41
注册时间
2015-12-16
在线时间
3 小时
发表于 2016-9-1 20:05:31 | 显示全部楼层
也遇到同样的问题
回复

使用道具 举报

83

主题

217

帖子

0

精华

初级会员

Rank: 2

积分
197
金钱
197
注册时间
2016-4-8
在线时间
116 小时
发表于 2017-1-18 09:32:05 | 显示全部楼层
我现在也是遇到这个问题,而且纠结了一个星期了,我用软件模拟SPI也是可行,A7139能写能读,但是我用STM的SPI设置后,A7139就不行了。
但是我看不懂楼主的意思是什么,楼主是怎么解决的?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-1 02:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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