你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

485串口发送失败

[复制链接]
阴世幽泉 提问时间:2016-5-18 14:04 /
上位机给串口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 发布时间:2016-5-18 14:04

举报

5个回答
xmshao 回答时间:2016-5-18 14:57:11
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:28:03
本帖最后由 quackonchen 于 2016-5-19 11:29 编辑

你的理解有问题,HAL_UART_Transmit_IT不是这么用的,具体你看看这个函数的实现方式吧
如果你想在函数返回的时候就完成发送,应该用阻塞式的transmit
阴世幽泉 回答时间:2016-5-19 23:58:40
quackonchen 发表于 2016-5-19 11:28
你的理解有问题,HAL_UART_Transmit_IT不是这么用的,具体你看看这个函数的实现方式吧
如果你想在函数返回 ...

可否大概说明下怎么用
阴世幽泉 回答时间:2016-5-31 12:33:52
解决了,在数据发送出去之后检测缓存发送完成标志位,或者用简单的延时
回答时间:2016-5-31 14:44:16
HAL_UART_Transmit_IT是开启中断,需要判断发送完成标志位或者发送计数器。

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版