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.rhkb.cn/news/32513.html

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

相关文章

C语言实现队列数据结构:思路与代码详解

目录 一、引言 二、整体思路 三、代码模块分析 (一)头文件包含与宏定义 (二)数据类型定义 (三)队列操作函数 1. 队列初始化 2. 队列销毁 3. 入队操作 4. 出队操作 5. 获取队头元素 6…

商业智能BI的未来,如何看待AI+BI这种模式?

昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…

如何制作Windows系统盘、启动盘?(MediaCreationTool_22H2)

文章目录 每日一句正能量前言一、准备工作二、制作启动盘后记 每日一句正能量 每个在你生命里出现的人,都有原因。喜欢你的人给你温暖关心。你喜欢的人让你学会爱和付出,不喜欢你的人让你自省成长。你不喜欢的人教会你宽容尊重,没有人是偶然出…

DataWhale 大语言模型 - 语言模型发展历程

大语言模型 LLMBook 项目背景 本课程围绕中国人民大学高瓴人工智能学院赵鑫教授团队出品的《大语言模型》书籍展开,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的…

C#带有设备仿真功能串口调试助手

本文档介绍一种方法,可以用来仿真串口设备。这样调试PLC程序时可以在没有仪器时用于测试程序的运行。详细代码见: https://download.csdn.net/download/qq_34047402/90477066 C#带有设备仿真功能串口调试助手资源-CSDN文库 步骤如下: 1.把串口设备接收和发送仿真数据放到一…

本地部署 OpenManus 保姆级教程(Windows 版)

一、环境搭建 我的电脑是Windows 10版本,其他的没尝试,如果大家系统和我的不一致,请自行判断,基本上没什么大的出入啊。 openManus的Git地址:https://github.com/mannaandpoem/OpenManus 根据官网的两种安装推荐方式如…

01 | Go 项目开发极速入门课介绍

提示: 所有体系课见专栏:Go 项目开发极速入门实战课。 你好,欢迎学习本课程。本课程是一个 Go 项目开发极速入门课程。旨在帮助刚学习完 Go 基础语法的 Go 开发者,快速掌握如何开发一个功能相对全面的 Go 项目。 根据课程设计目标…

使用 Elastic-Agent 或 Beats 将 Journald 中的 syslog 和 auth 日志导入 Elastic Stack

作者:来自 Elastic TiagoQueiroz 我们在 Elastic 一直努力将更多 Linux 发行版添加到我们的支持矩阵中,现在 Elastic-Agent 和 Beats 已正式支持 Debian 12! 本文演示了我们正在开发的功能,以支持使用 Journald 存储系统和身份验…

江科大51单片机笔记【15】直流电机驱动(PWM)

写在前言 此为博主自学江科大51单片机(B站)的笔记,方便后续重温知识 在后面的章节中,为了防止篇幅过长和易于查找,我把一个小节分成两部分来发,上章节主要是关于本节课的硬件介绍、电路图、原理图等理论…

【Linux】:封装线程

朋友们、伙计们,我们又见面了,本期来给大家带来封装线程相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结…

全球领先的光学方案设计公司:倚光科技

在光学技术革新的浪潮中,倚光(深圳)科技有限公司以创新者的姿态迅速崛起,成为全球光学领域的标杆企业。自 2021 年成立以来,公司始终聚焦纳米光学技术研发与超精密加工,凭借顶尖的技术实力和前瞻性的市场布…

2.2.3 TCP—UDP-QUIC

文章目录 2.2.3 TCP—UDP-QUIC1. TCP如何做到可靠性传输1. ACK机制2. 重传机制3. 序号机制4. 窗口机制5. 流量机制6. 带宽机制 2. tcp和udp如何选择1. tcp和udp格式对比2. ARQ协议(Automatic Repeat reQuest,自动重传请求)1. ARQ协议的主要类…

【动手实验】TCP 连接的建立与关闭抓包分析

本文是基于知识星球程序员踩坑案例分享中的作业进行的复现和总结,借此加深对 TCP 协议的理解, 原文参见TCP 连接的建立和关闭 —— 强烈建议新手看看。 实验环境 这里使用两台位于同一子网的腾讯云服务器,IP 分别是 node2(172.1…

视频理解之Actionclip(论文宏观解读)

配合解读代码解读 1.研究背景 1. 视频行为识别的重要性 视频行为识别是视频理解领域的核心任务之一,旨在通过分析视频内容来识别和分类其中的人物行为或活动。这一任务在多个领域具有重要的应用价值,例如智能监控、人机交互、自动驾驶、医疗健康等。随…

基于LabVIEW的脚本化子VI动态生成

该示例展示了一种利用LabVIEW VI脚本(VI Scripting)技术,通过程序化方式动态生成并替换子VI的解决方案。核心逻辑为:基于预定义的模板VI,根据用户选择的数学操作(加法或乘法),自动生…

Debian系统grub新增启动项

参考链接 给grub添加自定义启动项_linux grub定制 启动项名称自定义-CSDN博客 www.cnblogs.com 1. boot里面的grub.cfg 使用vim打开boot里面的grub.cfg sudo vim /boot/grub/grub.cfg 这时候会看到文件最上方的提示 2. 真正配置grub的文件 从刚才看到的文件提示中&#x…

ctfhub-web-SSRF通过攻略

1.URL Bypass 打开题目 请求的URL中必须包含http://notfound.ctfhub.com,使用来绕过即可 /?urlhttp://notfound.ctfhub.com127.0.0.1/flag.php 成功获得flag 2.数字IP Bypass 开启题目 发现127以及172被过滤了 尝试别的绕过 127.0.0.1–>localhost 127.0…

C语言(23)

字符串函数 11.strstr函数 1.1函数介绍: 头文件:string.h char *strstr ( const char * str1,const char *str2); 作用:在一个字符串(str1)中寻找另外一个字符串(str2)是否出现过 如果找到…

uniapp+Vue3 组件之间的传值方法

一、父子传值&#xff08;props / $emit 、ref / $refs&#xff09; 1、props / $emit 父组件通过 props 向子组件传递数据&#xff0c;子组件通过 $emit 触发事件向父组件传递数据。 父组件&#xff1a; // 父组件中<template><view class"container">…

晨控CK-FR08与汇川H5U系列PLC配置EtherNet/IP通讯连接手册

晨控CK-FR08与汇川H5U系列PLC配置EtherNet/IP通讯连接手册 晨控CK-FR08系列作为晨控智能工业级别RFID读写器,支持大部分工业协议如RS232、RS485、以太网。支持工业协议Modbus RTU、Modbus TCP、Profinet、EtherNet/lP、EtherCat以及自由协议TCP/IP等。 本期主题&#xff1a;围…