STM32-StdPeriph函数库使用的预备知识

1.概述

STM32-StdPeriph库是st(意法半导体)官方针对stm32系列单片机编写的固件函数库,由程序、数据结构和宏构成,包括了微控制器所有的性能特征。使用该库能大大减少开发周期,使开发人员得以抛开繁重的硬件细节,将精力集中于算法和功能实现之上。

2.STM32存储结构

一言以蔽之,单片机开发编程就是使用C和汇编语言,对单片机寄存器进行读写操作,从而实现特定功能。因此,了解MCU的存储结构非常重要。stm32单片机的程序、数据、寄存器和IO口统一编址,采用32位总线,最大可寻址空间达4GB。此处解释一下4GB的由来:32位总线可表示2^32=4G个地址,每个地址对应1字节的存储空间。下面以stm32f0xx型单片机为例,介绍MCU通用的存储结构。
stm32f0xx内存映射图
上图来源:stm32f030 reference manual.

3.STM32初始化

单片机上电后,CPU首先采样BOOT0和BOOT1两个引脚的电平值,根据它们的bit组合确定启动模式,若BOOT0和BOOT1已被接地(00模式),则Flash memory的地址(上图中从0x08000000开始的编址区)将被映射到0x00000000。程序从0x00000000开始执行。
Tips:有的同学可能会问:嵌入式系统不是有个bootloader用于系统启动吗,为什么你没有提到?事实上stm32单片机同样有一段bootloader代码,在每片MCU出厂时由厂家烧入system memory,但它的主要作用是通过片上可用的串行外设(如USART、USB及SPI等)下载应用程序到Flash memory,本身并不提供硬件初始化程式。通过BOOT0和BOOT1置位可设置为system memory启动,调用bootloader程序。简单来讲,我们通过SWD接口已将应用程序烧入Flash memory的情况下不需要多此一举。
显然最开始执行的是硬件初始化程序,stm32f0xx系列单片机使用ARM CortexM0内核的MCU,遵循统一的CMSIS接口标准,所以它们的初始化程序已由ARM写好,开发时先从CMSIS库中找到该启动文件,一般格式为startup_stm32f0xx.s(根据具体型号选择),将它加入工程。编译器在编译和链接时会把这段代码放在最低地址处,当程序的最终形态——二进制流通过SWD烧入片上Flash后,首先运行该段代码。
startup_stm32f0xx.s主要完成三件事:1. 分配heap和stack的片上RAM空间;2. 将中断向量表映射到起始地址;3.执行Reset_Handler,进入系统初始化程序,完成后跳转到main()函数入口地址。系统初始化程序的任务是确定系统时钟来源,形成时钟树(分配时钟到各级资源),它的一般格式是system_stm32f0xx.c,同样位于CMSIS库,需事先加入工程。
此后按照main()函数语句顺序执行,mcu进入正常工作状态。
Tips:程序运行时,代码、const数据位于主Flash内存区,CPU通过Flash接口调用指令和数据,根据指令执行寄存器寻址及逻辑运算;全局变量、静态局部变量位于SRAM的静态存储区,它们所占空间已在编译阶段确定;局部变量位于事先分配好的SRAM  stack区内,动态申请的变量位于SRAM  heap区,其空间需人工释放。

4.stm32f0xx.h和core_cm0.h

前面提到,单片机编程的实质是操作寄存器,而这些寄存器都有相应的统一编址。通过阅读参考手册,了解特定寄存器 各位的功能,根据需要置位或复位。stm32单片机片上资源丰富,外设繁多,因此寄存器数目众多。stm32f0xx.h是st官方基于CM0微处理器架构编写的外设寄存器访问层头文件,包含了stm32f0xx设备所有外设寄存器的定义、位定义及内存映射。core_cm0.h是ARM官方基于CM0架构编写的MCU core Peripheral access layer 头文件(尚未找到准确的翻译,此处使用英文)。使用两者及它们包含的其他辅助头文件便能设计出完整的应用代码。但这种读写寄存器的方式显得原始而复杂,也不符合现代软件工程硬件抽象、分层封装的思想。为了给开发人员提供轻便简易的应用编程接口,st官方基于以上文件定义的寄存器和数据类型,遵循其代码风格开发了StdPeriph固件函数库,将寄存器定义为结构或联合类型,对寄存器的操作定义为结构类型,对寄存器的赋值定义为宏,同一性质赋值的集合定义为枚举类型,它们通过特定功能的函数实现调用。由此,单片机应用开发者只需根据库提供的接口函数,就能完成各项资源的配置和初始化,以及完成一些常用的外设操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值