stm8s使用NRF24L01

这篇博客主要介绍了如何在STM8S微控制器上使用NRF24L01无线通信模块,通过示例代码展示了在C文件和头文件中的配置与应用。
摘要由CSDN通过智能技术生成

懒得写了,直接贴代码,这是点c文件 

#include "stm8s.h"
#include "24L01.h"

/*
u8 DTX_ADDRESS[TX_ADR_WIDTH]= {0x22,0x22,0x22,};//0x22,0x22};  //本地地址
//u8 DRX_ADDRESS[RX_ADR_WIDTH]= {0x11,0x11,0x11,0x11,0x11};  //接收地址
u8 DRX_ADDRESS[RX_ADR_WIDTH]= {0x22,0x22,0x22,};//0x22,0x22};  //接收地址

u8 *TX_ADDRESS;  //本地地址
u8 *RX_ADDRESS;  //接收地址
*/
//u8 RF_ADDRESS[TX_ADR_WIDTH];
u8 RF_ADDRESS[ADR_WIDTH]={0x42,0x01,0xA1};
//u8 RF_TX_ADDRESS[ADR_WIDTH]={0x42,0x01,0xA1};
//u8 RF_RX_ADDRESS[ADR_WIDTH]={0x42,0x01,0xA1};

u8 Rxbuf[PLOAD_WIDTH];
u8 Txbuf[PLOAD_WIDTH]={1,2,3,4,5};//,6,7,8,};

u8 NRF24L01_RFCH=0;


u8 SPI_ReadWriteByte(u8 byte){
   while(SPI_GetFlagStatus(SPI_FLAG_TXE)==RESET);
   SPI_SendData(byte);
   while(SPI_GetFlagStatus(SPI_FLAG_RXNE)==RESET);
   byte=SPI_ReceiveData();


   return byte;
 }

//函数:在指定位置读出指定长度的数据
//返回值,读到的状态寄存器的值
u8 NRF24L01_Read_Buf(u8 reg,u8 *pBuf,u8 len)
{
    u8 status,u8_ctr;
    CLR24CSN;  //SPI使能 
    status = SPI_ReadWriteByte(reg);  //发送寄存器值(位置),并读取状态值 
    for(u8_ctr=0;u8_ctr<len;u8_ctr++)
                    pBuf[u8_ctr]=SPI_ReadWriteByte(0Xff); //读取数据
    SET24CSN;  //关闭SPI
    return(status);  
}

//函数:在指定位置写指定长度的数据
//返回值,写入状态寄存器的值
u8 NRF24L01_Write_Buf(u8 reg, u8 *pBuf, u8 len)
{
    u8 status,u8_ctr;        
    CLR24CSN;  //SPI使能 
    status = SPI_ReadWriteByte(reg);  //发送寄存器值(位置),并读取状态值
    for(u8_ctr=0; u8_ctr<len; u8_ctr++)
        SPI_ReadWriteByte(*pBuf++);  //写入数据 
    SET24CSN;  //关闭SPI
    return(status);   
}

//功能:SPI写寄存器
//reg:指定寄存器地址
//value:写入的值
u8 NRF24L01_Write_Reg(u8 reg,u8 value)
{
    u8 status;
    CLR24CSN;  //SPI使能 
    status = SPI_ReadWriteByte(reg);  //发送寄存器号
    SPI_ReadWriteByte(value);  //写入寄存器的值
    SET24CSN;  //关闭SPI
    return(status);  
}                
                
//函数:SPI读寄存器值
//reg:要读的寄存器
u8 NRF24L01_Read_Reg(u8 reg)
{
    u8 reg_val;
    CLR24CSN;  //SPI使能 
    SPI_ReadWriteByte(reg);  //发送寄存器号 
    reg_val = SPI_ReadWriteByte(0Xff);  //读取寄存器的内容 
    SET24CSN;  //关闭SPI
    return(reg_val);  
}

//初始化24l01的IO口
void NRF24L01_Init(void)
{
  GPIO_Init(PORT_POWERON_24CSN, PIN_POWERON_24CSN, GPIO_MODE_OUT_PP_HIGH_SLOW);  //CS GPIO
  GPIO_Init(PORT_POWERON_24IRQ, PIN_POWERON_24IRQ, GPIO_MODE_IN_PU_NO_IT);  //IRQ GPIO
  GPIO_Init(PORT_POWERON_24CE, PIN_POWERON_24CE, GPIO_MODE_OUT_PP_HIGH_SLOW);  //CE GPIO

  SPI_DeInit();

  SPI_Init(SPI_FIRSTBIT_MSB, 
           SPI_BAUDRATEPRESCALER_4, 
           SPI_MODE_MASTER,
           SPI_CLOCKPOLARITY_LOW,     
           SPI_CLOCKPHASE_1EDGE, 
           SPI_DATADIRECTION_2LINES_F
  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值