天线|RF射频
直播中

洪禹

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

NRF24L01的SPI1改为SPI2为什么实现不了?


        void NRF24L01_Init(void)

{

RCC->APB2ENR|=1<<2;    //使能PORTA口时钟

RCC->APB2ENR|=1<<3;    //使能PORTC口时钟

RCC->APB2ENR|=1<<4;    //使能PORTC口时钟



         GPIOA->CRL&=0XFFF000FF;//PA4输出

GPIOA->CRL|=0X00033300;

GPIOA->ODR|=7<<2;    //PA2.3.4 输出1



         GPIOB->CRH&=0XFFF0FFFF;//PA4输出

GPIOB->CRH|=0X00030000;

GPIOB->ODR|=1<<12;    //PA2.3.4 输出1



         GPIOC->CRL&=0XFF00FFFF;//PC4输出 PC5输出

GPIOC->CRL|=0X00830000;

GPIOC->ODR|=3<<4;    //上拉  

SPIx_Init();    //初始化SPI

NRF24L01_CE=0;  //使能24L01

NRF24L01_CSN=1; //SPI片选取消           

}

//////////////////////////////////////////////////////////////////////////////////////////////////////////

//24L01操作线

#define NRF24L01_CE   PBout(12) //24L01片选信号

#define NRF24L01_CSN  PCout(4) //SPI片选信号   

#define NRF24L01_IRQ  PCin(5)  //IRQ主机数据输入

我只添加了如上红色内容,同时把SPI换成了SPI2

没有检测成功,大神求助

回帖(2)

毛玲燕

2020-5-22 15:06:28
SPI相关IO都没改?
举报

刘柳

2020-5-22 15:18:56
void SPI2_Init(void)

{         

        RCC->APB2ENR|=1<<3;          //PORTB时钟使能          

        RCC->APB1ENR|=1<<14;           //SPI2时钟使能 

        //这里只针对SPI口初始化

        GPIOB->CRH&=0X000FFFFF; 

        GPIOB->CRH|=0XBBB00000;        //PB13/14/15复用             

        GPIOB->ODR|=0X7<<13;           //PB13/14/15上拉

        SPI2->CR1|=0<<10;                //全双工模式       

        SPI2->CR1|=1<<9;                 //软件nss管理

        SPI2->CR1|=1<<8;  



        SPI2->CR1|=1<<2;                 //SPI主机

        SPI2->CR1|=0<<11;                //8bit数据格式       

        SPI2->CR1|=1<<1;                 //空闲模式下SCK为1 CPOL=1

        SPI2->CR1|=1<<0;                 //数据采样从第二个时间边沿开始,CPHA=1  

        //对SPI2属于APB1的外设.时钟频率最大为36M.

        SPI2->CR1|=3<<3;                 //Fsck=Fpclk1/256

        SPI2->CR1|=0<<7;                 //MSBfirst   

        SPI2->CR1|=1<<6;                 //SPI设备使能

        SPI2_ReadWriteByte(0xff);//启动传输                 

}   

//SPI2速度设置函数

//SpeedSet:0~7

//SPI速度=fAPB1/2^(SpeedSet+1)

//APB1时钟一般为36Mhz

void SPI2_SetSpeed(u8 SpeedSet)

{

        SpeedSet&=0X07;                        //限制范围

        SPI2->CR1&=0XFFC7; 

        SPI2->CR1|=SpeedSet<<3;        //设置SPI2速度  

        SPI2->CR1|=1<<6;                 //SPI设备使能          



//SPI2 读写一个字节

//TxData:要写入的字节

//返回值:读取到的字节

u8 SPI2_ReadWriteByte(u8 TxData)

{               

        u16 retry=0;                                 

        while((SPI2->SR&1<<1)==0)                //等待发送区空       

        {

                retry++;

                if(retry>=0XFFFE)return 0;         //超时退出

        }                          

        SPI2->DR=TxData;                                   //发送一个byte 

        retry=0;

        while((SPI2->SR&1<<0)==0)                 //等待接收完一个byte  

        {

                retry++;

                if(retry>=0XFFFE)return 0;        //超时退出

        }                                                              

        return SPI2->DR;                          //返回收到的数据                                    

}

改了,直接源代码啊,没有动
举报

更多回帖

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