STM32F101xx 系列微控制器
STM32F101xx基于高性能32位RISC 的ARM Cortex™-M3核,工作频率为36MHz。片上集成了高速存储器(Flash最多可达512K,SRAM最多可达48K)和通过APB总线连接的丰富和增强的外设和I/0。所有的设备都提供标准的通信接口(最多可有两个I2C接口,三个SPI接口和五个USART接口)。片上还带有一个12位的ADC,一个12位的DAC和九个16位的计时器。表2.1和表2.2是STM32F101xx系列微控制器器件型号总揽,可作为选件参考。
一、 特点
1. 内核:ARM 32位Cortex™-M3 CPU
最高工作频率36MHz,1.25DMIPS/MHz。
单周期乘法和硬件除法。
2. 存储器
片上集成32到512K的Flash存储器。
6到48K的SRAM存储器。
可变静态存储管理器,带四个片选,可支持Flash,SRAM,PSRAM,NOR和NAND模式(STM32F101xC,STM32F101xD和STM32F101xE独有)。
3. 时钟,复位和电源管理
2.0到3.6V的电源供电和I/O接口的驱动电压。
POR,PDR和可编程的电压探测器(PVD)。
4到16MHz的晶振。
内嵌出厂前调校的8MHz RC振荡电路。
内部40KHz的RC振荡电路。
用于CPU时钟的PLL。
带校准用于RTC的32KHz的晶振。
4. 低功耗
三种低功耗模式:休眠,停止和待机模式。
为RTC和备份寄存器供电的VBAT。
5. 调试模式
串行调试(SWD)和JTAG接口。
6. DMA
最多12通道DMA控制器。
支持的外设:定时器,ADC,DAC,SPI,I2C和USART。
7. 1个12位的us级的A./D转换器(16通道)
A/D测量范围:0到3.6V
片上集成一个温度传感器。
8. 2通道12位D/A转换器(STM32F101xC,STM32F101xD和STM32F101xE独有)
9. 最多高达112个的快速I/O端口
根据型号的不同,有26,37,51,80和112的I/O端口,所有的都可以映射到16个外部中断向量。除了模拟输入,所有的都可以接受5V以内的输入。
10. 最多多达9个定时器
4个16位定时器,每个定时器有4个IC/OC/PWM或者脉冲计数器。
2个看门狗定时器(独立看门狗和窗口看门狗)。
SysTick定时器:24位倒计数器。
2个16位基本定时器(用于驱动DAC,STM32F101xC,STM32F101xD和STM32F101xE独有)。
11. 最多多达10个通信接口
2个I2C接口(SMBus/PMBus)。
5个USART接口(ISO 7816接口,LIN,IrDA兼容,调制控制)。
3个SPI接口(18Mbit/s)。
12. ECOPACK®封装
二、总体结构
STM32F101xx的总体结构框图如图2.1所示。内部总线和两条APB总线将片上系统和外设资源紧密地连接起来,其中内部总线是主系统总线,连接了CPU、存储器和系统时钟等。APB1总线连接高速外设,APB2总线连接系统通用外设和中断控制。I/O端口包括PA、PB、PC、PD、PE、PF和PG七个16位的端口,其他的外设接口引脚都和I/O端口的引脚功能复用,图中的AF即表示功能复用引脚。
1. AF = I/O引脚的备用功能。
2. TA = –40 °C 到+85 °C (结温高达125 °C)。
图2.1 STM32F101xx总体结构框图
(一) 系统功能
1. 集成嵌入式Flash和SRAM存储器的ARM® CortexTM-M3内核
ARM Cortex™-M3处理器是用于嵌入式系统的最新的一代的ARM处理器。用于提供一个满足MCU实现需要的低开销平台,具有更少的引脚数和更低的功耗,并且提供了更好的计算表现和更快的中断系统应答。和8位/16位设备相比,ARM Cortex™-M3 32位RISC处理器提供了更高的代码效率。STM32F101xx微控制器带有一个嵌入的ARM核,所以可以兼容所有的ARM工具和软件。
2. 嵌入式Flash存储器和RAM存储器
内置了多达512K的嵌入式Flash,可用于存储程序和数据。多达48K的嵌入式SRAM可以以CPU时钟速度进行读写(不带等待状态)。
3. 可变静态存储控制器(FSMC)
FSMC嵌入在STM32F101xC,STM32F101xD和STM32F101xE中,带有四个片选,支持下面四种模式:Flash,RAM,PSRAM,NOR和NAND。功能描述如下:
三个FSMC中断线经过OR操作之后连接到NVIC。
没有读写FIFO。
除PCCARD之外,代码都是从外部存储器执行。
不支持boot。
目标频率等于SYSCLK/2,所以当系统时钟是36MHz的时候,外部访问按照18MHz进行。
4. 嵌套矢量中断控制器(NVIC)
STM32F101xx系列微控制器嵌入了一个嵌套矢量中断控制器,可以处理43个可屏蔽中断通道(不包括CortexTM-M3的16根中断线),提供16个中断优先级。
紧密耦合的NVIC实现了更低的中断处理延迟。
直接向内核传递中断入口向量表地址。
紧密耦合的NVIC内核接口
允许中断提前处理。
对后到得更高优先级的中断进行处理。
支持尾链。
自动保存处理器状态。
中断入口在中断退出的时候自动恢复,不需要指令干预。
这一硬件模块提供了更加灵活的中断管理,并且有最小的中断延迟。
5. 外部中断/事件控制器(EXTI)
外部中断/事件控制器由用于19条产生中断/事件请求的边沿探测器线组成。每条线可以被单独配置用于选择触发事件(上升沿,下降沿或者两者都可以),也可以被单独屏蔽。有一个挂起寄存器来维护中断请求的状态。当外部线上出现长度超过内部APB2时钟周期的脉冲,EXTI能够探测到。多达112个GPIO连接到16个外部中断线。
6. 时钟和启动
在启动的时候还是要进行系统时钟选择,但复位的时候内部8MHz的晶振被选作CPU时钟。可以选择一个外部的4-16MHz的时钟,并且会被监视来判定是否成功。在这期间,控制器被禁能并且软件中断管理也随后被禁能。同时,如果有需要(例如碰到一个间接使用的晶振失败),PLL时钟的中断管理完全可用。
多个预比较器可用于配置AHB频率,包括高速APB(PB2)和低速APB(APB1)。AHB和APB最高的频率为36MHz。
7. Boot模式
在启动的时候,boot引脚被用来在三种boot选项中的选择一种:
从用户Flash导入
从系统存储器导入
从SRAM导入
boot导入程序位于系统存储器,用于通过USART1重新对Flash存储器进行编程。
8. 电源供电方案
VDD,电压范围为2.0到3.6V:外部电源通过VDD引脚提供,用于I/O和内部调压器。
VSSA,VDDA,电压范围为2.0到3.6V:外部模拟电压输入,用于ADC,复位模块,RC和PLL,在VDD范围之内(ADC被限制在2.4V),VSSA和VDDA必须相应连接到Vss和VDD。
VBAT,电压范围为1.8到3.6V:当VDD无效的时候,为RTC、外部32kHz晶振和备份寄存器供电(通过电源切换实现)。
9. 电源管理
设备有一个完整的上电复位(POR)和掉电复位(PDR)电路。这条电路一直有效,用于确保从2V启动或者掉到2V的时候进行一些必要的操作。当VDD低于一个特定的下限VPOR/PDR的时候,不需要外部复位电路,设备也可以保持在复位模式。
设备特有一个嵌入的可编程电压探测器(PVD),PVD用于检测VDD,并且和VPVD限值比较。当VDD低于VPVD或者VDD大于VPVD的时候会产生一个中断。中断服务程序可以产生一个警告信息或者将MCU置为一个安全状态。PVD由软件使能。
10. 电压调节
调压器有三种运行模式:主(MR),低功耗(LPR)和掉电。
- MR用在传统意义上的调节模式(运行模式)。
- LPR用在停止模式。
- 掉电用在待机模式:调压器输出为高阻,核心电路掉电,包括零消耗(寄存器和SRAM的内容不会丢失)。
11. 低功耗模式
STM32F101xx支持三种低功耗模式,从而在低功耗、短启动时间和可用唤醒源之间达到一个最好的平衡点。
- 休眠模式。在休眠模式中,只有CPU停止工作,所有的外设继续运行,在中断/事件发生的时候唤醒CPU。
- 停止模式。停止模式允许以最小的功耗来保持SRAM和寄存器的内容。1.8V区域的时钟都停止,PLL,HSI和HSE RC振荡器被禁能,调压器也被置为正常或者低功耗模式。设备可以通过外部中断线从停止模式唤醒。外部中断源可以使16个外部中断线之一、PVD输出或者TRC警告。
- 待机模式。待机模式追求最少的功耗。内部调压器被关闭,这样1.8V区域被断电。PLL、HSI和HSE RC振荡器也被关闭。在进入待机模式之后,除了备份寄存器和待机电路,SRAM和寄存器的内容也会丢失。当外部复位(NRST引脚)、IWDG复位、WKUP引脚出现上升沿或者TRC警告发生的时候,设备退出待机模式。
注:进入停止或者待机模式的时候,TRC、IWDG和相关的时钟源不会停止。
(二) 片上外设
STM32F101xx有以下几种片内外设:
1. DMA
12通道的通用DMA(DMA1有7个通道,DMA2有五个通道)可用于存储器到存储器、外设到存储器和存储器到外设的传输。DMA控制器支持循环缓冲器管理,从而避免了在到达缓冲区末端的时候产生中断。
每个通道都连接到专用的硬件DMA请求,同时支持软件触发。由软件进行配置,源到目标的传输大小是独立的。
DMA可以和一些主要外设一起使用,包括SPI、I2C、USART、通用定时器TIMx、基本定时器、DAC和ADC。
2. RTC(实时时钟)和备份寄存器
RTC和备份寄存器通过一个开关来控制供电,当VDD有效的时候通过VDD供电,否则通过VBAT供电。备份寄存器(10个16位寄存器)可以用来在VDD无效的保存数据。
RTC提供了一系列持续运行的计数器,可以结合软件用作日历功能,并且能够提供警告中断和周期性中断。由32.768kHz外部晶振,内部低功耗RC振荡器或者高速外部时钟经过128比例分割来提供时钟。内部低功耗RC通常有40kHz频率。RTC可以通过一个外部512Hz输出来校准从而来补偿外不自然晶振的偏离。RTC特有一个用于长期测量的32位的可编程计数器,结合比较寄存器可用于产生一个警告。一个20位的预比较器用作时基时钟,默认配置成从一个32.768kHz的时钟产生一个1秒的时基。
3. 独立看门狗
独立看门狗基于12位的倒计数器和8位的预比较器。由一个独立的40kHz的内部RC提供时钟。由于和主时钟独立工作,所以它可以工作在停止和待机模式。可以用作在系统出问题的时候来复位设备,也可以作为一个空转的定时器来用于应用程序的定时器管理。硬件或者软件都可以通过选项字节来配置,计数器在调试模式下可以冻结。
4. 窗口看门狗
窗口看门狗基于一个在空转时可设置的7位的倒计数器。可以用作在系统出问题的时候来复位设备。由主时钟提供时钟源。能够实现提早警告中断并且计数器在调试模式的时候可以冻结。
5. SysTick定时器
该定时器是OS专用,但也可以用作标准的倒计数器。它的特征是:
- 一个24位的倒计数器
- 自动重载能力
- 当计数器为0时产生的系统中断是可屏蔽的。
- 可编程的时钟源
6. 通用定时器(TIMx)
STM32F101xx设备最多自带4个同步标准定时器。这些定时器基于一个16位自动重载顺序/倒序计数器和一个16位的预比较器。每个定时器特有分别用于输入捕获、输出比较、PWM或者单脉冲模式输出的4个独立通道。在最大的封装下可以提供多达12输入捕获/输出比较/PWM。通过同步连接特性或者事件链,定时器可以一起工作。
定时器在调试模式下可以冻结。任何一个标准的定时器都可以用于产生PWM输出。每一个定时器可以产生独立的DMA请求。
7. 基本定时器TIM6和TIM7
这些定时器用于产生DAC触发,也可以用作通用的16位定时器。
8. I2C总线
最多可有两个可以工作在多主机模式和从模式下的I2C总线接口,支持标准和快速模式。都支持双从机寻址(只能是7位)和7/10位主机模式下寻址.内置硬件CRC产生和验证模块。都支持DMA,支持SMBus2.0/PM Bus。
9. 通用同步/异步收发器(USART)
USART接口最多可以2.25Mbit/s的速度通信。对CTS和RTS信号使用硬件管理,支持IrDA SIR ENDEC,兼容ISO7816并且具有LIN主/从性能。USART接口支持DMA。
10. 串行外设接口(SPI)
设备最多可有3个SPI接口,最多可以18 Mbits/s的速度在全双工和单工的主机和从机模式下通信。3位预比较器提供了8种主机模式频率,桢长可以配置为8位或者16位。硬件CRC产生/验证模块支持基本的SD Card/MMC模式。SPI接口都支持DMA。
11. GPIO(通用输入/输出)
每一个GPIO引脚都可以由软件配置出输出(上拉或者开漏),输入(带上拉或下拉或者不带上拉或下拉)或者外设备用功能。大部分的GPIO引脚和数字或者模拟备用功能共享。所有的GPIO都支持高电流。
I/O备用功能配置可以锁定,必须通过一定特定的序列才可以开锁,从而避免对I/O寄存器的虚假写操作。
12. ADC(模数转换器)
12位的模数转换器有多达16个外部通道,可以以单次或扫描模式进行转换。在扫描模式下,自动转换在一组选定的模拟输入上进行。
ADC支持DMA。特有的模拟看门狗可以对每个通道的转换电压进行精准监控。如果转换电压在设置的限制之外会产生一个中断。
13. DAC(数模转换器)
DAC带有两个可缓冲通道,可以将两路数字信号转化为两路模拟信号输出。具有以下的特性:
- 2个转换器:每个输出通道一个
- 8位或者12位的单一输出
- 12位模式下支持左对齐或者右对齐
- 支持同步更新
- 可产生噪声波
- 可产生三角波
- 双DAC通道可以独立转换或者同时转换
- 每个通道都支持DMA
- 外部触发转换
- 输入参考电压为VREF+
STM32F101xC,STM32F101xD,STM32F101xE使用了7个DAC触发输入。DAC通道通过定时器更新输出来触发,DAC每个通道可以连接到不同的DMA通道。每个通道可以独立被DMA控制器处理。
14. 温度传感器
温度传感器用于根据温度的变化来产生一个线性的电压。转换的范围在2V到3.6V。温度传感器内部连接到ADC_IN16输入通道,从而把传感器输出电压转换为数字值。
15. 串行线JTAG调试端口(SWJ-DP)
芯片嵌入了ARM SWJ-DP接口,并且组合了JTAG和串行线调试端口。JTAG TMS和TCK引脚分别和SWDIO和SWCLK复用。如果要在JTAG-DP和SW-DP之间切换,只需要在TMS输入一个特定的序列