OpenEdv-开源电子网

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

stm32F0 的NRF24L01驱动程序

[复制链接]

9

主题

33

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3295
金钱
3295
注册时间
2019-5-15
在线时间
244 小时
发表于 2019-5-16 20:37:53 | 显示全部楼层 |阅读模式
#include "24l01_spi.h"

//串行外设接口SPI的初始化,SPI配置成主模式                                                          
//本例程选用SPI1对NRF24L01进行读写操作,先对SPI1进行初始化
void SPIx_Init(void)
{         
        SPI_InitTypeDef  SPI_InitStructure;
        GPIO_InitTypeDef GPIO_InitStructure;
        RCC_APB2PeriphClockCmd(        RCC_APB2Periph_SPIx, ENABLE );       
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOx, ENABLE);

          
        //SPI1口初始化
        /* Configure SPI1 pins: SCK, MISO and MOSI */
        GPIO_InitStructure.GPIO_Pin = SPIx_SCK;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;  //复用推挽输出
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;
        GPIO_Init(GPIO_SPIx, &GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin = SPIx_MISO;
        GPIO_Init(GPIO_SPIx, &GPIO_InitStructure);
       
           GPIO_InitStructure.GPIO_Pin = SPIx_MOSI;
        GPIO_Init(GPIO_SPIx, &GPIO_InitStructure);
       
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0);
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0);
                GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0);
       
GPIO_SetBits(GPIO_SPIx,SPIx_MISO| SPIx_MOSI| SPIx_SCK);
        /* SPI2 configuration */                                            //初始化SPI1结构体
        SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;  //SPI1设置为两线全双工
        SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                                //设置SPI1为主模式
        SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                            //SPI发送接收8位帧结构
        SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;                                    //串行时钟在不操作时,时钟为低电平
        SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;                            //第一个时钟沿开始采样数据
        SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                    //NSS信号由软件(使用SSI位)管理
        SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;  //SPI波特率预分频值为8
        SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                        //数据传输从MSB位开始
        SPI_InitStructure.SPI_CRCPolynomial = 7;                                //CRC值计算的多项式

        SPI_Init(SPIx, &SPI_InitStructure);                                 //根据SPI_InitStruct中指定的参数初始化外设SPI2寄存器
       
        SPI_RxFIFOThresholdConfig(SPI1, SPI_RxFIFOThreshold_QF);
       
        /* Enable SPI2  */
        SPI_Cmd(SPIx, ENABLE);                                              //使能SPI1外设
       
        SPIx_ReadWriteByte(0xff);                                           //启动传输                 
}  

u8 SPIx_ReadWriteByte(u8 TxData)                                        //SPI读写数据函数
{               
        u8 retry=0;                                        
        /* Loop while DR register in not emplty */
        while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET)      //发送缓存标志位为空
                {
                retry++;
                if(retry>200)return 0;
                }                          
        /* Send byte through the SPI1 peripheral */
        SPI_SendData8(SPIx, TxData);                                    //通过外设SPI1发送一个数据
        retry=0;
        /* Wait to receive a byte */
        while (SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET)   //接收缓存标志位不为空
                {
                retry++;
                if(retry>200)return 0;
                }                                                              
        /* Return the byte read from the SPI bus */
        return SPI_ReceiveData8(SPIx);                                 //通过SPI1返回接收数据                                    
}


NRF24L01.rar

6.7 KB, 下载次数: 209

梦想!是个神奇的东西!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

109

主题

5556

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
10449
金钱
10449
注册时间
2017-2-18
在线时间
1890 小时
发表于 2019-5-17 19:34:17 | 显示全部楼层
回复 支持 反对

使用道具 举报

10

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1548
金钱
1548
注册时间
2019-5-2
在线时间
157 小时
发表于 2019-7-31 08:52:51 | 显示全部楼层
有普通IO模拟的SPI程序吗
回复 支持 反对

使用道具 举报

10

主题

134

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1548
金钱
1548
注册时间
2019-5-2
在线时间
157 小时
发表于 2019-7-31 08:53:15 | 显示全部楼层
有普通IO模拟SPI的吗
回复 支持 反对

使用道具 举报

1

主题

82

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3082
金钱
3082
注册时间
2017-7-10
在线时间
354 小时
发表于 2019-8-31 10:43:29 | 显示全部楼层

帮顶~~
回复 支持 反对

使用道具 举报

2

主题

472

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5722
金钱
5722
注册时间
2018-6-27
在线时间
502 小时
发表于 2019-9-27 08:38:50 | 显示全部楼层
学习学习,学习学习。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-6-10 05:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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