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

485串口发送失败

[复制链接]
yinshiyouquan 提问时间: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
yinshiyouquan 回答时间:2016-5-19 23:58:40
quackonchen 发表于 2016-5-19 11:28
你的理解有问题,HAL_UART_Transmit_IT不是这么用的,具体你看看这个函数的实现方式吧
如果你想在函数返回 ...

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

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版