STM32 内置的通讯协议

 

数据是以帧为单位发的 

 

 USART和UART的区别就是有没有同步功能

同步是两端设备有时钟连接,异步是没时钟连接,靠约定号的频率(波特率)接收发送数据 

RTS和CTS是用来给外界发送已“可接收”或“可发送”信号的,一般用不到 ,只用到TX 和 RX

从输入引脚看框图

编解码模块是把电平信号转换为数字信号的,软件只可操控DR寄存器

结构简图:

虽然有TDR,RDR两个硬件层面的寄存器,但是软件层面只有一个寄存器DR(F1系列),只不过读和写通向不同的寄存器

了解即可以下内容{

串口只需要看红色圈住的部分:

数据采样看8,9,10里有多少个1多少个0,如果全为0就是0,,2个0,1个1还是0,但是NE标志位会被置一  

 }到此

采样率 = f(pclk2/1) / DIV

(f(pclk2/1)PCB2/PCB1的时钟信号具体看手册上USART1和USARTx有可能不一样)

波特率 = 采样率 / 16 

用户给出波特率,算出DIV,然后整数部分写入DIV_Mantissa,小数部分写入DIV_Fraction(小数部分需要*16后再+0.5)(乘16相当于左移4位,+0.5是为了四舍五入)

即可完成波特率的设置(USART_BRR波特比率寄存器)

 U(S)ART寄存器

控制寄存器CR1

控制寄存器CR2

基本上只用到位13和12(配置为00即可)

控制寄存器CR3

用到位3

 数据寄存器DR

 状态寄存器CR

TXE(发送寄存器为空标志位,可产生中断)可产生中断去写DR寄存器

TC(发送完成(发送寄存器和发送移位寄存器都空)标志位)

RXNE(读数据寄存器非空(收到了数据)标志位,可产生中断去读DR寄存器)

 HAL库的MSP回调机制

(其实就是把外设初始化写在mspinit函数里而已)

 例

要其他外设的话直接加就可以

PPP改成你要的外设名(找到指定函数)

HAL_UART_Init会自动调用MSPInit

 HAL共用中断处理函数 and 中断回调函数

 其实都是一样的

 USART异步通信配置步骤

需要用到的1,3,6

 HAL_UART_Init()函数原型:

UART_HandleTypeDef是句柄(其实就是结构体里套结构体,标准库是只有一个结构体的)

 一般只用到前两个,Init又是一个结构体

 Init结构体成员

用法例:

信号空闲时要上拉 

中断函数

usart1_rx_buf的大小在文件开头宏定义为128了,可以修改,有两个方法进这个中断,一个是接收到数据,一个是数据接收完了。

HAL_UART_Receive 会自动清除接收标志位RXNE 标志)

该函数可以读取数据到用户指定的变量中

剩余的函数及宏: 

 

 

 问题1:STM32初始化USART时,要使能USART时钟和GPIO时钟,为什么,不是使能USART就可以了吗

答:

在 STM32 初始化 USART 时,除了使能 USART 外,还需要使能 GPIO 时钟,原因如下:

  1. USART 需要 GPIO 引脚进行数据传输

    • USART 的 TX(传输)和 RX(接收)引脚通常映射到 GPIO 端口。例如,在 STM32F103 上,USART1 的 TX 可以是 PA9,RX 可以是 PA10
    • 这些 GPIO 引脚默认是普通 I/O 模式,必须配置为 复用功能(AF),以使 USART 硬件能够控制它们。
  2. GPIO 时钟与复用功能的关系

    • GPIO 端口是独立的外设,受 RCC(时钟控制)管理。
    • 复用功能(AF)是 GPIO 的一部分,它需要 GPIO 时钟处于打开状态,否则 USART 无法正确驱动 TX/RX 引脚。
  3. USART 只管理数据,不管理引脚

    • USART 外设负责数据的收发,但它不会直接控制 GPIO 时钟。
    • GPIO 需要通过 RCC 使能时钟后,才能配置为 USART 复用模式。

IO引脚复用功能和重映射

同一时间一个IO口只能用一种功能

重映射:

TIM1_CH1默认在PA8引脚

但是如果PA8已经被用作其他功能,那TIM1_CH1就用不了了,此时就要用到重映射了

可以看到TIM1_CH1可以重映射到PE9上 

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

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

相关文章

ES 使用geo point 查询离目标地址最近的数据

需求描述:项目中需要通过经纬度坐标查询目标地所在的行政区。 解决思路大致有种,使用es和mysql分别查询。 1、使用es进行查询 将带有经纬度坐标的省市区数据存入es中,mappings字段使用geo point类型,索引及查询dsl如下。 geo p…

Appium等待机制--强制等待、隐式等待、显式等待

书接上回,Appium高级操作--其他操作-CSDN博客文章浏览阅读182次,点赞6次,收藏7次。书接上回Appium高级操作--从源码角度解析--模拟复杂手势操作-CSDN博客。https://blog.csdn.net/fantasy_4/article/details/146162851主要讲解了Appium的一些…

【架构艺术】Go语言微服务monorepo的代码架构设计

近期因为项目架构升级原因,笔者着手调研一些go项目monorepo的代码架构设计,目标是长期把既有微服务项目重要的部分都转移到monorepo上面,让代码更容易维护,协作开发更加方便。虽然经验不多,但既然有了初步的调研&#…

深入解析 JVM —— 从基础概念到实战调优的全链路学习指南

文章目录 一、为什么要学习 JVM?1. 面试必备与技能提升2. 性能优化与问题诊断3. 编写高质量代码 二、JVM 基础概念与体系结构1. JVM 简介2. JDK、JRE 与 JVM 三、JVM 内存模型1. 线程私有区2. 线程共享区 四、类加载机制与双亲委派1. 类加载过程2. 双亲委派模型3. 动…

前端及后端实现csv文件下载功能

方法一、 前端内容: const url window.URL.createObjectURL(new Blob([res.data])); const link document.createElement(a); link.href url; const fileNameDateTime getFormattedDateTime(); const filename "用户提现列表"fileNameDateTime.csv…

QT中委托QStyledItemDelegate的使用

目录 一、子类化委托 二、委托方法实现 1)createEditor 2)setEditorData 3)setModelData 4)updateEditorGeometry 三、委托使用 四、总结 Qt的数据容器控件采用模型/视图(model/view)架构设计。模型用于存放控件的数据,视图则用于显示编辑数据,而委托则是…

OpenCV实现视频背景提取

在计算机视觉领域,背景减除(Background Subtraction)是一种常用的技术,用于从视频序列中提取前景对象。 背景减除的核心思想是通过建模背景,然后将当前帧与背景模型进行比较,从而分离出前景对象。 OpenCV…

NFS实验配置笔记

NFS NFS服务 nfs,最早是Sun这家公司所发展出来的,它最大的功能就是可以透过网络,让不同的机器,不同的操作系统,进行实现文档的共享。所以你可以简单的将他看做是文件服务器。 实验准备 ①先准备一个服务器端的操作…

C语言【数据结构】:理解什么是数据结构和算法(启航)

引言 启航篇,理解什么是数据结构和算法 在 C 语言编程领域,数据结构和算法是两个核心且紧密相关的概念 一、数据结构 定义 数据结构是指相互之间存在一种或多种特定关系的数据元素的集合(比如数组),它是组织和存储数…

Vue.js 3 的设计思路:从声明式UI到高效渲染机制

目录 一、声明式UI与虚拟DOM的灵活性 二、渲染器:虚拟DOM到真实DOM的桥梁 三、组件的本质与实现 四、编译与运行时的协同优化 五、性能与可维护性的权衡 总结 Vue.js 3 作为新一代前端框架,其设计理念在声明式UI描述、虚拟DOM优化、组件化架构…

深度学习|MAE技术全景图:自监督学习的“掩码魔法“如何重塑AI基础

一、引言:深度学习的困境与自监督的曙光 深度学习(Deep Learning)无疑是当今人工智能领域基础中的基础。从图像识别到自然语言处理(NLP),它在无数任务中展现了卓越性能。例如,在安防监控中&…

深度学习正则化技术之权重衰减法、暂退法(通俗易懂版)

一、影响模型泛性的因素有?什么是正则化技术?有什么用? 通常,影响模型泛化能力的因素有: 可调节参数的个数:可调节的参数过少,会造成模型过于简单,欠拟合;过多&#xf…

爬虫逆向:Unicorn 详细使用指南

文章目录 1. Unicorn 介绍1.1 Unicorn 的特点1.2 Unicorn功能2. 安装 Unicorn2.1 安装 Python 绑定2.2 安装 Unicorn 核心库3. Unicorn 的基本使用3.1 初始化模拟器3.2 映射内存3.3 写入代码3.4 设置寄存器3.5 执行代码3.6 读取寄存器4. Unicorn 的高级功能4.1 钩子函数4.2 异常…

【SpringBoot】实现登录功能

在上一篇博客中,我们讲解了注册页面的实现。在此基础上会跳转到登录页面,今天给大家带来的是使用 SpringBoot,MyBatis,Html,CSS,JavaScript,前后端交互实现一个登录功能。 目录 一、效果 二、…

【小白向】Ubuntu|VMware 新建虚拟机后打开 SSH 服务、在主机上安装vscode并连接、配置 git 的 ssh

常常有人问VMware-Tools装了也复制粘贴不了怎么办,这个东西影响因素太多了,具体解决办法你们可以参考一下:【经验】VMware|虚拟机只能使用鼠标无法使用键盘、装不了或装了VMware-Tools无法复制粘贴的可能解决办法_增强型键盘驱动程…

mingw工具源码编译

ming-w64 mingw编译生成的库,需要mingw的lib文件支持。 https://github.com/mingw-w64/mingw-w64 使用msys2的bash git checkout v8.0.3 ./configure --disable-dependency-tracking --targetx86_64-w64-mingw32 mingw32-make.exe -j4 修改makefile中的make 改成mi…

LSTM方法实践——基于LSTM的汽车销量时序建模与预测分析

Hi,大家好,我是半亩花海。本实验基于汽车销量时序数据,使用LSTM网络(长短期记忆网络)构建时间序列预测模型。通过数据预处理、模型训练与评估等完整流程,验证LSTM在短期时序预测中的有效性。 目录 一、实验…

Stable Diffusion教程|快速入门SD绘画原理与安装

什么是Stable Diffusion,什么是炼丹师?根据市场研究机构预测,到2025年全球AI绘画市场规模将达到100亿美元,其中Stable Diffusion(简称SD)作为一种先进的图像生成技术之一,市场份额也在不断增长&…

Webpack构建流程详解优化前端性能\Dev-Server与Proxy\网络攻击\HMR

简版 核心流程图 根据,Webpack的构建流程分为初始化、编译和输出三个阶段。初始化阶段读取配置、加载插件、实例化Compiler。编译阶段(构建依赖关系)涉及Compiler类的运行,生成Compilation对象,处理模块依赖。输出阶…

《Transformer如何进行图像分类:从新手到入门》

引言 如果你对人工智能(AI)或深度学习(Deep Learning)感兴趣,可能听说过“Transformer”这个词。它最初在自然语言处理(NLP)领域大放异彩,比如在翻译、聊天机器人和文本生成中表现出…