const u8 TX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //发送地址
const u8 RX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01}; //发送地址
void TX_Mode(void)
{
// u8 t_r;
NRF24L01_CE=0; //使能24L01
NRF24L01_Write_Buf(WRITE_REG+TX_ADDR,(u8*)TX_ADDRESS,TX_ADR_WIDTH);//写TX节点地址
// t_r=1;
// printf("t_r:%d\n",sizeof(TX_ADDRESS));
//写配置寄存器,发送地址
NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);
//设置RX节点地址,主要为了使能ACK
NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01); //使能通道0的自动应答
//EN_AA[7:0]->bit7&6=0,bit5(CH5自动应答),bit4(CH4自动应答),bit3(CH3自动应答)
//bit2(CH2自动应答),bit1(CH1自动应答),bit0(CH0自动应答)
NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01); //使能通道0的接收地址,允许通道0接收地址
NRF24L01_Write_Reg(WRITE_REG+SETUP_RETR,0x1a);
//设置自动重发间隔时间:500us + 86us; 最大自动重发次数:10次
NRF24L01_Write_Reg(WRITE_REG+RF_CH,40); //设置RF通道为40
NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f); //设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_Write_Reg(WRITE_REG+CONFIG,0x0e);
//配置基本工作模式的参数  WR_UP,EN_CRC,16BIT_CRC,接收模式,开启所有中断
NRF24L01_CE=1;//CE为高,10us后启动发送
}
void RX_Mode(void)
{
NRF24L01_CE=0; //使能24L01
NRF24L01_Write_Buf(WRITE_REG+RX_ADDR_P0,(u8*)RX_ADDRESS,RX_ADR_WIDTH);//写RX节点地址
NRF24L01_Write_Reg(WRITE_REG+EN_AA,0x01); //使能通道0的自动应答
NRF24L01_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能通道0的接收地址
NRF24L01_Write_Reg(WRITE_REG+RF_CH,40); //设置RF通信频率
NRF24L01_Write_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH);//选择通道0的有效数据宽度
NRF24L01_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//设置TX发射参数,0db增益,2Mbps,低噪声增益开启
NRF24L01_Write_Reg(WRITE_REG+CONFIG, 0x0f);//配置基本工作模式的参数  WR_UP,EN_CRC,16BIT_CRC,接收模式
NRF24L01_CE = 1; //CE为高,进入接收模式
}
TX_ADDRESS 和RX_ADDRESS这两个数字是被定义成const只读型的
上面是无线通信例程里面设置TX 模式和RX模式的两个函数
为什么在进行写地址的时候,也就是要写入 TX_ADDRESS 和RX_ADDRESS 的元素,这里不能直接用其数组名做形参呢?
而要在前面加一个(u8*)?不是数组名作为形参的时候他就是一个4bit的指针了吗?为什么还要加一个(u8*)呢?
|