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

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

相关推荐
Zwawa14 分钟前
串口为什么会丢字节:从轮询到中断和环形缓冲区
c语言·单片机·嵌入式
Brilliantwxx25 分钟前
【STM32】 内部 Flash 详解:寄存器逐位拆解 + 工作流程顺序全讲 + EEPROM再实现
stm32·单片机·嵌入式硬件·1024程序员节
木子单片机31 分钟前
基于单片机的DS18B20温度传感器测温系统设计
单片机·嵌入式硬件·51单片机·keil
海海不掉头发37 分钟前
CSDN博客_时序预测9模型复现对比
人工智能·学习·软件工程
华清远见IT开放实验室1 小时前
实验室建设案例 | 安徽三联学院物联网实验室
stm32·单片机·嵌入式硬件·物联网·华清远见
Zw-awa1 小时前
串口为什么会丢字节:从轮询到中断和环形缓冲区
stm32
深圳光特通信豆子3 小时前
TTL 光模块在工业控制与串口通信中的应用指南(10M BIDI 单模系列)
单片机·嵌入式硬件
蓝祁子yoky3 小时前
Qt学习日记 Day13:网络编程(一)-TCP基础与Socket实战
网络·qt·学习
桀人3 小时前
SPI概念引入
stm32·单片机·嵌入式硬件
离凌寒3 小时前
一、基于stm32+freertos下LD2410D和R60ADB1两款雷达的使用效果
stm32·单片机·嵌入式硬件