金牌会员
 
- 积分
- 2357
- 金钱
- 2357
- 注册时间
- 2019-10-29
- 在线时间
- 380 小时
|

楼主 |
发表于 2020-11-19 17:22:24
|
显示全部楼层
搞半天是发送端问题,我发送端之前是这样的:- HAL_GPIO_WritePin(WBUS2_CTL_GPIO_Port,WBUS2_CTL_Pin, GPIO_PIN_RESET);//设置发射使能
- HAL_UART_Transmit_DMA(&huart3, buff_temp, 6);
- HAL_Delay(1);
- HAL_GPIO_WritePin(WBUS2_CTL_GPIO_Port,WBUS2_CTL_Pin, GPIO_PIN_SET);<span style="background-color: rgb(255, 255, 255); white-space: pre;"> </span>
复制代码 然后我将延时1ms改成了 while(HAL_UART_GetState(&huart3) != HAL_UART_STATE_READY);
- HAL_GPIO_WritePin(WBUS2_CTL_GPIO_Port,WBUS2_CTL_Pin, GPIO_PIN_RESET);//设置发射使能
- HAL_UART_Transmit_DMA(&huart3, buff_temp, 6);
- <span style="background-color: rgb(255, 255, 255);">while(HAL_UART_GetState(&huart3) != HAL_UART_STATE_READY);</span>
- HAL_GPIO_WritePin(WBUS2_CTL_GPIO_Port,WBUS2_CTL_Pin, GPIO_PIN_SET);
复制代码 最后接收端收到数据不用在延时2ms,也可以正常发送数据
吸取了一个教训,逻辑分析仪采集到数据的结束,但并不代表着DMA通道已经复位好,准备好了下一次数据的传输
另外,我发现在接收端,将重新设置接收放在if(收到数据){}里面,他有时候会出现收不到数据的现象,而把重新设置接收放在while中的话,就没碰到偶尔收不到数据的现象
|
|