当前位置: 首页 > news >正文

STM32串口工作原理

        STM32的串口是相当丰富的,功能也很强劲。最多可提供5 路串口,有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIRENDEC 规范(仅串口3支持)、具有DMA等。

        串口最基本的设置,就是波特率的设置。STM32的串口使用起来还是蛮简单的,只要你开启了串口时钟,并设置相应IO口的模式,然后配置一下波特率,数据位长度,奇偶校验位等信息,就可以使用了。下面,我们就简单介绍下这几个与串口基本配置直接相关的寄存器。

1,串口时钟使能。串口作为STM32的一个外设,其时钟由外设始终使能寄存器控制,这里我们使用的串口1是在APB2ENR寄存器的第14位。除了串口1的时钟使能在APB2ENR寄存器,其他串口的时钟使能位都在APB1ENR。

2,串口复位。当外设出现异常的时候可以通过复位寄存器里面的对应位设置,实现该外设的复位,然后重新配置这个外设达到让其重新工作的目的。一般在系统刚开始配置外设的时候,都会先
执行复位该外设的操作。串口1的复位是通过配置APB2RSTR 寄存器的第14位来实现的。

 3,串口波特率设置。每个串口都有一个自己独立的波特率寄存器USART BRR,通过设置该寄存器达到配置不同波特率的目的。该寄存器的各位描述如下:

 

4.串口控制。STM32 的每个串口都有3个控制寄存器USART CR1~3 ,串口的很多配置 都是通过这 3个寄存器来设置的。

5,数据发送与接收。STM32的发送与接收是通过数据寄存器USART _DR来实现的,这是一个双寄存器,包含了TDR和RDR当向该寄存器写数据的时候,串口就会自动发送,当收到数据的时
候,也是存在该寄存器内。

可以看出,虽然是一个32 位寄存器,但是只用了低9位(DR[8:0]),其他都是保留。 DR[8:0]为串口数据,包含了发送或接收的数据。由于它是由两个寄存器组成的,一个给发送用(TDR),一个给接收用(RDR),该寄存器兼具读和写的功能。TDR寄存器提供了内部总线和输出移位寄存器之间的并行接口。RDR寄存器提供了输入移位寄存器和内部总线之间的并行接口。

当使能校验位(USART CR1 种PCE 位被置位)进行发送时,写到MSB的值(根据数据的长度不同,MSB是第7位或者第8位)会被后来的校验位该取代。当使能校验位进行接收时,读到的MSB位是接收到的校验位。

6. 串口的状态可以通过状态寄存器 USART SR 读取串口状态。

这里我们关注一下两个位,第5、6 位RXNE 和TC。
RXNE(读数据寄存器非空),当该位被置1的时候,就是提示已经有数据被接收到了,并且可以读出来了。这时候我们要做的就是尽快去读取USART DR,通过读USART DR可以将该位清零,也可以向该位写0,直接清除。
TC(发送完成),当该位被职位的时候,表示USARTDR内的数据已经被发送完成了。如果设置了这个位的中断,则会产生中断。该位也有两种清零方式:1:读USART SR,写USARTDR。2:直接向该位写0。

void uart_init(u32 pclk2,u32 bound)
{
float temp;
u16 mantissar
u16 fraction;
temp=(float)(pclk2*1000000)/(bound*16);//得到USARTDIV
mantissa=temp;//得到整数部分
fraction=(temp-mantissa)*16://得到小数部分
mantissa<<=4;
mantissa+=fraction;
RCC->APB2ENRI=1<<2;//使能PORTA口时钟
RCC->APB2ENRI=1<<14;//使能串口时钟
GPIOA->CRH&=0XFFFFF00F;
GPIOA->CRH|=0X000008B0;//IO状态设置
RCC->APB2RSTRI=1<<14;//复位串口1
RCC->APB2RSTR&=~(1<<14)://停止复位
//波特率设置
USART1->BRR=mantissa;//波特率设置
USART1->CR1|=0X200C;//1位停止,无校验位,USART1->CR1|=1<<8;//PE中断使能
USART1->CR11=1<<5;//接收缓冲区非空中断使能
MY_NVIC_Init(3,3,USART1 IRQChannel,2);//组2,最低优先级
}

初始化串口硬件设备,启用中断:

配置步骤:

(1)打开GPI0和USART1的时钟
(2)设置USART1两个管脚GPI0模式
(3)配置USART1数据格式、波特率等参数
(4)使能USART1接收中断功能
(5)最后使能USART1功能

相关文章:

STM32串口工作原理

STM32的串口是相当丰富的&#xff0c;功能也很强劲。最多可提供5 路串口&#xff0c;有分数波特率发生器、支持单线光通信和半双工单线通讯、支持LIN、智能卡协议和IrDA SIRENDEC 规范(仅串口3支持)、具有DMA等。 串口最基本的设置&#xff0c;就是波特率的设置。STM32的串口使…...

STM32杂交版(HAL库、音乐盒、闹钟、点阵屏、温湿度)

一、设计描述 本设计精心构建了一个以STM32MP157A高性能单片机为核心控制单元的综合性嵌入式系统。该系统巧妙融合了蜂鸣器、数码管显示器、点阵屏、温湿度传感器、LED指示灯以及按键等多种外设模块&#xff0c;形成了一个功能丰富、操作便捷的杂交版智能设备。通过串口…...

多输入多输出 | Matlab实现Transformer多输入多输出预测

多输入多输出 | Matlab实现Transformer多输入多输出预测 目录 多输入多输出 | Matlab实现Transformer多输入多输出预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现Transformer多输入多输出预测&#xff08;完整源码和数据&#xff09; 1.da…...

Linux文件编程(标准C库)

目录 一、标准C库打开/创建文件&#xff0c;读写文件&#xff0c;光标移动 二、标准C库写入结构体到文件 三、其他函数补充 1.fputc函数 2.feof函数和fgetc函数 前面讲到的open函数都是基于linux内核的&#xff0c;也就是说在Windows系统上无法运行&#xff0c;移植性比较…...

生产英特尔CPU处理器繁忙的一天

早晨&#xff1a;准备与检查 7:00 AM - 起床与准备 工厂员工们早早起床&#xff0c;快速洗漱并享用早餐。为了在一天的工作中保持高效&#xff0c;他们会进行一些晨间锻炼&#xff0c;保持头脑清醒和身体活力。 8:00 AM - 到达工厂 员工们到达英特尔的半导体制造工厂&#…...

MVC拦截器、ThreadLocal来进行登录拦截

MVC拦截器、ThreadLocal来进行登录拦截 1. 对登录进行拦截1.1 什么是ThreadLocal1.2 定义UserHolder 类&#xff0c;来封装ThreadLocal方法1.3 拦截器WebMvcConfigurer 的配置1.4 登录的配置&#xff0c;当碰到拦截的方法的时候调用1.5 UserServiceImpl1.6 controller&#xff…...

小程序问题

1.获取节点 wx.createSelectorQuery() wx.createSelectorQuery().in(this) //组件中加in(this)&#xff0c;不然获取不到 2.使用实例 wx.createSelectorQuery().in(this).select(#share).fields({node: true,size: true}).exec(async (res) > {const canvas res[0].node;…...

arm 版的 deb、rpm、AppImage 都有什么区别

qq arm 版的 deb、rpm 和 AppImage 格式之间存在几个关键区别。以下是对这些区别的详细解释&#xff1a; 包管理系统与兼容性&#xff1a; deb&#xff1a;是Debian及其衍生发行版&#xff08;如Ubuntu&#xff09;中使用的软件包格式。这些系统使用dpkg命令来管理deb包&#…...

docker中mysql设置lower_case_table_names配置的坑

前沿 今天在使用flowable流程框架的时候&#xff0c;遇到一个问题。需要配置MySQL数据库以实现表名大小写不敏感。本以为这是一个简单的任务&#xff0c;却耗费了我两个多小时的时间。 docker容器中修改配置&#xff0c;重启不成功 我们前提是容器中的mysql中已经有很多数据…...

python日志记录工具:loguru日志库使用

文章目录 一、使用loguru1、安装2、简单使用3、详细使用4、工具类&#xff08;1&#xff09;logUtil.py&#xff08;2&#xff09;测试类&#xff08;3&#xff09;效果 参考资料 一、使用loguru 1、安装 pip install loguru2、简单使用 from loguru import logger# 打印到文…...

python入门基础知识·二

""" # Python介绍 # Python注释 # 单行注释&#xff1a; # # 多行注释&#xff1a; r """""" # Python输出和输入 # print: 输出 # input: 输入 ①会让程序暂停&#xff0c;②得到的是字符串内容 int(&…...

深度学习中的正则化技术 - 噪声鲁棒性篇

序言 在深度学习的蓬勃发展中&#xff0c;模型的性能与泛化能力成为了研究者们关注的焦点。然而&#xff0c;实际应用中的数据往往伴随着各种噪声&#xff0c;这些噪声不仅来源于数据采集过程中的硬件限制&#xff0c;还可能由环境干扰、传输错误等因素引入。噪声的存在严重影…...

如何通过 Java 来完成 zip 文件与 rar 文件的解压缩?

目录 一、用到的知识点 二、代码展示(分解版) 三、代码展示(整体版) 一、用到的知识点 1.IO流&#xff1a; Input:输入&#xff0c;通过“输入流”进行文件的读取操作 Output:输出&#xff0c;通过“输出流”进行文件的写入操作 2.文件操作相关&#xff1a; File类&#xff…...

C 语言中的联合(Union)的用途是什么?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; &#x1f4d9;C 语言百万年薪修炼课程 通俗易懂&#xff0c;深入浅出&#xff0c;匠心打磨&#xff0c;死磕细节&#xff0c;6年迭代&#xff0c;看过的人都说好。 文章目…...

汽车电子助力转向系统研究

汽车电子助力转向系统研究 摘要 电子助力转向系统&#xff08;Electric Power Steering&#xff0c;EPS&#xff09;是一种利用电动机辅助驾驶员进行车辆转向的系统。相比于传统的液压助力转向系统&#xff0c;EPS具有更高的效率、精确性和可控性。本文将详细探讨EPS的工作原理…...

大数据学习之 scala基础(补充)

scala基础&#xff1a; hello world: 写scala可运行文件的注意事项1、如果一个scala文件要运行&#xff0c;class要改成object2、如果是class&#xff0c;就仅单纯代表一个类&#xff0c;如果是object代表的是单例对象3、scala语法中&#xff0c;一句话结束不需要加分号4、sca…...

正向传播和反向传播

正向传播&#xff08;Forward Propagation&#xff09; 正向传播是指将输入数据通过神经网络&#xff0c;计算出预测值的过程。具体步骤如下&#xff1a; 输入层&#xff1a;接受输入数据。隐藏层&#xff1a;每个隐藏层中的神经元接收上一层的输出&#xff0c;进行加权求和&…...

前端文件下载的方式

方式一&#xff1a;a标签直接下载 <a href"链接" >下载</a>一个文件链接&#xff08;一般是服务器上的某个文件&#xff09;&#xff0c;这个链接一般地址栏输入是预览&#xff0c;不是附件下载 如果想改成附件下载&#xff0c;以下两种方式任选一个均…...

视图库对接系列(GA-T 1400)十六、视图库对接系列(本级)通知(订阅回调)

说明 之前我们实现了订阅接口,其中有一个receiveAddr参数, 这个就是对应的回调的地址。一般情况下对应的是同一个服务。 我们推荐使用http://xxx:xxx/VIID/SubscribeNotifications接口文档 SubscribeNotificationList对象对象如下: 文档中是xml,但实际上目前使用的都是jso…...

Python | Leetcode Python题解之第230题二叉搜索树中第K小的元素

题目&#xff1a; 题解&#xff1a; class AVL:"""平衡二叉搜索树&#xff08;AVL树&#xff09;&#xff1a;允许重复值"""class Node:"""平衡二叉搜索树结点"""__slots__ ("val", "parent&quo…...

芯片工程师如何从AI那里“榨出“隐性知识?

大语言模型里藏着很多东西&#xff0c;但大部分人只用到了表面。这些模型在训练时吃进去的不只是教科书和官方文档&#xff0c;还有大量的技术博客、论坛讨论、开源代码、甚至是一些没公开发表的技术报告。这些知识以一种隐性的方式存在于模型参数中&#xff0c;不会主动跳出来…...

关闭蜂鸣器与外设的初始化代码

针对蓝桥杯单片机开发中关闭蜂鸣器与外设的初始化操作&#xff0c;以及创建标准.h头文件的必备代码&#xff0c;以下是详细的技术方案与实现代码。 1. 蓝桥杯单片机系统初始化与外设关闭 蓝桥杯官方使用的CT107D开发板&#xff08;以IAP15F2K61S2单片机为核心&#xff09;&am…...

Phi-4-mini-reasoning企业知识库接入:PDF解析+向量化+推理问答闭环

Phi-4-mini-reasoning企业知识库接入&#xff1a;PDF解析向量化推理问答闭环 1. 模型简介与部署验证 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族成员&#xff0c;它特别强化了数学推…...

MySQL 5.7.32 Online DDL避坑指南:如何避免主从延迟和锁等待?

MySQL 5.7.32 Online DDL实战避坑&#xff1a;高并发场景下的零停机表结构变更策略 在数据库运维的日常工作中&#xff0c;表结构变更&#xff08;DDL&#xff09;操作总是让人又爱又恨。特别是当面对千万级数据表时&#xff0c;一个简单的ALTER TABLE操作就可能引发连锁反应—…...

终极指南:InvokeAI模型缓存优化技术 - 让AI绘图既快速又省内存

终极指南&#xff1a;InvokeAI模型缓存优化技术 - 让AI绘图既快速又省内存 【免费下载链接】InvokeAI Invoke is a leading creative engine for Stable Diffusion models, empowering professionals, artists, and enthusiasts to generate and create visual media using the…...

OpenClaw技能开发入门:为千问3.5-27B编写自定义模块

OpenClaw技能开发入门&#xff1a;为千问3.5-27B编写自定义模块 1. 为什么需要自定义技能&#xff1f; 去年冬天&#xff0c;我发现自己每天早晨都要手动查询天气并发送给家人。重复的操作让我开始思考&#xff1a;能否让OpenClaw帮我自动完成这个任务&#xff1f;这就是我踏…...

Ostrakon-VL终端部署案例:单卡3090实现12路摄像头并发扫描

Ostrakon-VL终端部署案例&#xff1a;单卡3090实现12路摄像头并发扫描 1. 项目背景与核心价值 在零售与餐饮行业&#xff0c;传统的图像识别系统往往面临两个痛点&#xff1a;一是工业级UI操作复杂&#xff0c;员工培训成本高&#xff1b;二是多路摄像头并发处理需要昂贵的高…...

Alpamayo-R1-10B保姆级教程:Linux服务器远程访问7860端口配置

Alpamayo-R1-10B保姆级教程&#xff1a;Linux服务器远程访问7860端口配置 1. 引言&#xff1a;为什么需要远程访问&#xff1f; 想象一下这个场景&#xff1a;你在本地电脑上部署了强大的Alpamayo-R1-10B自动驾驶模型&#xff0c;但每次想测试都得跑到服务器机房&#xff0c;…...

告别SSH一息屏就断连!用Termux-wake-lock让你的手机后台稳定运行

告别SSH一息屏就断连&#xff01;用Termux-wake-lock让你的手机后台稳定运行 你是否遇到过这样的场景&#xff1a;正通过电脑SSH连接到手机的Termux环境进行开发调试&#xff0c;突然一个微信消息弹出&#xff0c;切出去回复后&#xff0c;SSH连接立刻中断&#xff1f;或是手机…...

无片外电容的LDO电路设计手册:完整IP现成电路,包含过温与过流保护、带隙与BUFFER,性能...

无片外电容LDO电路设计 完整IP现成电路&#xff0c;具有过温保护和过流保护&#xff0c;带隙&#xff0c;BUFFER都有 性能指标已流片验证 同时有相关文献、各模块电路功能分析简化计算笔记&#xff0c;适合学习入门不适合纵向可以附赠一些自己学习时觉得比较有帮助的资料。 有好…...