完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近使用一个2.4G无线模块,做主机从机之间通信,取代原先485有线通信,由于使用的是串口透传模块,简单改了一下标志位,就开始调试程序了。 1、串口助手连无线模块,能发送接收 (正常) 2、主电脑分别当主从机,测试电路板modbus是否正常(不带模块测试) (正常) 3、无线模块分别接到主从机上测试 (不正常) 发现不正常有些慌了,单独测试都没有问题,无线模块就是串口透传,能有啥问题。果断开始debug。 调试开始---------------------------------------------------------------> 一天过去了,没有找到问题。 第二天调试开始--------------------->发现问题了。 串口接收采用的是DMA+空闲中断,在中断中设置断点。 void USART2_IRQHandler(void) { u8 res=0; u8 cout=0; u8 i = 0; if(USART_GetITStatus(USART2, USART_IT_IDLE) == SET){ //接收中断 USART_ClearITPendingBit(USART2, USART_IT_IDLE); res = USART2->SR; res = USART2->DR; //清usart_IT_IDLE 标志 DMA_Cmd(DMA1_Channel6,DISABLE); // 关闭DMA cout = MB_UART_RX_LEN - DMA_GetCurrDataCounter(DMA1_Channel6); // 得到接受数据个数 MB_Uart_Rx[cout] = ' |