LoRa串口透传

2021-03-09 15:22:47 浏览数 (2)

前言:串口透传也是用的最多的一种,用户把需要发送的数据通过串口发送到模块,模块正确接收后,然后通过LoRa发送出去,发送完后再切换到接收模式。模块不分主从机,但是要确保两个模块的射频参数一致。这里使用串口空闲中断和接收中断的方式接收串口数据。

1、串口核心代码

代码语言:javascript复制
//初始化中断、串口缓冲区void COMTransInit(void){       USART_ITConfig(EVAL_COM, USART_IT_RXNE, ENABLE);    USART_ITConfig(EVAL_COM, USART_IT_IDLE, ENABLE);
    CommType.Len=0;    CommType.IsIDLE=false;    memset( CommType.RecvBuff,0,sizeof(CommType.RecvBuff));}//接收数据,存入缓冲区void COMRecvBuff(uint8_t data){   if (CommType.Len<COMM_BUFF_MAX)   {     CommType.RecvBuff[CommType.Len] = data;     CommType.Len  ;   }   else   {     CommType.Len=COMM_BUFF_MAX;   }}//串口空闲设置void COMRecvIDLE(bool IsIDLE){  CommType.IsIDLE=IsIDLE;}//串口数据处理bool COMProcess(uint8_t *buff,uint16_t *len){#if 0    if((CommType.IsIDLE)||(CommType.Len>=COMM_BUFF_MAX)) //    //数据过长,会先判断到数据过长,再产生idie中断#else  if(CommType.IsIDLE)#endif    {    memcpy(buff,CommType.RecvBuff,CommType.Len);    *len= CommType.Len;      memset( CommType.RecvBuff,0,sizeof(CommType.RecvBuff));    CommType.IsIDLE =false;    CommType.Len=0;
    return true;  }  return false;}

2、串口中断处理

代码语言:javascript复制
INTERRUPT_HANDLER(TIM2_CC_USART2_RX_IRQHandler, 20){  uint8_t ch;  if (USART_GetITStatus(USART2, USART_IT_RXNE) == SET)  {    ch = USART_ReceiveData8(USART2);    USART_ClearITPendingBit(USART2, USART_IT_RXNE);    COMRecvBuff(ch);  }  if(USART_GetITStatus(USART2, USART_IT_IDLE) != RESET)  {    USART2->SR;//SR    USART2->DR;//DR    USART_ClearITPendingBit(USART2, USART_IT_IDLE);    COMRecvIDLE(true);  }}

3、LoRa处理代码

与ping-pong类似,篇幅原因这里不列出。LoRa点对点通信,OLED显示(内附代码)

4、串口透传

0 人点赞