新手入门
- 积分
- 32
- 金钱
- 32
- 注册时间
- 2015-9-20
- 在线时间
- 2 小时
|
这是我写的主函数,除了nrf24l01.h改动了传输数据长度,改成了2个字节传输,其他没变。主要思路是ADC采集到12位数据,将12位数据存到一个u8数组中,数组长度为2,然后NRF发送数组的数据出去,用于其他用途。
#include "stm32f10x.h"
#include "24l01.h"
#include "spi.h"
#include "adc.h"
#include "delay.h"
#include "usart.h"
int main(void)
{
u16 adcx1;
u8 temp_buf1[2];
SystemInit ();
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
//u8 temp_buf2[2];
delay_init(); //延时函数初始化
uart_init(9600); //串口初始化为9600
Adc_Init(); //ADC初始化
printf("ADC初始化完成\r\n");
NRF24L01_Init(); //初始化NRF24L01
while(NRF24L01_Check());
printf("NRF初始化完成\r\n");
NRF24L01_TX_Mode();
printf("发送模式\r\n");
while(1)
{
adcx1=Get_Adc_Average(ADC_Channel_0,10);
printf("adc数据\r\n");
temp_buf1[0]=(adcx1>>8);
temp_buf1[1]=(adcx1&0x00ff);
while(NRF24L01_TxPacket(temp_buf1)!=TX_OK);
printf("fasong完成\r\n");
}
}
但是程序一直陷入在
u8 NRF24L01_TxPacket(u8 *txbuf)
{
u8 sta;
SPI1_SetSpeed(SPI_BaudRatePrescaler_8);//spi速度为9Mhz(24L01的最大SPI时钟为10Mhz)
NRF24L01_CE=0;
NRF24L01_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TX BUF 32个字节
NRF24L01_CE=1;//启动发送
while(NRF24L01_IRQ!=0);//等待发送完成
sta=NRF24L01_Read_Reg(STATUS); //读取状态寄存器的值
NRF24L01_Write_Reg(NRF_WRITE_REG+STATUS,sta); //清除TX_DS或MAX_RT中断标志
if(sta&MAX_TX)//达到最大重发次数
{
NRF24L01_Write_Reg(FLUSH_TX,0xff);//清除TX FIFO寄存器
return MAX_TX;
}
if(sta&TX_OK)//发送完成
{
return TX_OK;
}
return 0xff;//其他原因发送失败
}
里面的while(NRF24L01_IRQ!=0)语句中死循环,这是什么原因。NRF初始化和adc数据采集都成功了,数据就是发不出去
|
|