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上

相关推荐
foundbug9991 天前
51单片机 PT100 温度测量程序
单片机·嵌入式硬件·51单片机
星夜夏空991 天前
STM32单片机学习(21) —— I2C通信
stm32·单片机·学习
qq_333120971 天前
深入探讨8051单片机C351语言及编译器应用
单片机·嵌入式硬件·51单片机
时光の尘1 天前
【STM32实战】ESP8266 通过 MQTT 协议对接 OneNET 云平台实现数据上传与下发(源码可直接移植)
stm32·mqtt·嵌入式·iot·esp8266
十年编程老舅1 天前
读懂 MCU 启动:从上电到程序运行全链路
单片机·嵌入式硬件·mcu·嵌入式·cpu·嵌入式开发·ram
北京盟通科技官方账号1 天前
Windows如何实现硬实时?LxWin双系统隔离架构深度解析
stm32·嵌入式硬件·具身智能·ethercat·人形机器人·实时系统·windows实时扩展
Qt程序员1 天前
从上电到系统就绪:ARM+U-Boot 嵌入式 Linux 启动流程
linux·运维·c++·内核·设备树·嵌入式·ram
国科安芯1 天前
低噪声LDO如何破解测试测量与医学成像的电源困局
网络·单片机·嵌入式硬件·安全性测试
半条-咸鱼1 天前
【STM32】HAL库的本质 及 芯片内部GPIO模块细节
stm32·单片机·嵌入式硬件
振南的单片机世界1 天前
硬件PWM:定时器自动翻转引脚,CPU不费心
stm32·单片机·嵌入式硬件