【【萌新的STM32学习-27--USART异步通信配置步骤】】

萌新的STM32学习-27–USART异步通信配置步骤

USART/UART 异步通信配置步骤

1.配置串口工作参数
HAL_UART_Init()
我们会在此处调用MSP中的回调函数

2.串口底层初始化
用户定义HAL_UART_MspInit()
配置GPIO NVIC CLOCK 等

3.开启串口异步接收中断
HAL_UART_Receive_IT()

4.设置优先级,使能中断
HAL_NVIC_SetPriority()
HAL_NVIC_EnableIRQ()

5.编写中断服务函数
USARTx_IRQHandler()
UARTx_IRQHandler()

6.串口数据发送
USART_DR
HAL_UART_Transmit()

下列介绍HAL库相关函数介绍
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef * huart)
这就有点类似是我们的int caozuo( int* a )
嘿嘿 指针类型班门弄斧
就是表示输入一个指针型变量 返回一个整型
那么这里的话来说就是会返回一个HAL_StatusTypeDef 这种玩意 ( 我内心想说一句 这啥? 结构体吗? 还能这样)

我们来看异步通信的.c文件了解一下
哦呼这是一种枚举类型的东西
这个枚举类型所携带的信息量是 表示这个串口当前在干嘛 如何如何的
毕竟这里来说他是第一步 起到了 配置串口工作参数
我们来看有
HAL_OK 初始化成功
HAL_ERROR 初始化错误
HAL_BUSY 初始化忙
HAL_TIMEOUT 初始化超时
其实只有返回第一的时候初始化才标志着成功

我们现在看另一个形参的句柄 就是用的指针的类型引导
UART_HandleTypeDef *
我们一般来说只会在意的是
在这里插入图片描述
我们更加详细的介绍在书本上展示出来

我们要使用一个外设首先要对它进行初始化,所以先看串口的初始化函数
目的: 用于初始化异步模式的收发器。
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
这句话很长 它返回的是一个状态值
就是有4种状态告诉你返回的是否成功
HAL_StatusTypeDef 枚举类型的值,有 4 个,分别是 HAL_OK 表示成功,HAL_ERROR 表示错误,HAL_BUSY 表示忙碌,HAL_TIMEOUT 超时。后续遇到该结构体也是一样的。
而后一整个大的枚举类型的细分
在这里插入图片描述
1)Instance:指向 UART 寄存器基地址。实际上这个基地址 HAL 库已经定义好了,可以选择范围:USART1~ USART3、UART4、UART5。2)Init:UART 初始化结构体,用于配置通讯参数,如波特率、数据位数、停止位等等。下面我们再详细讲解这个结构体。3)pTxBuffPtr,TxXferSize,TxXferCount:分别是指向发送数据缓冲区的指针,发送数据的大小,发送数据的个数。4)pRxBuffPtr,RxXferSize,RxXferCount:分别是指向接收数据缓冲区的指针,接受数据的大小,接收数据的个数;5)hdmatx,hdmarx:配置串口发送接收数据的 DMA 具体参数。6)Lock:对资源操作增加操作锁保护功能,可选 HAL_UNLOCKED 或者 HAL_LOCKED 两个参数。如果 gState 的值等于 HAL_UART_STATE_RESET,则可认为串口未被初始化,此时,分配锁资源,并且调用 HAL_UART_MspInit 函数来对串口的 GPIO 和时钟进行初始化。
7)gState,RxState:分别是 UART 的发送状态、工作状态的结构体和 UART 接受状态的结构体。HAL_UART_StateTypeDef 是一个枚举类型,列出串口在工作过程中的状态值,有些值只适用于 gState,如 HAL_UART_STATE_BUSY。8)ErrorCode:串口错误操作信息。主要用于存放串口操作的错误信息。
一般来说只用1 2
我们现在仔细剖析一下里面的部分
UART_InitTypeDef
UART_InitTypeDef是上面这个大型的UART_HandleTypeDef中的一部分
在这里插入图片描述
在这里插入图片描述
1)BaudRate:波特率设置。一般设置为 2400、9600、19200、115200。2)WordLength:数据帧字长,可选 8 位或 9 位。这里我们设置为 8 位字长数据格式。3)StopBits:停止位设置,可选 0.5 个、1 个、1.5 个和 2 个停止位,一般我们选择 1 个停止位。4)Parity:奇偶校验控制选择,我们设定为无奇偶校验位。5)Mode:UART 模式选择,可以设置为只收模式,只发模式,或者收发模式。这里我们设置为全双工收发模式。6)HwFlowCtl:硬件流控制选择,我们设置为无硬件流控制。7)OverSampling:过采样选择,选择 8 倍过采样或者 16 过采样,一般选择 16 过采样。
我们在这里会产生一个疑问
为什么这里的操作这么复杂既有UART_HandleTypeDef
又整出一个 UART_InitTypeDef
我记得以前写的按键啊流水灯啊没有这么复杂的
对!!! 兄弟此言差矣 我们来看之前的
在这里插入图片描述
因为GPIO_InitTypeDef 本来和上面的 UART_InitTypeDef 也是一个结构体类型
因为认识不断成长的 我们现在要用的东西寄存器只会越来越多 别守着你那三瓜两枣了 往大了看是不是我完整的串口初始化 肯定包括了部分串口的设置了

2.HAL_UART_Receive_IT 函数是开启串口接收中断函数。
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart,uint8_t *pData, uint16_t Size);
作用:用于开启以中断的方式接收指定字节。数据接收在中断处理函数里面实现。
形参 1 是 UART_HandleTypeDef 结构体指针类型的串口句柄。
形参 2 是要接收的数据地址。
形参 3 是要接收的数据大小,以字节为单位。

3.HAL_UART_IRQHandler
函数是 HAL 库中断处理公共函数。
形参 1 是 UART_HandleTypeDef 结构体指针类型的串口句柄。
该函数是 HAL 库已经定义好,用户一般不能随意修改。如果用户要在中断中实现自己的逻辑代码,可以直接在函数 HAL_UART_IRQHandler 的前面或者后面添加新代码,也可以直接在HAL_UART_IRQHandler 调用的各种回调函数里面执行,这些回调都是弱定义的,方便用户直接在其它文件里面重定义。

HAL_StatusTypeDef HAL_UART_Transmit( UART_HandleTypeDef huart , uint8_tpData , uint16_t Size , uint32_t Timeout)
作用: 以阻塞的方式发送指定字节的数据
形参1: UART_Handle TypeDef 结构体类型指针变量
形参2 : 指向要发送的数据地址
形参3 : 要发送的数据大小,以字节为单位
形参4 : 设置的超时时间,以ms单位

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

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

相关文章

蠕虫病毒流量分析案例

背景 某供排水集团的网络管理员对其网络的健康状况持认可态度,表示网络运行正常,没有发现异常行为。然而,由于网络环境变得越来越复杂,仅凭借传统的网络经验已经不能全面了解网络情况。因此,我们为供排水集团安装了Ne…

Java中如何进行加锁??

笔者在上篇文章介绍了线程安全的问题,接下来本篇文章就是来讲解如何避免线程安全问题~~ 前言:创建两个线程,每个线程都实现对同一个变量count各自自增5W次,我们来看一下代码: class Counter{private int count0;publi…

微服务-OpenFeign基本使用

一、前言 二、OpenFeign基本使用 1、OpenFeign简介 OpenFeign是一种声明式、模板化的HTTP客户端,它使得调用RESTful网络服务变得简单。在Spring Cloud中使用OpenFeign,可以做到像调用本地方法一样使用HTTP请求访问远程服务,开发者无需关注…

sql server 设置字段自增

1.将字段设置为主键; 2.将“标识规范”设置为是,这里注意切勿将默认值设置为0,否则无法选择“标识规范”

3D目标检测数据集 KITTI(标签格式解析、点云转图像、点云转BEV)

本文介绍在3D目标检测中,理解和使用KITTI 数据集,包括KITTI 的基本情况、下载数据集、标签格式解析、点云转图像、点云转BEV。 目录 1、KITTI数据集中3D框可视化的效果 2、先看个视频,了解KITTI 的基本情况 3、来到KITTI官网,下…

数据结构:线性表之-单向链表(无头)

目录 什么是单向链表 顺序表和链表的区别和联系 顺序表: 链表: 链表表示(单项)和实现 1.1 链表的概念及结构 1.2单链表(无头)的实现 所用文件 将有以下功能: 链表定义 创建新链表元素 尾插 头插 尾删 头删 查找-给一个节点的…

【多线程】Thread 类 详解

Thread 类 详解 一. 创建线程1. 继承 Thread 类2. 实现 Runnable 接口3. 其他变形4. 多线程的优势-增加运行速度 二. Thread 类1. 构造方法2. 常见属性3. 启动线程-start()4. 中断线程-interrupt()5. 线程等待-join()6. 线程休眠-sleep()7. 获取当前线程引用 三. 线程的状态1. …

C# OpenCvSharp 通道分离

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp; using OpenCvSharp.Extensions;namespac…

Shell命令管理进程

Shell命令管理进程 列出进程 ps命令 top命令 管理后台进程 启动后台进程 查看后台进程 jobs和ps的区别 停止进程 Linux除了是一种多用户操作系统之外,还是一种多任务系统。多任务意味着可以同时运行多个程序。Linux 提供了相关的工具来列出运行中的进程,监视…

TSINGSEE青犀视频AI分析/边缘计算/AI算法·安全帽检测功能——多场景高效运用

安全帽检测算法主要是对人员安全和事故预防的需要。在许多工业领域和施工现场,佩戴安全帽是一种重要的安全措施,可以减少头部受伤的风险。然而,由于工地人员数量众多且繁忙,人工监控难以有效覆盖所有区域,因此旭帆科技…

LeetCode 23 合并 K 个升序链表

LeetCode 23 合并 K 个升序链表 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/merge-k-sorted-lists/description/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给你一个链表数组…

算法通关村第12关【青铜】| 字符串转换问题

1.转换成小写字母 思路:ASCll码中,a-z:97-122 A-Z:65-90 小写转大写-32,大写转小写32 class Solution {public String toLowerCase(String s) {int len s.length();StringBuilder str new StringBuilder();for(int…