您的位置 首页 技术

STM32 驱动无线NRF24L01 的安稳批改

修正处voidsent_data(u8*fp,u16flong){u16i;TX_Mode((u8*)flong);//传送长度while(!tran);//等待完成tran=0;flong=flon

修正处

void sent_data(u8* fp,u16 flong)
{
u16 i;
TX_Mode((u8*)&flong); //传送长度
while(!tran); //等候完结
tran=0;
flong=flong/33+1;
while(flong)
{
for(i=0;i<20000;i++);//这个延时的十分必要 大约2MS 左右
if(MAX_RT) return;//无应答回来
TX_Mode(fp); //传送数据
while(!tran); //等候完结
tran=0;
fp+=32;flong–;
}

}

愈加合理的延时写法 ,发送分两部分 首要发送内容长度 然后发送内容

修正处

if(RX_NU==2&&Timer2==0)

{
USART2_Puts(“传输过错 “);
USART2_Puts(“\r\n”);
RX_NU=1;

}

形似这个if的进入是不行能的 可是因为在中止里更新了 Timter2 所以产生了不行估计的结果。

修正处

if(RX_DR) // 判别是否接受到数据
{
if(RX_NU==1)
{
CE_L;
SPI_Read_Buf(RD_RX_PLOAD, RX_BUF, TX_PLOAD_WIDTH); // 从RX FIFO读出数据
SPI_RW_Reg(RF_WRITE_REG + STATUS, sta); //铲除RX_DS中止标志
rectnu=RX_BUF[0];rectnu|=RX_BUF[1]<<8; //接纳串长
onerc=rectnu/33+1; //核算接纳次数
Timer2=50;RX_NU=2;///*超时时刻*/
PRX_BUF=RX_BUF; //康复指针
RX_Mode();return;

}

if(RX_NU==2)
{
CE_L;
SPI_Read_Buf(RD_RX_PLOAD, PRX_BUF, TX_PLOAD_WIDTH); // 从RX FIFO读出数据
SPI_RW_Reg(RF_WRITE_REG + STATUS, sta); // 铲除RX_DS中止标志
onerc–;PRX_BUF+=32;//接纳计数 接纳指针移动
if(!onerc)
{
RX_NU=1;
RX_BUF[rectnu]=\0; //截取有用串长
USART2_Puts(RX_BUF); //串口发送接纳到的字符
USART2_Puts(“\r\n”);
}
Timer2=50;///*超时时刻*/
RX_Mode();return;
}
}

传输过错后合理的指针康复

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/jishu/252360.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部