干货 | 了解库开发,我们从STM32标准库学起
扫描二维码
随时随地手机看文章
❝摘要:从STM32新建工程、编译下载程序出发,让新手由浅入深,尽享STM32标准库开发的乐趣。❞自从CubeMX等图像配置软件的出现,同学们往往点几下鼠标就解决了单片机的配置问题。对于追求开发速度的业务场景下,使用快速配置软件是合理的,高效的,但对于学生的学习场景下,更为重要的是知其然并知其所以然。以下是学习(包括但不限于)嵌入式的三个重要内容,1、学会如何参考官方的手册和官方的代码来独立写自己的程序。2、积累常用代码段,知道哪里的问题需要哪些代码处理。3、跟随大佬步伐,一步一个脚印。首先:我们都知道编程时一般查的是《参考手册》,而进行芯片选型或需要芯片数据时,查阅的是《数据手册》。此外市面上所有关于STM32的书籍都是立足于前二者( Cortex内核手册)进行编著。其次:要分清什么是内核外设与内核之外的外设,为了便于区分,按照网上的一种说法,将“内核之外的外设”以“处理器外设”代替。再者:如今很少使用标准库了,都是HAL库,但作为高校目前教学方式,我们将以STM32f10xxx为例对标准库开发进行概览。
一、STM32 系统结构
STM32f10xxx 系统结构内核IP
从结构框图上看,Cortex-M3 内部有若 干个总线接口,以使 CM3 能同时取址和访内(访问内存),它们是:指令存储区总线(两条)、系统总线、私有外设总线。有两条代码存储区总线负责对代码存储区(即 FLASH 外设)的访问,分别是 I-Code 总线和 D-Code 总线。I-Code 用于取指,D-Code 用于查表等操作,它们按最佳执行速度进行优化。系统总线(System)用于访问内存和外设,覆盖的区域包括 SRAM,片上外设,片外 RAM,片外扩展设备,以及系统级存储区的部分空间。私有外设总线负责一部分私有外设的访问,主要就是访问调试组件。它们也在系统级存储区。还有一个 DMA 总线,从字面上看,DMA 是 data memory access 的意思,是一种连接内核和外设的桥梁,它可以访问外设、内存,传输不受 CPU 的控制,并且是双向通信。简而言之,这个家伙就是一个速度很快的且不受老大控制的数据搬运工。处理器外设(内核之外的外设)
从结构框图上看,STM32 的外设有 串口、定时器、IO 口、FSMC、SDIO、SPI、I2C 等,这些外设按 照速度的不同,分别挂载到 AHB、APB2、APB1 这三条总线上。二、寄存器
什么是寄存器?寄存器是内置于各个 IP 外设中,是一种用于配置外设功能的存储器,并且有想对应的地址。一切库的封装始于映射。是不是“又臭又长”,如果进行寄存器开发,就需要怼地址以及对寄存器进行字节赋值,不仅效率低而且容易出错。来,开个玩笑。你也许听说过“国际 C 语言乱码大赛(IOCCC)”下面这个例子就是网上广为流传的 一个经典作品:#include
main(t,_,a)char *a;{return!03?main(-79,-13,a main(-87,1-_,
main(-86,0,a 1) a)):1,t<_?main(t 1,_,a):3,main(-94,-27 t,a)