STM32学习-HAL库 串口通信

学完标准库之后,本来想学习freertos的,但是看了很多教程都是移植的HAL库程序,这里再学习一些HAL库的内容,有了基础这里直接学习主要的外设。

HAL库对于串口主要有两个结构体UART_InitTypeDef和UART_HandleTypeDef,前者对串口的通信参数配置,后者是对串口整体进行配置。

typedef struct
{uint32_t BaudRate; /* 波特率 */uint32_t WordLength; /* 字长 */uint32_t StopBits; /* 停止位 */uint32_t Parity; /* 校验位 */uint32_t Mode; /* UART 模式 */uint32_t HwFlowCtl; /* 硬件流设置 */uint32_t OverSampling; /* 过采样设置 */
}UART_InitTypeDef;
typedef struct
{USART_TypeDef *Instance; /* UART 寄存器基地址 */UART_InitTypeDef Init; /* UART 通信参数 */uint8_t *pTxBuffPtr; /* 指向 UART 发送缓冲区 */uint16_t TxXferSize; /* UART 发送数据的大小 */__IO uint16_t TxXferCount; /* UART 发送数据的个数 */uint8_t *pRxBuffPtr; /* 指向 UART 接收缓冲区 */uint16_t RxXferSize; /* UART 接收数据大小 */__IO uint16_t RxXferCount; /* UART 接收数据的个数 */DMA_HandleTypeDef *hdmatx; /* UART 发送参数设置(DMA) */DMA_HandleTypeDef *hdmarx; /* UART 接收参数设置(DMA) */HAL_LockTypeDef Lock; /* 锁定对象 */__IO HAL_UART_StateTypeDef gState; /* UART 发送状态结构体 */__IO HAL_UART_StateTypeDef RxState; /* UART 接收状态结构体 */__IO uint32_t ErrorCode; /* UART 操作错误信息 */
}UART_HandleTypeDef; 

在CubeMX生成代码必须使用1.8.5的HAL库,和1.8.0有些出入,新定义了一些成员。在HAL_UART_Init()传入实例化的结构体就可完成串口的初始化。注意,这里仅仅是通信相关的配置,引脚的配置MX自动完成了,如果使用了中断,那么也自动设定。

串口的主要功能就是接收和发送。HAL_UART_Transmit和HAL_UART_Receive都是阻塞方式发送和接收,执行完之后就不再执行,还阻碍了其他代码的运行。一般使用中断方式进行收发,涉及的比较复杂,HAL_UART_Receive_IT()和HAL_UART_Transmit_IT(),这里给出接收的图解。

发送和接收类似,不再赘述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34654.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入解析Java中的Lambda表达式

深入解析Java中的Lambda表达式 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! Lambda表达式是Java 8引入的一个重要特性,它简化了代码编写&#x…

声网sdk-实现纯语音互动

声网官网地址: https://doc.shengwang.cn/doc/rtc/javascript/basic-features/audio-quick-start react实现一对多实时对讲如下: import React, { useState, useEffect, useCallback, useRef } from "react"; import AgoraRTC from "a…

构建高性能Java应用的秘诀

构建高性能Java应用的秘诀 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在当今的软件开发领域,构建高性能的Java应用是许多开发者和团队所追求的…

知识管理的效率软件从来都是狗屎

我个人接触过各种脑图,各种头脑风暴的软件。花一堆天花烂坠的知识爆炸图,头脑风暴图,最后可能看不上一两次,除了显摆,我个人觉得对我对体系化的深思和理解没有任何效率可言。矫揉造作,懂的自然懂&#xff0…

白帽子的海外第一单,750刀

国际惯例,给兄弟们看图 这是我们师傅挖国外SRC的部分赏金截图 就问你!挖国外漏洞赚美金香不香! 现在国内SRC越来越卷了,越来越多的白帽子开始挖海外漏洞赚美金。海外SRC真的比国内赏金高很多,不说高危漏洞&#xff0…

1388:家谱(gen)

【解题思路】 设map<string, string> fa&#xff0c;fa[x]表示名字为x的人的父亲的名字。模仿并查集中的查询操作&#xff0c;写出find函数&#xff0c;求x的祖先。如果输入的名字是父亲&#xff0c;且第一次出现。将该名字保存在father变量中&#xff0c;那么类似并查集…

MoneyPrinterPlus:AI自动短视频生成工具-腾讯云配置详解

MoneyPrinterPlus可以使用大模型自动生成短视频&#xff0c;其中的语音合成和语音识别部分需要借助于一些第三发云厂商的语音服务。 很多小伙伴可能不知道应该如何配置&#xff0c;这里给大家提供一个详细的腾讯云语音服务的配置教程。 项目已开源&#xff0c;代码地址&#…

计算几何系列——XCPC中计算几何一些题型杂谈(上)

本系列文章力求以简洁易懂的文字介绍计算几何中的基本概念&#xff0c;使读者快速入门&#xff0c;故不追求难度和深度&#xff0c;仅起到抛砖引玉的作用。 在XCPC中有一种题叫计算几何&#xff0c;这类题在大多数时候都作为一类金牌题甚至防AK题的难度出现&#xff0c;但是在…

Kotlin设计模式:代理模式详解

Kotlin设计模式&#xff1a;代理模式详解 在软件开发中&#xff0c;设计模式是解决常见问题的一种优雅方法。本文将介绍Kotlin中的代理模式&#xff08;Proxy Pattern&#xff09;&#xff0c;其应用场景&#xff0c;以及如何通过实例代码实现这一模式。 代理模式的目的 代理…

坚持使用WAF的10个理由

WAF&#xff08;Web应用程序防火墙&#xff09;无疑是过去几十年里应用最广泛、最成熟的网络安全产品之一&#xff0c;大部分拥有Web应用程序的组织都会部署应用WAF&#xff0c;以保护数据和资产避免被非法闯入。然而&#xff0c;随着DevOps敏捷应用开发时代的到来&#xff0c;…

计算机视觉背后的技术:原理与实践

计算机视觉是一门让计算机能够"看"的科学&#xff0c;它的目标是使计算机能够理解并解析图像和视频中的信息&#xff0c;就像人类视觉系统所做的那样。在过去的几十年里&#xff0c;随着深度学习技术的飞速发展&#xff0c;计算机视觉领域也取得了巨大的突破&#xf…

DEtection TRansformer (DETR)与YOLO在目标检测方面的比较

1. 概述 计算机视觉中的目标检测是一个复杂而有趣的领域&#xff0c;它涉及到让计算机能够识别图像中的物体&#xff0c;并确定它们的位置。下面是DETR和YOLO这两种目标检测方法简单比较&#xff1a; 1.1 YOLO YOLO是一种非常流行的目标检测算法&#xff0c;它的核心思想是将…

一种502 bad gateway nginx/1.18.0的解决办法

背景:上线的服务突然挂掉了 step1&#xff0c;去后端日志查看&#xff0c;发现并无异常&#xff0c;就是请求无法被接收 step2&#xff0c;查看了nginx的错误日志&#xff0c;发现该文件为空 step3&#xff0c;查看了niginx的运行日志&#xff0c;发现了以下问题 [error] 38#…

QT拖放事件之二:四大拖放事件中的ignore()所带来的影响

1、四大拖放事件中的忽略事件带来的影响 1)dragEnterEvent中使用 ignore() /*[1.] 拖放进入事件:当拖着东西刚进入目标窗口时,就会产生此事件[2.] 如果在dragEnterEvent中启用了event->ignore(),那么拖着东西到目标窗口时,此时在目标窗口的拖放图标将变为禁用状态,同…

Python为JSON解析和生成功能库之rapidjson使用详解

概要 在现代应用程序开发中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,被广泛应用于Web开发、数据传输和配置文件等场景。Python自带的json模块已经非常强大,但在处理大规模数据时,其性能可能无法满足需求。为了提高JSON处理效率,Python的rapidjs…

如何打造高吞吐,低延迟的项目

在 Java 开发中&#xff0c;要打造高吞吐、低延迟的项目&#xff0c;可以考虑以下几个方面&#xff1a; 算法和数据结构优化 选择合适的数据结构&#xff0c;如哈希表、二叉搜索树、布隆过滤器等&#xff0c;以提高数据访问和操作的效率。优化算法&#xff0c;避免不必要的计算…

猫头虎分享:K8S优雅关机怎么实现?配置一下server.shutdown.graceful?

&#x1f680; 猫头虎分享&#xff1a;K8S优雅关机怎么实现&#xff1f;配置一下server.shutdown.graceful? 摘要 在云原生时代&#xff0c;Kubernetes&#xff08;K8S&#xff09;已经成为管理容器化应用的标准。然而&#xff0c;当我们需要优雅地关闭K8S中的Pod时&#xf…

yolov5模型pt转engine

目录 1. 环境准备1.1 安装tensorrt1.1.1 pip安装1.1.2 压缩包安装 2. pt转engine3. 转换过程中遇到的问题 1. 环境准备 1.1 安装tensorrt 1.1.1 pip安装 pip install tensorrt 1.1.2 压缩包安装 很可能会失败&#xff0c;最保险的方法是下载tensorRT的压缩包&#xff0c;比…

Pyecharts入门

数据可视化 Pyecharts简介 Apache ECharts 是一个由百度开源的数据可视化&#xff0c;凭借着良好的交互性&#xff0c;精巧的图表设计&#xff0c;得到了众多开发者的认可。而 Python 是一门富有表达力的语言&#xff0c;很适合用于数据处理。当数据分析遇上数据可视化时&#…

冶金工业5G智能工厂工业物联数字孪生平台,推进制造业数字化转型

冶金工业5G智能工厂工业物联数字孪生平台&#xff0c;推进制造业数字化转型。传统生产方式难以满足现代冶金工业的发展需求&#xff0c;数字化转型成为必然趋势。通过引入5G、工业物联网和数字孪生等先进技术&#xff0c;冶金工业可以实现生产过程智能化、高效化和绿色化&#…