发 帖  
原厂入驻New
[问答] 通过串口接收中断进行nrf24l01发送串口数据,发不出去
260 单片机 STM32 nRF24L01 串口通信
分享
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
        u8 a[32];
        NRF24l01_TX_Mode();
        a[4]=55;
        NRF24L01_TxPacket(a);
        IF(huart->Instance==USART1)//如果是串口1
        {
                if((USART_RX_STA&0x8000)==0)//接收未完成
                {
                        if(USART_RX_STA&0x4000)//接收到了0x0d
                        {
                                if(aRxBuffer[0]!=0x0a)USART_RX_STA=0;//接收错误,重新开始
                                else USART_RX_STA|=0x8000;        //接收完成了
                                
                        }
                        else //还没收到0X0D
                        {        
                                NRF24L01_TxPacket(a);
                                if(aRxBuffer[0]==0x0d)USART_RX_STA|=0x4000;
                                else
                                {
                                        USART_RX_BUF[USART_RX_STA&0X3FFF]=aRxBuffer[0] ;
                                        USART_RX_STA++;                                
                                        if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收数据错误,重新开始接收         
                                }                 
                        }
                        a[4]=50;
                        NRF24L01_TxPacket(a);
                        NRF24L01_TxPacket(USART_RX_BUF);
                        NRF24L01_TxPacket(aRxBuffer);
                        a[4]=49;
                        NRF24L01_TxPacket(a);
                }

        }
}
能发送a[4]=50和=49,中间串口数据发送不了,且有时候49后直接跟50,是为什么呢
1
奖励20积分
6 天前   评论 分享淘帖 邀请回答
3个回答
首先这个软件框架和逻辑就不正确
1, 中断中应该只接收串口数据
2, 主函数中根据接收的串口数据利用rf来发

楼主的做法问题在这
1. 中段中操作过多,还没操作完成可能就触发第二次中断了
1 条评论
HAL_UART_RxCpltCallback 是 Uart RX 接收完成的调用函数,在这个函数里,您应该把接收到的数据复制到待处理的缓冲区中,而不是直接发送刚接收到的数据,【若量大】,造成TX、RX堵塞。
前天 10:53 评论

举报

撰写答案

你正在撰写答案

如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。

高级模式
您需要登录后才可以回帖 登录 | 注册

我要提问
课程
    关闭

    站长推荐 上一条 /10 下一条

    快速回复 返回顶部 返回列表