天线|RF射频
直播中

王丽丽

7年用户 169经验值
私信 关注
[问答]

nrf24l01通信无法进行该怎么办?

高手帮帮忙,我自己的板子上有nrf24l01芯片,但是现在和原子哥的开发板上面的nrf24l01通信无法进行,开始的硬件检查不能通过,经示波器测试,控制器的SPI引脚输出波形,但是就是不能定位到问题原因。

听原子哥说可能是SPIS的初始化有问题。SPI的初始化代码(我用的是STM32F4的芯片)如下,检查很多次了,应该没问题的,

void SPI1_Init(u8 SpeedSet)          //nrf24l01

        {

                GPIO_InitTypeDef GPIO_InitStructure;

                SPI_InitTypeDef  SPI_InitStructure;

          

                RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);           //使能IO口时钟

                RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE );          //APB2

               

                GPIO_PinAFConfig(GPIOA, GPIO_PinSource5|GPIO_PinSource6|GPIO_PinSource7, GPIO_AF_SPI1);         //启动复用功能

               

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7;

                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;   //PA5(SCK)、PA6(MISO)、PA7(MOSI)

                  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;

                  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;

                  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

                  GPIO_Init(GPIOA, &GPIO_InitStructure);

        

                GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 ;        //PA4(CS)               

              GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;                //输出

              GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                //推挽

              GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         //50Hz

               GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;         //上拉

                GPIO_Init(GPIOA, &GPIO_InitStructure);




                 GPIO_SetBits(GPIOA,GPIO_Pin_4);          //强制输出高电平,不选中芯片

        

            SPI_I2S_DeInit(SPI1);

                SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //设置SPI单向或者双向的数据模式:SPI设置为双线双向全双工

                SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                //设置SPI工作模式:设置为主SPI

                SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                //设置SPI的数据大小:SPI发送接收8位帧结构

                SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                //选择了串行时钟的稳态:时钟悬空高

                SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;        //数据捕获于第二个时钟沿

                SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                //NSS信号由硬件(NSS管脚)还是软件(使用SSI位)管理:内部NSS信号由SSI位控制

                SPI_InitStructure.SPI_BaudRatePrescaler = SpeedSet ;                //定义波特率预分频的值:波特率预分频值为256

                SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;        //指定数据传输从MSB位还是LSB位开始:数据传输从MSB位开始

                SPI_InitStructure.SPI_CRCPolynomial = 7;        //CRC值计算的多项式

                SPI_Init(SPI1, &SPI_InitStructure);  //根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器

        

                SPI_Cmd(SPI1, ENABLE); //使能SPI外设

        }

求助啊!!!会不会是nrf24l01芯片没有焊好啊!!!

回帖(5)

陈鹏

2020-4-27 09:21:54

望各位高手回复啊,
举报

高志新

2020-4-27 09:37:01
NRF要求时钟空闲时是低电平的....
举报

陈利妮

2020-4-27 09:47:54

先谢谢原子哥,但是改过来之后还是不行啊,经过示波器测试,发现SPI引脚的MOSI和CS有波形输出,但是MISO和SCK无波形,请问原子哥是怎么回事啊?
举报

李朗雯

2020-4-27 09:54:14

MOSI是发送的,MOSI有波形的时候,SCK肯定应该有波形才对。MISO则是接收的,如果NRF没有回应,就不会有波形。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分