USART串口初始化源码解析

USART串口初始化源码解析

  • [1. 源码解析---USART初始化](#1. 源码解析—USART初始化)
    • [1.1 Usart1物理地址](#1.1 Usart1物理地址)
    • [1.2 结构体初始化](#1.2 结构体初始化)
    • [1.3 标志位选项设置](#1.3 标志位选项设置)
    • [1.4 USART1时钟使能](#1.4 USART1时钟使能)

1. 源码解析---USART初始化

1.1 Usart1物理地址

找到 USART1 的定义

把地址相加得到USART1_BASE 等于 0x 4001 3800 和存储器映像里的usart1起始地址相同。

然后把USART1_BASE 强制类型转换为结构体类型。

这样就可以通过访问结构体成员变量来访问USART1里的各个寄存器 。

1.2 结构体初始化

得到串口初始化函数,可以理解和GPIO初始化相似,把我们设置的数据 赋给结构体变量。

那么huart1是什么呢 转定义得到

huart1是一个全局变量,将类型转定义得到

表明huart1是一个结构体变量,其中 第一个成员变量为 一个结构体指针,正是和USART1相同类型的结构体指针。

第二个成员是一个结构体,方便存放初始化信息

这些是与我们发送数据相关的变量

上面是与我们接收数据相关的变量

所以就不难看懂这个初始化内容了,第一行是把USART1地址给到Instance。下面就是将初始化信息存入结构体。

该结构体成员变量如下

1.3 标志位选项设置

找到相关源码转定义分析

转定义得到

找一两个查看理解即可,例如设置CR2寄存器

转定义得到

这个宏,先分析一下参数

第一个参数

就是CR2寄存器的地址,

第二个参数,

转定义得到

就是把无符号的长整数 3左移12个比特位

简写为00...0011 0000 0000 0000 0000 ;

第三个参数就是 我们初始化设定的停止位

就是0x00000000;

然后来理解这个宏的作用

其实就是把CR2上对应的与停止位相关的比特位清零,然后再把参数三写入到对应位

这个宏就是把val赋给 reg ,

即先把第二个参数也就是 00...0011 0000 0000 0000 0000 按位取反得到 11...1100 1111 1111 1111
然后再与CR2按位与 把与停止位 对应的比特位清0
查询参考手册可得

左移12位后正好对应的就是位12 和位 13
然后再与 我们要写入的数据 也就是 0x 00000000
按位或 得到 位 12 和 位 13 都是0 ,即 00 ,然后再整体写入 CR2,查看参考手册得到 位 12 和位 13 都为0 表示 ,停止位为 1个比特位宽

这样就通过配置寄存器 完成了对停止位的配置,其他的配置也是如此。

1.4 USART1时钟使能

在我们进行USART1的配置前,只有先使能了USART1才可以对其进行初始化。所以在初始化函数前面 一定可以找到使能USART1的函数

如下

但是我们转定义发现没有具体实现

其实是在

这个文件里面

在这里插入图片描述

第一个为 USART1使能 ,第二个为USART1复用GPIO对应针脚的使能。

同理也是通过配置寄存器 使能 应为USART1由APB2总线使能,所以去找相关APB2使能外设寄存器如下

所以我们预测要想让USART1 使能,应该把APB2 外设时钟使能寄存器 的 位14置为1

关键代码

可以得到确实与我们预测的一样。 成功使能USART1

同理其他片上外设的使能也是如此。

相关推荐
youshi666834 分钟前
stm32-看门狗
stm32·单片机·嵌入式硬件
M1582276905536 分钟前
三格串口服务器:RS232/485 设备联网解决方案
运维·服务器·单片机
自小吃多1 小时前
PCB Editor放置元器件笔记
笔记·嵌入式硬件
736c1 小时前
STM32-NVIC 13
单片机·嵌入式硬件
国科安芯1 小时前
ASC8T245S:把 8 位并行总线稳稳“跨过“电压域的双电源收发器
网络·分布式·单片机·嵌入式硬件·fpga开发·架构
宣宣猪的小花园.1 小时前
【控制理论】稳定性为什么是一切控制的前提?
人工智能·嵌入式硬件·机器学习
Messy create2 小时前
【BMS-三级架构】
单片机·mcu·架构·能源
佳児素花痴╮2 小时前
STM32(STM32U575RIT6)基础学习(GPIO)
stm32·单片机·嵌入式硬件
星栖与芯2 小时前
# STM32MP157+LiteOS-M GCC极简工程:启动源码适配+Windows Make终极避坑
windows·stm32·单片机
深圳市恒锐丰科技杨生3 小时前
SA8330 2.5‑15V 2.0A 三相半桥无刷电机驱动芯片|低压 BLDC 预驱动方案
嵌入式硬件·硬件工程