- void SPI_NRF_TX_DATAS(u8* TBuff,u16 ByteNUM)
- {
- u8 Status[1];
- Status[0] = NRF_IRQ;//读取nRF设备的中断引脚的电平值
- while(Status[0]) //如无中断触发则写数据
- {
- NRF_CE_LOW;
- SPI_NRF_Write(SPI2,WR_TX_PLOAD,TBuff,ByteNUM); //发送数据
- NRF_CE_HIGH;
- Status[0] = NRF_IRQ;
- }
- NRF_CE_LOW;
- Delay_ms(1);
- SPI_NRF_Read(SPI2,nRF_READ_REG+STATUS,Status,1);//读取Status寄存器值
- NRF_CE_HIGH;
- if(Status[0]&TX_DS)
- {
- LED_Close(1);//熄灭LED1
- Delay_ms(500);
- Status[0] = 0xfe;
- SPI_NRF_Write(SPI2,nRF_WRITE_REG+STATUS,Status,1); //清楚中断标志
- }
- SPI_NRF_Write(SPI2,FLUSH_TX,TBuff,0);
- SPI_NRF_Read(SPI2,nRF_READ_REG+STATUS,Status,1);//读取Status寄存器值
- }
以下为初始化代码- u8 TX_RX_ADDR[5]={0x34,0x43,0x10,0x10,0x01};
- NRF_CE_LOW; //禁能设备
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + TX_ADDR,TX_RX_ADDR,5); //配置发送地址
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + RX_ADDR_P0,TX_RX_ADDR,5);//配置通道0地址
- TX_Array[0]=0x00;
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + EN_AA, TX_Array, 1);//禁能自动应答
- TX_Array[0]=0x00;
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + EN_RXADDR, TX_Array, 1); //禁能通道
- TX_Array[0]=0x00;
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + SETUP_RETR, TX_Array, 1); //禁能自动重发
- TX_Array[0]=40;
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + RF_CH, TX_Array, 1); //配置通信频率
- TX_Array[0]=0x07;
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + RF_SETUP, TX_Array, 1); //配置发射功率
- TX_Array[0]=0x0e;
- SPI_NRF_Write(SPI2,nRF_WRITE_REG + CONFIG, TX_Array, 1); // 主发送功能,设备上电
- TX_Array[0]=0xfe; //1111 xxxx STATUS
- SPI_NRF_Write(SPI2,nRF_WRITE_REG+STATUS,TX_Array,1);
- NRF_CE_HIGH; //CE=1 使能设备
- Delay_ms(1); //延时
找到问题在哪里了,原来是systick函数中,us和ms延时函数的定义影响到了,但具体怎么导致这个问题的,我也解释不了systick的配置SysTick_Config(SystemCoreClock/1000)
运行正常的配置
- void Delay_ms(__IO uint32_t nTime)
- {
- TimingDelay = nTime;
- while(TimingDelay != 0);
- }
- void Delay_us(uint16_t x)
- {
- Delay_ms(1);
- }
之前的程序中,ms同上,us延时的定义如下
void Delay_us(uint16_t x)
{
TimingDelay = 1;
while(TimingDelay!=0);
}
说明:芯片是STM32F051R8 系统:win7 64位 开发环境:uVersion V5.11
下载器:J-LINK (USB口连到电脑,然后通过SWD连接电路板)