OpenEdv-开源电子网

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

外设NRF24L01 STM32的SPI MOSI 没波形变化

[复制链接]

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
发表于 2016-7-4 12:14:29 | 显示全部楼层 |阅读模式
16金钱
求解??我用示波器观察很久,MOSI一直是高电平,没有脉冲出现,CLK是一直有2Mhz的矩形波输出
还有个问题就是SPI1->DR=Data 异常,DR寄存器的值和Data完全不同

SPI的使能和初始化我仔细检查了很多遍,电路的连接也检查很多遍都没错

困扰好久了...求解




最佳答案

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

不停的写DR,写0XAA,试试。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-4 12:14:30 | 显示全部楼层
不停的写DR,写0XAA,试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-4 14:37:04 | 显示全部楼层
原子哥在吗
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-4 14:40:41 | 显示全部楼层

不想单机
回复

使用道具 举报

0

主题

60

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
295
金钱
295
注册时间
2016-6-17
在线时间
60 小时
发表于 2016-7-4 15:39:31 | 显示全部楼层
看看CLK的时钟相位与时钟极性是否正确,时钟是不是太快。DR寄存器赋值时,看看总线状态标志位的BUSY和TXE的状态。
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-4 17:25:59 | 显示全部楼层
zzx499 发表于 2016-7-4 15:39
看看CLK的时钟相位与时钟极性是否正确,时钟是不是太快。DR寄存器赋值时,看看总线状态标志位的BUSY和TXE的 ...

相位和极性我试了4中组合都不行呀

请问SPI时钟太快会有影响吗?我波特率预分频是256,SPI的速度SPI1_SetSpeed(SPI_BaudRatePrescaler_4);  不是很懂这两个的区别

关于TXE 这边有语句while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
{                   retry++;
                if(retry>200)
                      return 0;}
SPI1->DR=Data;//然后这一句的后面我用串口发送出SPI1->DR的值,和Data完全不一样,毫无规律
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-6 22:37:06 | 显示全部楼层
正点原子 发表于 2016-7-6 22:15
不停的写DR,写0XAA,试试。

=====================main.c==================
while(1){
                SPI1_ReadWriteByte(0xAA);
   }
=====================spi.c====================
u8 SPI1_ReadWriteByte(u8 TxData)
{               
        u8 retry=0;                                        
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET)
                {
                retry++;
                if(retry>200)return 0;
                }                          
        SPI_I2S_SendData(SPI1, TxData);
        retry=0;
        while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET)
                {
                retry++;
                if(retry>200)return 0;
                }                                                              
        return SPI_I2S_ReceiveData(SPI1);                                     
}

void SPI_I2S_SendData(SPI_TypeDef* SPIx, uint16_t Data)
{
        assert_param(IS_SPI_ALL_PERIPH(SPIx));
        SPI1->DR = 0xAA;
        USART_SendData(USART1,SPI1->DR);//=====串口发出的数据显示一直是0x00
        while(USART_GetFlagStatus(USART1,USART_FLAG_TC)!=SET);
}

我通过串口返回的数据看,一直是0x00... 现在 CLK的波形正常,我设置的时钟是低速模式,
MOSI也有输出波形

这是啥情况啊原子哥,卡在识别nrf24l01这里很久了
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-6 22:38:37 | 显示全部楼层
正点原子 发表于 2016-7-6 22:15
不停的写DR,写0XAA,试试。

我发现我之前太依赖战舰开发板了...没有把知识搞透,把教程拿来跑的通就觉得自己会了,原来自己什么都不会...
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-6 22:45:24 | 显示全部楼层
正点原子 发表于 2016-7-6 22:15
不停的写DR,写0XAA,试试。

我现在用的是stm32f103c8t6 最小系统
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-6 23:26:04 | 显示全部楼层
yggswhu 发表于 2016-7-6 22:45
我现在用的是stm32f103c8t6 最小系统

发送0XAA正常么?
0XAA应该是占空比1:1的方波
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-6 23:54:25 | 显示全部楼层
正点原子 发表于 2016-7-6 23:26
发送0XAA正常么?
0XAA应该是占空比1:1的方波

明天我瞧一瞧AA的波形...之前发的0XA5查询外设的,1个周期内MOSI波形看起来有3个毛刺,我不会上传图片,明天我把AA的波形调出来一起给原子哥看吧...感谢原子哥

MOSI输出有几个毛刺是正常情况吗?
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-7 19:08:23 | 显示全部楼层
正点原子 发表于 2016-7-6 23:26
发送0XAA正常么?
0XAA应该是占空比1:1的方波

原子哥,我测试过0XAA的波形了,MOSI输出的是正确的方波;CLK波形也正常,只在发数据时才有波形

while(NRF24L01_Check())               
        {       
                delay_ms(100);
        } //在空闲时MOSI输出一直是高电平的

但是仍然识别不出nrf24l01,SPI1->DR=Data后,串口发出的 SPI1->DR还是很奇怪,经常是0x00,检测RXNE位之后 读取SPI1->DR时的数据和上面串口返回的数据一致

电路检查过没问题啊,单片机MOSI 接 NFR24L01的MOSI

原子哥求解。。。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165309
金钱
165309
注册时间
2010-12-1
在线时间
2108 小时
发表于 2016-7-9 21:42:36 | 显示全部楼层
yggswhu 发表于 2016-7-7 19:08
原子哥,我测试过0XAA的波形了,MOSI输出的是正确的方波;CLK波形也正常,只在发数据时才有波形

while ...

那就查其他问题了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-9 22:00:47 | 显示全部楼层
正点原子 发表于 2016-7-9 21:42
那就查其他问题了

找到问题了原子哥...终于把检测这一块给过了,归根结底来说是SPI速率设置的太快了,分频改成64,然后我把MISO设置成GPIO_Mode_IN_FLOATING ,SPI_CPOL = SPI_CPOL_High改成Low以后自检就通过了....感谢原子哥
回复

使用道具 举报

7

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2016-6-27
在线时间
21 小时
 楼主| 发表于 2016-7-9 22:03:03 | 显示全部楼层
yggswhu 发表于 2016-7-9 22:00
找到问题了原子哥...终于把检测这一块给过了,归根结底来说是SPI速率设置的太快了,分频改成64,然后我把 ...

原子哥,例程中,2个STM32都设置成Master主模式吗?只是一个发送一个接收?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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