前言
ST公司作为全球高级半导体制造商之一,是ARM公司Cortex-M3最主要的合作方。ST公司于2007年6月20日推出了Cortex-M3内核的STM32微控芯片,STM32系列微控芯片又分成两个子系列。分别是,工作频率在36MHZ的STM32F101系列,工作频率在72MHZ的STM32F103系列,后者较前者带有更多RAM及外设。这两个系列芯片在程序方面有很好的兼容性,有相同的Flash,使程序开发及升级变得更加方便。
一、地址映射和寄存器映射
stm32是一种高性能、低成本、低功耗的,采用ARM公司的cortex-M内核的32位单片机。
stm32f103
基本型:STM32F101R6、STM32F101C8、STM32F101R8、STM32F101V8、STM32F101RB、STM32F101VB
增强型:STM32F103C8、STM32F103R8、STM32F103V8、STM32F103RB、STM32F103VB、 STM32F103VE、STM32F103ZE
此处主要以STM32F103C8T6系列介绍
内容 | 含义 |
---|---|
STM32 | STM32代表ARM Cortex-M内核的32位微控制器 |
F | 代表芯片子系列 |
103 | 代表增强型系列 |
C | 引脚数量:T=36, C=48, R=64, V=100 , Z =144 |
8 | 闪存容量:4=16K,6=32K,8=64K,B=128K,C=256K,D=384K,E=512K |
T | 表封装 |
6 | 工作温度范围:6代表-40 — 85℃,7代表-40 —105℃ |
H代表BGA封装
T代表LQFP封装
U代表VFQFPN封装
Y代表WLCSP64
1、寄存器
寄存器其实就是一种常用的时序逻辑电路,但是只包含存储电路。寄存器是寄存功能的储存单元,用来暂存指令、数据和地址。寄存器有很高的读写速度,因此在寄存器之间传输数据非常快。寄存器作为一个存储的地方类比到现实就当存在一个地址(就好比我们现实中某地的地址),不同的寄存器对应不同的地址,根据其地址就能对其进行操作。问寄存器这个动作就是访问寄存器。
2、地址映射和寄存器映射
我们所熟知的映射就是函数映射,一个集合到另一个集合的对应关系,前一集合对后一个集合的映射即函数。本质其实就一样,但是前一集合是CPU后一个集合是外围设备,对应关系就是地址总线。由百科可知,为了保证CPU执行指令是可正确访问存储单元,需要将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址,这一过程成为地址映射。地址是由芯片厂商和制造商分配,给存储器分配地址这一过程就是寄存器映射。
二、GPIO端口的初始化设置
GPIO(英语:General-purpose input/output),通用型之输入输出的简称,用于电信号在电路中的输入输出,以方便控制电路部件。控制GPIO是通过调用寄存器实现的,每组IO口含下面7个寄存器。也就是7个寄存器,一共可以控制一组GPIO的16个IO口。- GPIOx_CRL :端口配置低寄存器,- GPIOx_CRH:端口配置高寄存器,- GPIOx_IDR:端口输入寄存器,- GPIOx_ODR:端口输出寄存器,- GPIOx_BSRR:端口位设置/清除寄存器,- GPIOx_BRR :端口位清除寄存器,- GPIOx_LCKR:端口配置锁存寄存器。每个 GPI/O 端口有两个 32 位配置寄存器(GPIOx_CRL,GPIOx_CRH),两个 32位数据寄存器(GPIOx_IDR,GPIOx_ODR),一个 32 位置位/复位寄存器(GPIOx_BSRR),一个 16 位复位寄存器(GPIOx_BRR)和一个 32 位锁定寄存器(GPIOx_LCKR)。根据数据手册中列出的每个 I/O 端口的特定硬件特征, GPIO 端口的每个位可以由软件分别配置成多种模式。
每个 I/O 端口位可以自由编程,然而 I/0 端口寄存器必须按 32 位字被访问(不允许半字或字节访问)。GPIOx_BSRR 和 GPIOx_BRR 寄存器允许对任何 GPIO 寄存器的读/更改的独立访问;这样,在读和更改访问之间产生 IRQ 时不会发生危险。
1、时钟配置
I/O端口位的基本结构图
stm32的时钟是由内部或外部振荡器产生的“频率”,而被人们形象的称为“系统时钟”。之所以用时钟,是因为stm32尽管功能强大,能做很多事,但其电量等消耗伴随着更加严重。如果stm32不引入时钟的话,就像51一样外设全开,耗电就时分严重,故为了解决这个问题,st公司引入了“时钟概念”,即使用哪个外设就给哪个外设时钟(频率),不使用的就关掉(不震荡)。此做法降低了功耗,使得续航持久。时钟控制名字叫做RCC,属于AHB总线。GPIOB属于APB2。
GPIO输入模式:输入浮空,输入上拉,输入下拉,模拟输入;
输出方式:开漏输出,开漏复用输出,推挽输出,推挽复用输出。
2、输入输出模式设置
使能GPIO时钟,RCC_APB2PeriphClockCmd。
设置GPIO参数:输出OR输入,工作模式,端口翻转速率;
- 输入模式
浮空输入模式:浮空输入状态下,IO 的电平状态是不确定的,完全由外部输入决定,如果在该引脚悬空的情况下,读取该端口的电平是不确定的。可做KEY按键识别。
上下拉输入模式:内部设有上拉和下拉电阻,当外部电路为低电平,IO口设为下拉模式,当外部电路为低电平,IO口设为上拉模式。
模拟输入:用作内部ADC输入或DAC输出,预防干扰。
2.输出模式
- 推挽输出模式
可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。
推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。 - 开漏输出模式
开漏输出就是不输出电压,控制输出低电平时引脚接地,控制输出高电平时引脚既不输出高电平,也不输出低电平,为高阻态。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。 - 推挽、开漏复用模式
可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)
3、最大速率设置
GPIO的输出速率:GPIO电平每秒切换的最大次数, 单纯GPIO意义不大,不过在通讯方面对于GPIO是有要求的。GPIO口的驱动电路响应速度,不是输出信号的速度。输出信号的速度与程序有关,通过选择速度来选择不同的驱动电路,降低功耗控制噪声。
这个输出速率主要体现I/O驱动电路的输出反应能力,通过选择不同的输出驱动速率,实现最佳的噪声与和功耗控制。不难理解,选择输出驱动速率越高,噪声也越大,相应的芯片功耗也会越大。所以对于这个输出频率的选择,不要太随意,合适就好。在满足应用的需求的前提下,就不要随意往高端速率选择。
当STM32的GPIO端口设置为输出形式时,有三种速度能够挑选:2MHz、10MHz和50MHz,这个速度是指I/O口驱动电路的速度,是用来挑选不同的输出驱动模块,到达最佳的噪声控制和降低功耗的意图。
- GPIO初始化步骤
使能GPIOx口的时钟
指明GPIOx口的哪一位,这一位的速度大小以及模式
调用GPIOx初始化函数进行初始化
调用GPIO-SetBits函数,进行相应位的置位
三、总结
此处的映射要与以前数学中提到的映射相类比,同时,在一定程度上地址和寄存器与现实的实际情况可以相比拟。
四、参考文献
https://zhuanlan.zhihu.com/p/179094397
http://t.csdn.cn/NUUhT
http://t.csdn.cn/A8Z3C