接上篇:【LoRa模块测评】实现模块互相通信
折腾了2天,终于可以登录论坛了,下面开始把上午的成果分享一下。
主要是实现主从控制LED的翻转,接线还是和之前一样,主要实现过程是
主机发送控制指令,从机接收到指令后,实现LED的翻转
先实现主机部分:
- <font size="3">u8 sendCMD[]={0x31,0x0d,0x0a};</font>
复制代码 上面是往从机发送指令,指令为0x31,在接收端第4位,
下面是从机部分:
从机串口接收部分
- <font size="3">
- u8 USART6_RX_BUF[USART_REC_LEN]; //接收缓冲,最大USART_REC_LEN个字节.
- u16 USART6_RX_STA=0;
- void USART6_IRQHandler(void)
- {
- u8 res;
- #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
- OSIntEnter();
- #endif
- if(USART6->SR&(1<<5))//接收到数据
- {
- res=USART6->DR;
- uart1_sendbyte(res);
- if((USART6_RX_STA&0x8000)==0)//接收未完成
- {
- if(USART6_RX_STA&0x4000)//接收到了0x0d
- {
- if(res!=0x0a)USART6_RX_STA=0;//接收错误,重新开始
- else USART6_RX_STA|=0x8000; //接收完成了
- }else //还没收到0X0D
- {
- if(res==0x0d)USART6_RX_STA|=0x4000;
- else
- {
- USART6_RX_BUF[USART6_RX_STA]=res;
- USART6_RX_STA++;
- if(USART6_RX_STA>(USART_REC_LEN-1))USART6_RX_STA=0;//接收数据错误,重新开始接收
- }
- }
- }
- }
- #if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS为真,则需要支持OS.
- OSIntExit();
- #endif
- }</font>
复制代码 从机主控部分
- <font size="3"> M0=0;
- M1=0;
- delay_ms(500);
- while(1)
- {
- if(USART6_RX_STA&0x8000)
- {
- USART6_RX_STA=0;
- if(USART6_RX_BUF[3]==0x31)
- GPIOF->ODR ^= PIN9|PIN10;
- }
- } </font>
复制代码
下载到板卡后,从机的LED实现了定期翻转,见视频
由于录制的视频为mp4格式,不会上传,
补充内容 (2018-4-17 13:46):
主机部分少传的内容
Send_SX1276(1,sendCMD);
delay_ms(5000); |
Send_SX1276(1,sendCMD);
delay_ms(5000);