STM32 HAL库的串口使用__HAL_LOCK(huart)

在使用HAL库进行串口编程时,若同时进行接收和发送操作可能会遇到资源锁定问题,导致接收中断无法正常工作。本文介绍了一种简单直接的解决方案。

在使用HAL库的时候发现同一串口的接收和发送如果同时进行的话会发生问题,因为

如果用调用下面的函数

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)

 

进行接收串口数据的时候,有可能

HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout)

 

也正在进行中,而这两个函数都会对串口资源上锁

__HAL_LOCK(huart);

导致中断接收函数 HAL_StatusTypeDef HAL_UART_Receive_IT  返回hal_busy; 没有正常的执行,所以串口接收中断也没有打开,再也接收不到下一个字节了。

 

我简单粗爆的把 __HAL_LOCK(huart);注释掉了。

 

 

转载于:https://www.cnblogs.com/jackweibe/p/7279212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值