大连全瓷种植牙齿制作中心 发表于 2024-7-10 20:06:08

STM32学习笔记(一):架构(以STM32F103为例)

作为一个零基础的小白,起步学习单片机真的非常迷茫和痛楚。为了鼓励自己学习,同时也充当笔记的作用,我想通过博客的方式对学习过程进行记载。有一些引用的文章我自己是速览了一下,但是也没有深入细致看,放进来方便日后查阅。中心难免会有错误或者明确不到位的地方,恳请大家指出,感谢大家的支持。
在此过程中参考的数据手册是STM32F10xxx版本的,参考网课是b站上江协科技的视频。数据手册在江协科技的视频简介里有。
STM32入门教程-2023版 细致讲解 中笔墨幕_哔哩哔哩_bilibili
由于我打仗到的型号是STM32F103,属于超高密度产物(XL),因此这里的系统框架参考的是数据手册里的figure 1而不是figure 2(connectivity line device),我感觉,看数据手册两者之间的框架差异不大,cl型的会多一个master少一个slave。要看芯片选型的可以看看这里:
STM32不同型号的芯片对应的启动文件如何选择_startup_stm32f10x_cl.s-CSDN博客
废话不多说开始学习STM32的框架吧~
单片机是一个SoC(System on Chip)系统。一个完整的单片机包罗中央处理单位(CPU,Central Processing Unit)、步伐存储器(Read-Only Memory)、数据存储器(Random Access Memory)、周边外设(Peripheral)和数据总线(BUS)。CPU获取步伐的指令,并对指令进行实行;步伐存储器存储了这些指令;数据存储器存储了这些指令处理的数据;周边外设是一些被操控的单位;数据总线负责连通各个部分进行信息传输。
在XL超高密度产物框架中,有四个master(主机)和四个slave(从机)。主机负责发起和控制通讯或操作的设备,通常具有更强大的处理能力和控制能力;从机被动地接受主机的指令或哀求,并实行相应的操作。四个主机分别是毗连内核Cortex-M3的DCode和System总线以及两个DMA()的总线,四个从机分别是SRAM(Static Random Access Memory)、Flash闪存、FSMC(Flexible static memory controller)和AHB(Advanced High performance Bus)。
碎碎念:我不绝迷惑为啥ICode不是主机的一部分,讨教~我个人的明确是Icode只是实行指令的预取操作,并没有实行那么复杂的主从之间的通讯操作。
以下是STM32的系统框架图:
https://img-blog.csdnimg.cn/06c32f2d9e6d4b949af613b36f15c1e1.png
一. 主机部分
1. Cortex-M3内核与三条总线
这里的中央处理器内核是Cortex-M3。Cortex-M3是32位(即一次最多处理32位的二进制数据)的处理器内核。这个内核属于ARMv7架构,哈佛体系布局的。ARMv7架构定义了处理器的指令集架构,即规定了处理器能够识别和实行的指令集合、寄存器组织、内存模子和异常处理机制等,软件开辟人员编写的步伐必须基于这样的架构才能被处理器识别并实行。哈佛体系布局定义了中央处理器访问指令和数据的方式,与之相对的是冯诺依曼布局。哈佛体系和冯诺依曼体系的区别就在于,前者的指令和数据分别存储在不同的存储器,走不同的总线,而后者都存在同一个存储器中,走相同的总线。两者的优缺点在下面这篇博客中给出:
http://t.csdnimg.cn/4BA4Z
从内核引出了三条总线:ICode指令总线,DCode数据总线,System系统总线。
此中,ICode和Dcode毗连Flash闪存,中心的FLITF是闪存接口(Flash Interface)。ICode总线接Flash的指令集接口,作用是取指令,只和指令有关;DCode总线接Flash的数据集接口,的作用是对数据读写访问,只和数据有关(步伐中的常量数据),对应了此前提到的哈佛体系布局。
System系统总线通过Bus matrix 访问其他外设。Bus matrix即总线矩阵,就是多主(Core、DMA)多从(RAM、APB、外部总线)的交联和仲裁(仲裁采用循环调理算法)。目标是为了提高不同主控单位访问不同外设情况下的带宽。借助Bus matrix,可以实现主控总线到被控总线的访问,这样纵然在多个高速外设同时运行的时间,系统也可以实现并发访问和高效运行。有关总线矩阵的细节在下面这篇文章中有解说:
单片机(二)STM32F407启动流程 - 知乎 (zhihu.com)
2. DMA(Direct Memory Access)
DMA是CPU的小秘书,专门干数据搬运这种简单重复且枯燥的体力活。外部设备向DMA发送数据访问的哀求后,DMA就会获得总线的访控制权,然后到存储器中去访问数据并搬运。可以看到,Cortex-M3内核和DMA都可以通过Bus Matrix去访问Flash、SRAM、FSMC存储器。
有关DMA的先容在此:
http://t.csdnimg.cn/mHf9a
二. 从机部分
1. 存储器:Flash、SRAM、FSMC
这三个我暂时不展开学啦。
Flash闪存中存储了编写的步伐以及步伐中的常量数据, SRAM(Static Random Access Memory)用于存储步伐运行过程中的变量数据。FSMC( Flexible static memory controller)是 STM32中一个很有特色的外设,用于生成硬件时序,资助STM32访问外部的存储器。有关各种存储器的先容可以参考以下博客: 
https://zhuanlan.zhihu.com/p/640008073
https://zhuanlan.zhihu.com/p/640649076
2. 其他外设
从Bus matrix矩阵出来以后,可以看到AHB(Advanced High performance Bus,先辈高性能总线)总线。高性能(我明确重要是宽带宽,就是数据的吞吐量比较大,要求通讯速率比较快)的外设就挂载(意思是通过这条总线内核可以访问到外设)在这条总线上。桥接后是APB(Advanced Peripheral Bus,先辈外设总线),挂载的是低速的外设。中心的桥接是因为AHB和APB的总线协议,总线速率以及数据传输的格式有差异,需要对数据进行转换和缓存。APB2一般和AHB同频(72MHz),而APB1频率较低(36MHz),因此相比APB1,APB2又会毗连稍微重要一点的外设。比如TIM1和TIM8是高级定时器,就挂载在APB2上,而其他定时器TIMx就挂载在APB1上。有关AHB,APB的细节可以参考这篇博客:AHB与APB总线你需要知道的事儿 - 知乎 (zhihu.com)
有关转接桥可以看看下面这篇,别的这篇博文后面也有关于AMBA总线协议(AHB,APB,ASB,AXI协议的合集)的先容链接:
http://t.csdnimg.cn/Y1HVj
(1)AHP上挂载的外设
A. RCC(Reset & Clock Control)
复位与时钟控制。复位包罗系统复位(system reset)、电源复位(Power reset)和备份域重置(Backup domain reset)。时钟是单片机运行的基础,决定了各个模块运行的步调。在单片机中,不管设置什么,都需要先打开对应的时钟信号。RCC中的信号源包罗:
a. 用于驱动系统时钟(系统时钟)
HSI:高速内部时钟,内部时钟源,RC振荡器实现,8MHz
HSE:高速外部时钟,接外部时钟源,晶振实现,4MHz~16MHz
PLL:锁相环,用于倍频,生成比前两者时钟源更高频率的时钟
b. 二级时钟源
LSI:低速内部时钟,驱动独立看门狗,可选择性给待机或者停止模式下主动叫醒提供RTC时钟,RC振荡器实现,40kHz
LSE:低速外部时钟,选择性生成RTC(real-time clock)时钟信号,晶振实现,32.768kHz
时钟源给内核和各种外设提供时钟信号的方式已在数据手册的clock tree中清晰地给出:
https://img-blog.csdnimg.cn/b3332cd0a21146249e76819933c74c66.png
B. SDIO(Secure digital input/output interface)
SDIO模块用于使AHP总线能够读写MMC(MultiMedia Card)、SD存储卡、SDIO卡和CE-ATA接口设备。此中包含SDIO adapter模块和AHB接口模块,前者负责为接入的设备提供时钟信号,向接入设备收发指令和传输数据,后者访问前者中的寄存器,与AHB通讯,向系统发送中断或者DMA哀求。
https://img-blog.csdnimg.cn/0defb4700421479c93b49177cc6e4e30.png
(2)APB上挂载的外设
最后这么一大坨咱们就快速过!我也学不动啦!
ADC(Analog-to-digital converter):模数转换器(模拟信号转数字信号),12bit;
DAC(Digital-to-analog converter):数模转换器,12bit;
UART(Universal Asynchronous Receiver/Transmitter):通用异步收发器,串口通讯(数据串行传输)的一种;
USART(Universal synchronous asynchronous receiver transmitter ):通用同步/异步收发器,串口通讯的一种,特点是通过定义起始位和停止位来控制吸收端和发送端正常传递数据;
SPI(Serial peripheral interface):串行外设接口,串口通讯的一种,特点是通过时钟信号来保证发送端和吸收端传递数据的同步;
I2C(Inter-Integrated Circuit):内部集成电路,串口通讯的一种,特点是有应答响应机制,支持多主多从模式;
附上一位本科博主整理的UART、SPI和I2C之间的区别:
http://t.csdnimg.cn/54uv1
USB(Universal serial bus full-speed device interface):通用串行总线,个人粗浅的感受就是它最大的作用是和个人电脑毗连hhh 
bxCAN(Basic Extended Controller Area Network):CAN是汽车行业常用的串行通讯协议;
GPIO(General Purpose Input Output ):通用输入/输出,通用端口,总线扩展器,用来增加系统的IO口;
https://img-blog.csdnimg.cn/c02c2422085f45c4b5527d4115bb4bcc.png
碎碎念:写到这里真的想找个时间把各种端口的通讯原理都学习整理一下,但是我学习能力真的不太行,学到这我大脑已经宕机了各种博文看不懂一点,以后再好勤学吧,先挖个坑在这~
AFIO(Alternate function I/O and debug configuration ):复用功能输入输出和调试设置,复用的意思是引脚不是单一功能的,大概是有好几个功能,那么具体行驶哪个功能,就需要通过AFIO来设置,这篇博文有讲:
http://t.csdnimg.cn/COiLT
EXTI(External interrupt/event controller):外部中断/变乱控制器, 可分为两大部分功能,一个是产生中断,另一个是产生变乱。中断是单片机工作的重要机制,后面我会好勤学的~
PWR(Power control):电源控制;
BKP(Backup):备份寄存器,备份域里的数据在断电、待机、复位的情况下都不会被删除或修改;
IWDG(Independent watchdog):独立看门狗,用于查抄系统是否正常工作的模块,其实就是一个递减计数器,系统正常运行时数值会不断革新从而确保不会减为0,否则会产生复位信号,有独立时钟信号,用于监督硬件错误;
WWDG(window watchdog):窗口看门狗,时钟信号与系统一致,用于监督软件错误;
RTC(Real-time clock):独立的定时器,掉电后还是可以运行;
TIM(timer):定时器,在生成PWM(脉宽调制波形)中不可或缺。分为高级定时器(Advanced-control timers (TIM1 and TIM8)),通用定时器(General-purpose timers (TIM2 to TIM14))和基本定时器(Basic timers (TIM6 to TIM7))
终于粗略学完STM32的基本框架啦!撒花!接下来就是对各个外设进行学习!偶然机的话也把引脚学一学,现在头脑不太够用啦!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: STM32学习笔记(一):架构(以STM32F103为例)