STM32 USART配置库函数

news2024/11/28 11:30:31

单片机学习!

目录

一、USART配置函数

1.1 USART_DeInit函数

1.2 USART_Init函数

1.3 USART_StructInit函数

二、配置同步时钟输出函数

2.1 USART_ClockInit函数

2.2 USART_ClockStructInit函数

三、USART的外设与中断函数

3.1 USART_Cmd函数

3.2 USART_ITConfig函数

四、USART的DMA触发函数

4.1 USART_DMACmd函数

五、发送/接收数据函数

5.1 USART_SendData函数

5.2 USART_ReceiveData函数

六、标志位相关函数

6.1 USART_GetFlagStatus函数

6.2 USART_ClearFlag函数

6.3 USART_GetITStatus函数

6.4 USART_ClearITPendingBit函数


一、USART配置函数

1.1 USART_DeInit函数

void USART_DeInit(USART_TypeDef* USARTx);

        USART_DeInit函数将外设 USARTx 寄存器重设为缺省值。

1.2 USART_Init函数

void USART_Init(USART_TypeDef* USARTx, USART_InitTypeDef* USART_InitStruct);

        USART_Init函数根据 USART_InitStruct 中指定的参数初始化外设 USARTx 寄存器。


 

USART_BaudRate

该成员设置了 USART 传输的波特率,波特率可以由以下公式计算:

IntegerDivider = ((APBClock) / (16 * (USART_InitStruct->USART_BaudRate)))

FractionalDivider = ((IntegerDivider - ((u32) IntegerDivider)) * 16) + 0.5

USART_WordLength

USART_WordLength 提示了在一个帧中传输或者接收到的数据位数。

USART_StopBits

USART_StopBits 定义了发送的停止位数目。

USART_Parity

        USART_Parity 定义了奇偶模式。

        注意:奇偶校验一旦使能,在发送数据的 MSB 位插入经计算的奇偶位(字长 9 位时的第 9 位,字长 8 位时的第 8 位)。

USART_HardwareFlowControl

        USART_HardwareFlowControl 指定了硬件流控制模式使能还是失能。

USART_Mode

        USART_Mode 指定了使能或者失能发送和接收模式。

USART_CLOCK

        USART_CLOCK 提示了 USART 时钟使能还是失能。

USART_CPOL

        USART_CPOL 指定了下 SLCK 引脚上时钟输出的极性。

USART_CPHA

        USART_CPHA 指定了下 SLCK 引脚上时钟输出的相位,和 CPOL 位一起配合来产生用户希望的时钟/数据的采样关系。

USART_LastBit

        USART_LastBit 来控制是否在同步模式下,在 SCLK 引脚上输出最后发送的那个数据字 (MSB)对应的时钟脉冲。

1.3 USART_StructInit函数

void USART_StructInit(USART_InitTypeDef* USART_InitStruct);

        USART_StructInit函数USART_InitStruct 中的每一个参数按缺省值填入。

USART_InitStruct各个成员的缺省值:

二、配置同步时钟输出函数

        以下两个函数用来配置时钟输出的,包括时钟是不是要输出,时钟的极性相位等参数。因为参数也比较多,所以也是用结构体这种方式来配置的。需要时钟输出时可以考虑使用这两个函数。

2.1 USART_ClockInit函数

void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct);

源代码:

/**
  * @brief  Initializes the USARTx peripheral Clock according to the 
  *          specified parameters in the USART_ClockInitStruct .
  * @param  USARTx: where x can be 1, 2, 3 to select the USART peripheral.
  * @param  USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
  *         structure that contains the configuration information for the specified 
  *         USART peripheral.  
  * @note The Smart Card and Synchronous modes are not available for UART4 and UART5.
  * @retval None
  */
void USART_ClockInit(USART_TypeDef* USARTx, USART_ClockInitTypeDef* USART_ClockInitStruct)
{
  uint32_t tmpreg = 0x00;
  /* Check the parameters */
  assert_param(IS_USART_123_PERIPH(USARTx));
  assert_param(IS_USART_CLOCK(USART_ClockInitStruct->USART_Clock));
  assert_param(IS_USART_CPOL(USART_ClockInitStruct->USART_CPOL));
  assert_param(IS_USART_CPHA(USART_ClockInitStruct->USART_CPHA));
  assert_param(IS_USART_LASTBIT(USART_ClockInitStruct->USART_LastBit));
  
/*---------------------------- USART CR2 Configuration -----------------------*/
  tmpreg = USARTx->CR2;
  /* Clear CLKEN, CPOL, CPHA and LBCL bits */
  tmpreg &= CR2_CLOCK_CLEAR_Mask;
  /* Configure the USART Clock, CPOL, CPHA and LastBit ------------*/
  /* Set CLKEN bit according to USART_Clock value */
  /* Set CPOL bit according to USART_CPOL value */
  /* Set CPHA bit according to USART_CPHA value */
  /* Set LBCL bit according to USART_LastBit value */
  tmpreg |= (uint32_t)USART_ClockInitStruct->USART_Clock | USART_ClockInitStruct->USART_CPOL | 
                 USART_ClockInitStruct->USART_CPHA | USART_ClockInitStruct->USART_LastBit;
  /* Write to USART CR2 */
  USARTx->CR2 = (uint16_t)tmpreg;
}

2.2 USART_ClockStructInit函数

void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct);

源代码:

/**
  * @brief  Fills each USART_ClockInitStruct member with its default value.
  * @param  USART_ClockInitStruct: pointer to a USART_ClockInitTypeDef
  *         structure which will be initialized.
  * @retval None
  */
void USART_ClockStructInit(USART_ClockInitTypeDef* USART_ClockInitStruct)
{
  /* USART_ClockInitStruct members default value */
  USART_ClockInitStruct->USART_Clock = USART_Clock_Disable;
  USART_ClockInitStruct->USART_CPOL = USART_CPOL_Low;
  USART_ClockInitStruct->USART_CPHA = USART_CPHA_1Edge;
  USART_ClockInitStruct->USART_LastBit = USART_LastBit_Disable;
}

三、USART的外设与中断函数

3.1 USART_Cmd函数

void USART_Cmd(USART_TypeDef* USARTx, FunctionalState NewState);

3.2 USART_ITConfig函数

void USART_ITConfig(USART_TypeDef* USARTx, uint16_t USART_IT, FunctionalState NewState);

USART_IT

输入参数 USART_IT 使能或者失能 USART 的中断。

四、USART的DMA触发函数

4.1 USART_DMACmd函数

void USART_DMACmd(USART_TypeDef* USARTx, uint16_t USART_DMAReq, FunctionalState NewState);

        USART_DMACmd函数可以开启USART到DMA的触发通道,需要使用DMA时要用到这个函数。

USART_DMAreq

USART_DMAreq选择待使能或者失能的DMA请求。

五、发送/接收数据函数

SendData发送数据;ReceiveData接收数据,以下两个函数在接收和发送数据时会用到。

  • SendData就是写DR寄存器;
  • ReceiveData就是读DR寄存器。

        DR寄存器内部有4个寄存器,控制发送与接收,执行细节可以参考上一篇博文。这里程序上函数使用就非常简单了,写DR就是发送,读DR就是接收。至于怎么产生波形,怎么判断输入,软件一概不管。

5.1 USART_SendData函数

void USART_SendData(USART_TypeDef* USARTx, uint16_t Data);

5.2 USART_ReceiveData函数

uint16_t USART_ReceiveData(USART_TypeDef* USARTx);

六、标志位相关函数

6.1 USART_GetFlagStatus函数

FlagStatus USART_GetFlagStatus(USART_TypeDef* USARTx, uint16_t USART_FLAG);

USART_FLAG

下表给出了所有可以被函数USART_ GetFlagStatus检查的标志位列表

6.2 USART_ClearFlag函数

void USART_ClearFlag(USART_TypeDef* USARTx, uint16_t USART_FLAG);

6.3 USART_GetITStatus函数

ITStatus USART_GetITStatus(USART_TypeDef* USARTx, uint16_t USART_IT);

USART_IT

下表给出了所有可以被函数USART_ GetITStatus检查的中断标志位列表

6.4 USART_ClearITPendingBit函数

void USART_ClearITPendingBit(USART_TypeDef* USARTx, uint16_t USART_IT);

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

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

相关文章

通俗理解人工智能、机器学习和深度学习的关系

最近几年人工智能成为极其热门的概念和话题,可以说彻底出圈了。但人工智能的概念在1955年就提出来了,可以说非常古老。我在上小学的时候《科学》课本上就有人工智能的概念介绍,至今还有印象,但那些年AI正处于“寒冬”,…

2024数学建模亚太赛【C题】赛题详细解析

目录 📑一、竞赛时间 🗝️二、奖项设置 ✏️三、选题思路 🔍阶段一:【数据预处理与探索性分析】 1.【数据清洗与预处理】 2.【探索性数据分析(EDA)】 🔍阶段二:【时间序列建模…

数据结构 【堆实现】

上文提到堆是一种特殊的二叉树,其中它的父结点均不大于或者不小于其子结点的值。堆总是一棵完全二叉树。其中,堆的父节点全部不小于它的子结点时称为大堆,堆的父结点全部不大于其子结点的堆称为小堆。 堆可以由两种结构来实现,分别…

【AI绘画】Midjourney进阶:色调详解(下)

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: AI绘画 | Midjourney 文章目录 💯前言💯Midjourney中的色彩控制为什么要控制色彩?为什么要在Midjourney中控制色彩? 💯色调纯色调灰色调暗色调 &#x1f4af…

[代码随想录Day24打卡] 93.复原IP地址 78.子集 90.子集II

93.复原IP地址 一个合法的IP地址是什么样的: 有3个’.分割得到4个数,每个数第一个数不能是0,不能含有非法字符,不能大于255。 这个是否属于合法IP相当于一个分割问题,把一串字符串分割成4部分,分别判断每…

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法,但并没有太多关注,直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》,为了同时整合两类数据&#xf…

贴代码PasteForm框架之框架核心帮助类PasteFormHelper说明

简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…

杂7杂8学一点之ZC序列

重要的放在前面,优秀文章链接:5GNR漫谈13:Zadoff –Chu(ZC)序列性质 目录 1. ZC序列 1.1 ZC序列的表达式 1.2 ZC序列的特点 2. PRACH中的ZC序列 2.1 为什么要有逻辑根序列与物理根序列的概念 1. ZC序列 ZC序列&…

matlab代码--卷积神经网络的手写数字识别

1.cnn介绍 卷积神经网络(Convolutional Neural Network, CNN)是一种深度学习的算法,在图像和视频识别、图像分类、自然语言处理等领域有着广泛的应用。CNN的基本结构包括输入层、卷积层、池化层(Pooling Layer)、全连…

【Linux】—简单实现一个shell(myshell)

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦! 本文由:残念ing原创CSDN首发,如需要转载请通知 个人主页:残念ing-CSDN博客&…

基于 Flask 和 RabbitMQ 构建高效消息队列系统:从数据生成到消费

简介 在构建 Web 应用时,处理和传输大量数据是不可避免的。对于需要高效、可扩展的消息处理和异步任务执行的场景,使用 RabbitMQ(一种流行的消息队列中间件)与 Flask(一个轻量级的 Python Web 框架)结合&a…

Linux:文件管理(一)——文件描述符fd

目录 一、文件基础认识 二、C语言操作文件的接口 1.> 和 >> 2.理解“当前路径” 三、相关系统调用 1.open 2.文件描述符 3.一切皆文件 4.再次理解重定向 一、文件基础认识 文件 内容 属性。换句话说,如果在电脑上新建了一个空白文档&#xff0…

机器学习模型——线性回归

文章目录 前言1.基础概念2.代价函数3.单变量线性回归3.1加载数据3.2初始化超参数3.3梯度下降算法3.3.1初次梯度下降3.3.2 多次梯度下降3.3.3结果可视化 前言 随着互联网数据不断累积,硬件不断升级迭代,在这个信息爆炸的时代,机器学习已被应用…

如何安全高效地打开和管理动态链接库(DLL)?系统提示dll丢失问题的多种有效修复指南

动态链接库(DLL)文件是Windows操作系统中非常重要的一部分,它们包含了程序运行所需的代码和数据。当系统提示DLL文件丢失时,可能会导致应用程序无法正常运行。以下是一些安全高效地打开和管理DLL文件以及修复DLL丢失问题的方法&am…

数据结构(初阶7)---七大排序法(堆排序,快速排序,归并排序,希尔排序,冒泡排序,选择排序,插入排序)(详解)

排序 1.插入排序2.希尔排序3.冒泡排序4.选择排序(双头排序优化版)5.堆排序6.快速排序1). 双指针法2).前后指针法3).非递归法 7.归并排序1).递归版本(递归的回退就是归并)2).非递归版本(迭代版本) 计算机执行的最多的操作之一就有排序,排序是一项极其重要的技能 接下…

【JavaEE初阶 — 网络原理】初识网络原理

目录 1. 网络发展史 1.1 独立模式 1.2 网络互连 1.2.1 网络互联的背景 1.2.2 网络互联的定义 1.3 局域网LAN 1.4 广域网WAN 2. 网络通信基础 2.1 IP地址 2.2 端口号 2.3 认识协议 2.4 五元组 2.5 协议分层 2.5.1 分…

【C++习题】15.滑动窗口_串联所有单词的子串

文章目录 题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;图解 题目链接&#xff1a; 30. 串联所有单词的子串 题目描述&#xff1a; 解法 滑动窗口哈希表 这题和第14题不同的是&#xff1a; 哈希表不同&#xff1a;hash<string,int>left与right指…

【学术讲座】视觉计算中的深度学习方法 AIGC图像视频生成模型的推理加速

视觉计算中的深度学习方法 发展历程 backbone 强化学习、LLM等&#xff1a;有监督 && 无监督的结合 目标检测 图像分割 网络结构搜索 搜索方法 1&#xff1a;强化学习 2&#xff1a;强化学习 3&#xff1a;梯度算法 结构选择的作用 1&#xff1a;开放环境感知网络…

【VLANPWN】一款针对VLAN的安全研究和渗透测试工具

关于VLANPWN VLANPWN是一款针对VLAN的安全研究和渗透测试工具&#xff0c;该工具可以帮助广大研究人员通过对VLAN执行渗透测试&#xff0c;来研究和分析目标VLAN的安全状况。该工具专为红队研究人员和安全学习爱好者设计&#xff0c;旨在训练网络工程师提升网络的安全性能&…

机器学习之数据预处理理论——基于表格数据分析

一、机器学习中数据预处理的作用与目的 对于机器学习而言&#xff0c;数据预处理是指在数据挖掘、数据分析、模型构建训练等过程中&#xff0c;对原始数据进行一系列的处理&#xff0c;以提高数据质量、减少噪声、提取有用信息等。数据预处理的主要目的是将原始数据转换为有用的…