STM32CUBE HAL库 关于串口usart收发的一个问题

发布者:chuyifei最新更新时间:2019-07-09 来源: eefocus关键字:STM32CUBE  HAL库  串口  usart收发 手机看文章 扫描二维码
随时随地手机看文章

最近项目中遇到了一个问题,因为开始用freertos,然后想加入串口收发功能。打印正常,但是加入接收中断后,开始出bug,最后锁定接收中断挂掉了。


原因:HAL库的串口接收发送函数有bug,就是收发同时进行的时候,会出现锁死的现象。


解决:需要注释掉    HAL_UART_Receive_IT 和 HAL_UART_Transmit_IT 中的 __HAL_LOCK(huart) 函数


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------


在接收中断中使用HAL_UART_Receive_IT()函数,会导致CR1的RXNEIE 置0,最后一直处于错误状态,无法进行接收。


处理办法:注释掉    HAL_UART_Receive_IT 中的 __HAL_LOCK(huart) 函数


关键字:STM32CUBE  HAL库  串口  usart收发 引用地址:STM32CUBE HAL库 关于串口usart收发的一个问题

上一篇:STM32_HAL库入门笔记(一) USART配置
下一篇:STM32 HAL I2C库读指定寄存器的数据

推荐阅读最新更新时间:2024-10-29 16:20

51单片机 小车 L298N pwm调速 串口控制 按键控制
难点:1、串口定时器T1,和T0定时器优先级 2、pwm频率与占空比的设置 按键控制 按键1——前进 按键2——后退 按键3——加速 按键4——减速 (板子上只有四个按键) 串口控制 ‘1’——前进 ‘2’——后退 ‘3’——加速 ‘4’——减速 ‘5’——左转 ‘6’——右转 源码: #include reg52.h typedef unsigned char u8; typedef unsigned int u16; //L298N引脚定义 sbit ena = P0^0; sbit in1 = P0^1; sbit in2 = P0^2; sbit in3 = P0^3; sbit in4 = P0^4; sb
[单片机]
Keil软件仿真的串口调试技巧
引言 在单片机系统中,串口(UART,通用异步收发接口)是一个非常重要的组成部分。通常使用单片机串口通过RS232/RS485电平转换芯片与上位机连接,以进行上位机与下位机的数据交换、参数设置、组成网络以及各种外部设备的连接等。RS232/RS485串行接口总线具有成本低、简单可靠、容易使用等特点,加上其历史悠久,所以目前应用仍然非常广泛;特别对于数据量不是很大的场合,串口通信仍然是很好的选择,有着广阔的使用前景。 在单片机编程中,串口占了很重要的地位。传统方式串口程序的调试,往往是利用专用的单片机硬件仿真器。在编写好程序后,利用仿真器来设置断点,观察变量和程序的流程,逐步对程序进行调试,修正错误。使用硬件仿真器的确是很有效的
[嵌入式]
教程:只需六步,将Hal库移植到标准库
手头上正好有STM32的开发板和ESP-12E模块,想着控制个WS2812玩玩。到MCU开发的时候下载了生成的代码发现是HAL库的,无奈自己刚刚学习stm32,用的是标准库这里参考了官方的移植MSP340教程并修改出适用于STM32标准库的教程。 步骤1、下载好的代码包是这样的,需要把这两个文件夹直接复制到自己工程的文件夹里面: 步骤2、添加到自己的工程组里面,并添加路径: 步骤3、正题来了,现在开始移植工作,需要修改的文件分别如下:3.1、打开gizwits_product.h需要修改的地方如下,查看代码行数可以快速找到) 3.2、打开gizwits_product.c,需要修改的地方如下: 下面删除的
[单片机]
教程:只需六步,将<font color='red'>Hal库</font>移植到标准库
第六种串口协议实现
编写语言:C++ 编写平台:VS 运用平台:STM32和PC 非常实用的一个解析程序,自己编写的也简单。 *.h #define BUF_LEN 1024 //buf长度 #define CONF_BUF_LEN 128 //保存代解析数据 #define DATA_BUF_LEN 100 //保存解析数据 //此处为最大传输数据 #define CONF_BUF_BEST_LEN 4 //基本数据长度 /*/////////////////协议定义////////////////////// // 0x6B 0x66 长度 数据 校验(长度+数据的和) //最基本的数据 0x6B 0x66 0x
[单片机]
第六种<font color='red'>串口</font>协议实现
中断方式下进行串口通讯的正确方法
一般普遍的把串口通讯分为查询方式和中断方式。查询方式比较容易理解,各种书籍上都介绍的比较清楚。但中断方式,没有几本书讲得好的,甚至有些例程根本无法实际应用。 问题有: 1,半中断法。只使用接收中断,不使用发送中断,发送时还是依靠查询中断标志的办法;如下: ES = 0;//若是接收使用中断方式,某些单片机需要关中断。但C51不一定需要。这里只是示例。 SBUF = needsendchar; While (!TI); TI = 0; ES = 1; 这里的问题是:发送数据时需要等待数据发完才能继续其他工作,程序效率降低;发送时需要关中断,影响数据接收。 2,接收中断的处理方法错误。如下: 中断程序:
[单片机]
三菱串口PLC与MatrikonOPC实现以太网通信案例
MatrikonOPC 通过以太网连接三菱 FX 系列PLC(FX1N,FX1S,FX2N,FX3U,FX3G), 兴达易控CHNet-FX 通讯模块为PLC 提供以太网通讯接口。 配置方法如下: 1) 将 CHNet-FX 连接到三菱FX 系列PLC(FX1N,FX1S,FX2N,FX3U,FX3G); 2) 将各个 CHNet-FX 通讯模块,接入到局域网网络,与上位监控计算机连接。 2、CHNet通讯模块参数配置 如图配模块的 IP 地址:192.168.1.175,端口号:5551; 打开百度APP看高清图片 3、MatrikonOPC 参数配置 1) FX2N 系列; 1) FX3U 系列; 1)
[嵌入式]
三菱<font color='red'>串口</font>PLC与MatrikonOPC实现以太网通信案例
STC89C52RC单片机实现串口打印功能
stc的89c52rc型号开发板,晶振是12m。是因为买的最小系统就是这个频率。使用波特率位9600,将TL、TH都设置成0xfd后不管是英文还是中文的都是乱码。 12M的晶振波特率只能是2400,9600的情况下会有7.8%的误差,所以会产生乱码,而2400波特率的情况下误差是0.16%,这样就不会产生乱码了,TH1和TL1都设为F3 为什么51单片机的晶振一般使用11.0592? 用11.0592晶振的原因是51单片机的定时器导致的。用51单片机的定时器做波特率发生器时,如果用11.0592Mhz的晶振,根据公式算下来需要定时器设置的值都是整数;如果用12Mhz晶振,则波特率都是有偏差的,比如9600,用定时器取0XF
[单片机]
友善2440开发板开启串口输出调试信息
2440开发板,WINCE6.0系统,系统启动时发现串口工具没有输出任何信息,Google一下,原来是友善把它屏蔽了。 解决方法: 1、修改Debug.c文件,增加#define BSP_DEBUG_UART0,如下所示 // Function: OEMInitDebugSerial // // Initializes the debug serial port // #if defined(KITL_SERIAL_UART0) #define BSP_DEBUG_UART0 #elif defined(KITL_SERIAL_UART1) #define BSP_DEBUG_UART1 #en
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved