基于STM32的HAL库学习(2)UART串口学习

发布者:Qilin520最新更新时间:2020-07-19 来源: eefocus关键字:STM32  HAL库  UART串口 手机看文章 扫描二维码
随时随地手机看文章

1、串口的模式有3种,一是查询模式,二是中断模式,三是DMA模式

HAL_UART_Transmit();串口轮询模式发送,使用超时管理机制


HAL_UART_Receive();串口轮询模式接收,使用超时管理机制


HAL_UART_Transmit_IT();串口中断模式发送


HAL_UART_Receive_IT();串口中断模式接收


HAL_UART_Transmit_DMA();串口DMA模式发送


HAL_UART_Transmit_DMA();串口DMA模式接收


2、阻塞传输是调用这个函数并在等待时间内一直等待操作完成。

HAL_UART_Transmit


HAL_UART_Receive


查询的方式一般少用,这里不做过多介绍。


3、串口中断

串口中断函数

HAL_UART_TxHalfCpltCallback();一半数据发送完成时调用


HAL_UART_TxCpltCallback();数据完全发送完成后调用


HAL_UART_RxHalfCpltCallback();一半数据接收完成时调用


HAL_UART_RxCpltCallback();数据完全接受完成后调用


HAL_UART_ErrorCallback();传输出现错误时调用


定义相关变量

uint8_t RxBuffer;//接收中断缓存

uint8_t Uart_RxBuffer[256];//接收中断

uint8_t Uart_RX_Cnt = 0;//接收中断计数

uint8_t AlmStr[]="Uart1数据溢出(大于256)!rn";//UART1 错误信息输出


在主循环外开启中断

HAL_UART_Receive_IT(&huart1,(uint8_t*)&RxBuffer,1);//开启接收中断


串口接收回调函数

/* USER CODE BEGIN 4 */


void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

  /* Prevent unused argument(s) compilation warning */

  UNUSED(huart);

  /* NOTE: This function Should not be modified, when the callback is needed,

           the HAL_UART_TxCpltCallback could be implemented in the user file

   */

 

if(Uart_RX_Cnt >= 255)  //溢出判断

{

Uart_RX_Cnt = 0;

memset(Uart_RxBuffer,0x00,sizeof(Uart_RxBuffer));//清空缓存,记得#include "string.h"

HAL_UART_Transmit(&huart1, (uint8_t *)&AlmStr, sizeof(AlmStr),0xFFFF);

}

else

{

Uart_RxBuffer[Uart_RX_Cnt++] = RxBuffer;   //接收数据转存

if((Uart_RxBuffer[Uart_RX_Cnt-1] == 0x0A)&&(Uart_RxBuffer[Uart_RX_Cnt-2] == 0x0D)) //判断结束位

{

HAL_UART_Transmit(&huart1, (uint8_t *)&Uart_RxBuffer, Uart_RX_Cnt,0xFFFF); //将收到的信息发送出去

Uart_RX_Cnt = 0;

memset(Uart_RxBuffer,0x00,sizeof(Uart_RxBuffer)); //清空数组

}

}

HAL_UART_Receive_IT(&huart1, (uint8_t *)&RxBuffer, 1);   //再开启接收中断

}


/* USER CODE END 4 */


到这里中断方式的串口接收完成。

关键字:STM32  HAL库  UART串口 引用地址:基于STM32的HAL库学习(2)UART串口学习

上一篇:基于STM32CubeMX&HAL库写代码之串口
下一篇:STM32CubeMX:UART操作

推荐阅读最新更新时间:2024-11-16 21:31

STM32 407 iar fpu 加入浮点
之前想玩一下FPU 可惜那个DSP库看不懂 也找不到教程 我研究了2个晚上总算会用那个FFT了.... 我的环境是 IAR 6.2 板子是STM32F4DISCOVERY 第一 首先下载官方的 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0 没有的同学请自己去官网下一个 DSP库在 STM32F4xx_DSP_StdPeriph_Lib_V1.0.0LibrariesCMSIS 然后我们使用IAR建立工作空间 这个教程到处都有 我就不说了 在编译器里面加入 $PROJ_DIR$......LibrariesCMSISDSP_LibSource ARM_MATH_CM4 ARM_MATH_MATRIX_CH
[单片机]
STM32 Bootloader异常复位如何解决
问题描述 客户反馈通过PC软件Flashloader不能够跟STM32 MCU自带Bootloader连接。并且系统运行一段时间后异常复位。 系统分析 检测原理图 延续之前的项目,进行的一些软硬件简单修改。 上电、放电的时序也是正常。 BOOT0 拉高,BOOT1 拉低, 测量工作时的电压正常(2.5v)。 检测所有相关的硬件软件都是没有问题,他们的BOOT脚,以及之前的PDR_ON是通过外围的FPGA单元控制,我们一开始怀疑这些上电时序,以及PDR逻辑出错。尝试让他们全部断开逻辑,测试整个上电,掉电过程都是没有什么问题。 测量波形 检测他们的串口工具 能正常在PC上发现他们的串口工具,数据的发送正常。 但是串口的到PCB
[单片机]
<font color='red'>STM32</font> Bootloader异常复位如何解决
HAL库教程1:STM32Cube的介绍
  使用STM32HAL库已经有了一段时间,觉得相比于标准库,好用了不少。加上STM32CubeMX图形化配置工具的加持,个人认为可以极大提升开发效率。其实关于HAL库的教程已经很多了,关于STM32CubeMX的使用教程也很多,我并不比这些写教程的大牛厉害,只是记录一些个人的看法。还有,随着版本的变化,STM32CubeMX的界面变化也比较大,我基于5.0.1版本重新按步骤截图记录操作。另外,我的思路是通过几个简单的小项目来讲述知识,所以很多资源没有用上,希望可以对你有所帮助。 STM32Cube简介   STM32Cube是意法半导体公司的一个原创项目,它的目的是减少开发工作、时间和成本,让开发人员更加轻松。它包含STM3
[单片机]
<font color='red'>HAL库</font>教程1:STM32Cube的介绍
STM32 USB 枚举分析
芯片:STM32F407VE 编译器:KEIL5 STM32 USB枚举 用到比较重要的寄存器:OTG_HS 主机端口控制和状态寄存器 (OTG_HS_HPRT) 系统复位 等待USB连接,延时100ms 主机对USB设备复位,主机检测到端口使能位置位,与设备建立连接 主机再次对USB设备复位,复位结束,开始枚举过程。 主机拥有8个通道,其中IN占用0通道,OUT占用1通道。打开IN和OUT管道 获取设备描述符,只获取8个字节,为了得到通道0的最大包长度。将状态机调整到HOST_CTRL_XFER。同时备份当前全局状态,便于跳转到HOST_CTRL_XFER恢复状态。 USBH_Get_DevDesc(pde
[单片机]
STM32用中断控制LED小灯的亮灭
STM32f103最小系统板 PC13 接一个LED小灯 首先配置LED灯 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //初始化PC13为推挽式输出 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_
[单片机]
STM32入门学习笔记之外置FLASH读写实验(上)
15.1 FLASH Flash,全名叫做Flash EEPROM Memory,即平时所说的“闪存”,它结合了ROM和RAM的长处,不仅可以反复擦除,还可以快速读取数据,STM32运行的程序其实就是存放在Flash当中,但是由于STM32的Flash一般1M左右,只能存储程序大小的数据,所以往往需要外扩Flash来存储数据,比如LCD界面当中的汉字字库,以及文件系统中读取的文件内容。 但是一般Flash的擦除次数有限制,STM32F1系列最新的文档指出,片内的FLASH擦写次数大约在1W次左右,所以一般Flash用于擦除次数不多,但是数据量很大的场合。 这个Flash读写实验我们用到的芯片是W25Q128,这是一款采用S
[单片机]
<font color='red'>STM32</font>入门学习笔记之外置FLASH读写实验(上)
stm32阶段总结录
一、C语言之预处理 预处理有三种:宏定义、条件编译、文件包含。 1.1、宏定义 #define EXT extern // 用EXT代替extern关键字 1.2、文件包含 #include “stm32f10x.h” 1.3、条件编译 防止同一个头文件被不同的文件多次包含,编译时所有文件编译成一个可执行文件有大量命名冲突。 #ifndef 标识符 //if not defined #define 标识符 代码段落 #endif #ifndef _public_h #define _public_h #include public.h #endif #空指令,无任何效果 #include包含一个源代码文
[单片机]
<font color='red'>stm32</font>阶段总结录
STM32高级定时器那些事
首先说下我使用飞、高级定时器的一些坑爹经历,由于开始高级定时器使用不当,造成有如下问题: 1、PWM输出占空比反向(这个也还能接受点) 2、程序烧进去了就不能烧第二次了,下载时候提示如下图(这个够坑爹的了) 错误而提示 仔细看提示信息说是CPU一直在复位,解决的方法是通过出厂IAP用串口擦除芯片程序。需要准备的工作是:USB转串口工具、把BOOT0拉高、使用ISPMCU擦除芯片。 3、从外部flash读取出来的图片不能够正常显示,屏幕显示的是黑色,后来发现是因为SPI1的I/O与TIM8的N通道冲突了。(由此我下决心要找到问题的原因) 通过一番搜寻和查看相关资料,发现造成上述原因是因为我对高级定时器初始化的时候漏掉了部分成员
[单片机]
<font color='red'>STM32</font>高级定时器那些事
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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