资源简介
包含nrf24l01头文件跟.c文件,可以在头文件设置是使用硬件spi还是软件模拟spi,接法完全一样。用的msp430f5438a的UCB3,实测完全通过,需要一对进行收发,单个发送或接受不会成功
代码片段和文件信息
#include “NRF24L01.h“
extern u8 TX_ADDRESS[TX_ADR_WIDTH]={0x340x430x100x100x01}; //发送地址
extern u8 RX_ADDRESS[RX_ADR_WIDTH]={0x340x430x100x100x01}; //发送地址
void SPI3_Init()
{
#if USE_HW_SPI
P10SEL|=BIT1+BIT2+BIT3; //设置P10.1~P10.3外设功能
P10SEL&=~(BIT0+BIT4+BIT5);
P10DIR|=BIT0+BIT1+BIT3+BIT4; //设置CSMOSICLKCE为输出方向
P10DIR&=~(BIT2+BIT5); //设置MISO为输入方向
P10DS|=BIT0+BIT1+BIT3+BIT4;
P10REN|=BIT2+BIT5; //设置MISO上拉
P10OUT|=BIT1+BIT2+BIT5;
P10OUT&=~BIT0+BIT3;
UCB3CTL1|=UCSWRST;
UCB3CTL0 =UCCKPH+UCMSB+UCMST+UCMODE_0+UCSYNC; //3线SPI主机模式,时钟极性低,先发送MSB
UCB3CTL0&=~(UCCKPL);
UCB3CTL1|=UCSSEL_2; ///选择SMCLK
UCB3BR0=5; //25M/5=5M <10M
UCB3BR1=0;
UCB3CTL1&=~UCSWRST;
UCB3IE &= ~(UCRXIE+UCTXIE); //不开中断
// UCB3IFG&=~UCRXIFG;
#elif !USE_HW_SPI
P10DIR|=BIT0+BIT1+BIT3+BIT4;
P10DIR&=~(BIT2+BIT5);
P10DS|=BIT0+BIT1+BIT3+BIT4;
P10REN|=BIT2+BIT5;
P10OUT|=BIT2+BIT5;
P10OUT&=~BIT3;
#endif
}
//连接方式
//P10.0->CSN P10.1->MOSI
//P10.2->MISO P10.3->CLK
//P10.4->CE P10.5->IRQ
u8 SPI3_SendReceiveByte(u8 byte)
{
u8 val;
#if USE_HW_SPI
while (!(UCB3IFG&UCTXIFG)); //等待TXBUF为空
UCB3TXBUF=byte;
while((UCB3STAT&UCBUSY)&&(!(UCB3IFG&UCRXIFG))); //等待发送跟接收完成
val=UCB3RXBUF;
#elif !USE_HW_SPI
u8 i;
for(i=0;i<8;i++)
{
if(byte&0x80)
NRFMOSI_1;
else
NRFMOSI_0;
byte<<=1;
NRFCLK_1;
if(NRFMISO)
byte|=0x01;
delay_us(1);
NRFCLK_0;
}
val=byte;
#endif
return val;
}
u8 NRF_WriteReg(u8 regu8 val)
{
u8 temp;
NRF24L01_CSN_0;
temp=SPI3_SendReceiveByte(reg);
SPI3_SendReceiveByte(val);
NRF24L01_CSN_1;
return temp;
}
u8 NRF_ReadReg(u8 reg)
{
u8 val;
NRF24L01_CSN_0;
SPI3_SendReceiveByte(reg);
val=SPI3_SendReceiveByte(0xff);
NRF24L01_CSN_1;
return val;
}
u8 NRF_ReadBuf(u8 regu8 *buffu8 num)
{
u8 ival;
NRF24L01_CSN_0;
val=SPI3_SendReceiveByte(reg);
for(i=0;i buff[i]=SPI3_SendReceiveByte(0);
NRF24L01_CSN_1;
return val;
}
u8 NRF_WriteBuf(u8 regu8 *buffu8 num)
{
u8 vali;
NRF24L01_CSN_0;
val=SPI3_SendReceiveByte(reg);
for(i=0;i SPI3_SendReceiveByte(*buff++);
NRF24L01_CSN_1;
return val;
}
u8 NRF_SendPacket(u8 *TxBuf)
{
u8 val;
NRF24L01_CE_0;
NRF_WriteBuf(WR_TX_PLOADTxBufTX_PLOAD_WIDTH);
NRF24L01_CE_1;
NRF_WriteReg(WRITE_REG+STATUS0xff);
// Tx_Mode(TxBuf);
// delay_ms(5);
while(NRF24L01_IRQ!=0);
val=NRF_ReadReg(STATUS);
NRF_WriteReg(WRITE_REG+STATUS0xff);
NRF_WriteReg(WRITE_REGval);
if(val&MAX_TX)
{
NRF_WriteReg(FLUSH_TX0xff);
return MAX_TX;
}
if(val&TX_OK)
return TX_OK;
return 0xff;
}
u8 NRF_ReceivePacket(u8 *RxBuf)
{
u8 val;
val=NRF_ReadReg(STATUS);
NRF_WriteReg(WRITE_REG+STATU
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4817 2015-04-01 18:34 nrf24l01\NRF24L01.h
文件 4619 2015-04-01 13:20 nrf24l01\NRF24L01.c
目录 0 2015-04-06 21:51 nrf24l01
----------- --------- ---------- ----- ----
9436 3
- 上一篇:淘宝宝贝评价、商品属性提取采集器
- 下一篇:AS转TS代码转换工具第三版更新
相关资源
- spice 018um库文件
- msp430中断嵌套程序
- stm32+MAX7219数码管模块显示程序 spi接口
- MSP430+LORA
- nrf51822 spi
- msp430f5438的AD转换结果通过串口输送到
- MSP430控制LCD1602显示
- pspice的rcc开关电源仿真
- ADC序列通道多次转换12864液晶程序ms
- 基于fpga的spi和i2c接口电路转化电路
- STM32F103 NRF24L01无线通讯模块驱动例程
- msp430串口计算器
- 按键控制MSP430F5529单片机控制灯闪烁
- MSP430F系列单片机bootloader原理及实现方
- MSP430F5529原理图
- 基于dsPIC的精跟踪控制系统设计
- MSP430F149单片机对继电器的控制程序和
- MSP430 SD卡FAT16源码!!!经典
- LCD1602程序 for MSP430F449
- ADC SPI配置FPGA代码
- 基于MSP430F6638的数字钟代码
- pspice安装汉化包
- 2018年TI杯电子设计大赛FDC2214、TPS630
- SPI_samplefiles
- MSP430F5529LP 串口通信 UART 代码 CCS工程
- 基于MSP430的UART串口控制机械臂
- SPI通信代码
- fdc2214驱动程序——基于MSP430F5529
- 基于MSP430F149单片机的语音播报模块使
- msp430f5529计算fft程序,可用
评论
共有 条评论