完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
上位机给串口1发数据,串口1接收到数据后通过串口1和串口3发出去,测试结果是上位机可以将发送的数据成功接回,但是485那边无法接收到数据,如果屏蔽EN_485(RX_485);则可以收到数据,可以知道是485被设置成接收模式无法发送数据;当时代码设计时候是这么理解的,HAL_UART_Transmit_IT这个函数将COM1.RX_NUM字节数据全部发送,成功发送将返回HAL_OK,这个时候我重新将485设置为接收模式,这里具体为何出现这样情况以及如何修正这个bug恳亲大家帮忙看下,代码如下:while(1)
{ if(COM1.RX_Ready == SET) { COM1.RX_Ready = RESET; EN_485(TX_485); if(HAL_UART_Transmit_IT(&huart1,(uint8_t*)COM1.RX_BUF,COM1.RX_NUM) != HAL_OK) { ; } // USART1_RX_NUM = 0; if(HAL_UART_Transmit_IT(&huart3,(uint8_t*)COM1.RX_BUF,COM1.RX_NUM) != HAL_OK) { } EN_485(RX_485); } } 还有个疑问就是HAL_UART_StateTypeDef结构体中没有发送完成标志,这个标志在哪个位置 |
|
相关推荐
5个回答
|
|
HAL_UART_StateTypeDef 里有个USART_TypeDef,它里面又有__IO uint32_t SR;
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__)) #define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__)) |
|
|
|
本帖最后由 quackonchen 于 2016-5-19 11:29 编辑
你的理解有问题,HAL_UART_Transmit_IT不是这么用的,具体你看看这个函数的实现方式吧 如果你想在函数返回的时候就完成发送,应该用阻塞式的transmit |
|
|
|
60user174 发表于 2018-11-5 11:57 可否大概说明下怎么用 |
|
|
|
解决了,在数据发送出去之后检测缓存发送完成标志位,或者用简单的延时
|
|
|
|
HAL_UART_Transmit_IT是开启中断,需要判断发送完成标志位或者发送计数器。
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1129 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1075 浏览 2 评论
2175 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1269 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1693 浏览 1 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 13:08 , Processed in 0.747302 second(s), Total 82, Slave 65 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号