串口HAL库函数

2023-05-16

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

串口发送;

发送指定长度的数据;

如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。

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

串口接收;

接收指定长度的数据;

如果超时没发送完成,则不再发送,返回超时标志(HAL_TIMEOUT)。

HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);

串口中断发送,以中断方式发送指定长度的数据。

发送缓冲区指针指向要发送的数据,设置 发送长度,发送计数器初值,然后使能串口发送中断,触发串口中断。
串口中断函数处理,直到数据发送完成,而后关闭中断,不再发送数据,调用串口发送完成回调函数。

HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
串口中断接收,以中断方式接收指定长度数据。

把 接收缓冲区指针 指向 要存放接收数据的数组,设置 接收长度,接收计数器初值,然后使能串口接收中断。接收到数据时,会触发串口中断。

串口中断函数处理,直到接收到指定长度数据,而后关闭中断,不再触发接收中断,调用串口接收完成回调函数。
 

HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
串口DMA发送,以DMA方式发送指定长度的数据。

发送缓冲区指针 指向 要发送的数据,设置 发送长度,发送计数器初值,设置 DMA传输完成中断的回调函数,使能DMA控制器中断,使能DMA控制器传输,使能UART的DMA传输请求。
然后,UART便会发送数据,直到发送完成,触发DMA中断。
DMA中断处理,如果 DMA模式 是 循环模式,则 直接 调用 DMA传输完成中断的回调函数。
如果 DMA模式 是 正常模式,则 先 关闭DMA传输完成中断,不再触发DMA中断,再 调用 DMA传输完成中断的回调函数。
DMA传输完成中断的回调函数处理过程,如果 DMA模式 是 循环模式,则 直接 调用 串口发送完成回调函数。
如果 DMA模式 是 正常模式,则 先关闭 UART的DMA传输请求, 再 使能串口传输完成中断,直到传输完成,触发中断。
串口传输完成中断处理,关闭中断,调用串口发送完成回调函数
 

HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
串口DMA接收,以DMA方式接收指定长度的数据。
过程是,把 接收缓冲区指针 指向 要存放接收数据的数组,设置 接收长度,接收计数器初值,

              设置 DMA传输完成中断的回调函数,

              使能DMA控制器中断,

              使能DMA控制器传输,

              使能UART的DMA传输请求。
然后,UART接收到数据,会通过DMA把数据存到接收缓冲区,直到接收到指定长度数据,触发DMA中断。
DMA中断处理,

如果 DMA模式 是 循环模式,则 直接 调用 DMA传输完成中断的回调函数。
如果 DMA模式 是 正常模式,则   先   关闭DMA传输完成中断,不再触发DMA中断,再 调用 DMA传输完成中断的回调函数。


DMA传输完成中断的回调函数处理过程,如果 DMA模式 是 循环模式,则 直接 调用 串口接收完成回调函数。
如果 DMA模式 是 正常模式,则 先关闭 UART的DMA传输请求, 再 调用 串口接收完成回调函数。

写在最后

大家可能对回调函数中断处理函数的关系产生了疑问。其实是这样的,

单片机每完成接收一个字符,

就会进入一次中断处理函数,

而在中断处理函数中,

我们又调用了函数“void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)”,

该函数会间接调用回调函数,

也就是说回调函数是由中断处理函数间接调用的。而函数“HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)”决定了中断处理函数调用回调函数的频率,若Size为1,则每进入一次中断处理函数都会调用一次回调函数;若Size为10,则每第十次进入中断处理函数时,才会调用回调函数。方法2使用了标准库中断处理数据的思想。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

串口HAL库函数 的相关文章

随机推荐

  • VSCode安装配置C++开发环境

    真相需要去探寻 之前已经在VSCode上配置了Golang的开发环境 xff0c 使用起来还是十分舒服的 xff0c 特别是设置了镜像下载地址和掌握了go mod的使用 xff0c 小巧轻便 xff0c 舒爽流畅 最近要用到C 43 43
  • 图像处理的基本操作(灰度化,二值化)

    基本的概念 xff1a 图像的深度 xff1a 图像中像素点占得bit位数 xff0c 就是图像的深度 xff0c 并不是每个像素点分配了多少位内存空间 xff0c 就一定能够要用完 xff0c 深度仅仅标识用于真真能表示颜色的位数 xff
  • Ubuntu如何切换Python版本

    这几天一直在搞小米官方提供的ESP32 WiFi SDK xff0c 过程中遇到了很多坑 xff0c 其中包括Python版本兼容的问题 xff0c 我的Ubuntu 上安装的Python版本是Python3 xff0c 而脚本的使用的是p
  • C++面试宝典:__FILE__,__func__,__LINE__

    C语言中 xff0c FILE xff0c func xff0c LINE 常用于logout xff0c debug调试 注意 xff1a 其使用不需要定义 xff0c FILE 指示当前文件名 xff0c func 指示当前函数名 xf
  • C++面试宝典:头文件引用的顺序

    头文件引用的顺序 当我们有多个头文件的时候 xff0c 特定情况下要注意引用的顺序 如果要在文件a h中声明一个在文件b h中定义的变量 xff0c 而不引用b h 那么要在a cpp文件中引用b h文件 xff0c 并且要先引用b h x
  • c++部署yolov5模型

    C 43 43 部署yolov5模型 前言一 准备模型二 Fastdeploy准备三 调用总结 前言 不可否认 xff0c yolov5在目标检测方面大杀四方 xff0c 在 SOTA 榜上留下过万众瞩目的成绩 xff0c 但是官网代码给的
  • 【信息技术】【2004】基于计算机视觉的无人机自主避障系统中的目标跟踪研究

    本文为瑞典皇家理工学院 xff08 作者 xff1a Johan Driessen xff09 的硕士论文 xff0c 共68页 这篇硕士论文的目的是研究利用商用货架 COTS 硬件和免费 公开可用的计算机视觉库开发一个足够有效的实时自主避
  • 将寄存器地址设为宏对寄存器的值进行操作

    将寄存器地址设为宏 对寄存器的值进行操作 搞了半天才捋清楚 首先 定义一个指针变量 int p 再定义一个变量 int q 61 1 将指针p指向q xff1a p 61 amp q 通过指针对改变q的值 xff1a p 61 0x10 此
  • STM32单片机的八种IO口模式,你应该了解下

    STM32单片机的八种IO口模式 xff0c 你应该了解下 八种IO口模式 STM32有八种IO口模式 xff0c 分别是 xff1a 模拟输入 浮空输入 上拉输入 下拉输入 开漏输出 推挽输出 复用开漏输出和复用推挽输出 1 模拟输入 G
  • C语言实现文件复制的两种方法

    一 使用fread 函数和fwrite 函数 span class token macro property span class token directive keyword define span CRT SECURE NO WARN
  • C++开发模板化动态数组CArray类

    1 头文件 span class token comment Array h span span class token macro property span class token directive keyword pragma sp
  • C语言网络族函数htonl()、htons()、inet_addr()、inet_ntoa()实现

    1 htonl htons 函数实现 1 htonl 将主机数转换成无符号长整型的网络字节顺序 2 htons 将主机数转换成无符号短整型的网络字节顺序 span class token macro property span class
  • C语言实现Windows下的socket编程

    一 UDP 数据报 协议 UDP User Datagram Protocol的简称 xff0c 中文名是用户数据报协议 xff0c 是OSI Open System Interconnection xff0c 开放式系统互联 参考模型中一
  • 数据结构-用栈实现表达式求值

    参照严蔚敏 lt lt 数据结构 gt gt 第2版算法3 22 当输入 时代表表示式结束 算法实现 xff1a span class token macro property span class token directive keyw
  • 数据结构-利用二叉树求解表达式的值

    参照严蔚敏 lt lt 数据结构 gt gt 第2版算法5 12和5 13 当输入 时代表表示式结束 算法实现 span class token macro property span class token directive keywo
  • 数据结构-基于哈夫曼树的数据压缩算法

    参照严蔚敏教材 lt lt 数据结构 gt gt 第2版 描述 输入一串字符串 xff0c 根据给定的字符串中字符出现的频率建立相应哈夫曼树 xff0c 构造哈夫曼编码表 xff0c 在此基础上可以对待压缩文件进行压缩 xff08 即编码
  • VINS-Mono代码阅读笔记:feature_tracker代码阅读(转载)

    转载 xff1a https blog csdn net moyu123456789 article details 100988989 1 入口main函数 feature tracker结点的入口函数为feature tracker n
  • CMake:C/C++和Fortran混合编译

    C C 43 43 和Fortran混合编译构建 使用CMake构建C C 43 43 和Fortran混合项目 Fortran调用C C 43 43 函数 main F90 program main use iso c binding i
  • stm32 FreeRTOS中如何创建任务

    include 34 config h 34 include 34 global h 34 include 34 stdio h 34 include 34 PC h 34 include 34 FreeRTOS h 34 include
  • 串口HAL库函数

    HAL StatusTypeDef HAL UART Transmit UART HandleTypeDef huart uint8 t pData uint16 t Size uint32 t Timeout 串口发送 xff1b 发送指