前情回顾

通过前面两篇文章的学习,我们已经对STM32有了一定的了解,知道了STM32单片机的基本分类和不同产品间的特点等知识,今天起围绕STM32F103xx继续深入浅出地学习单片机编程。

一、总线知识

1.1 总线

在拿到芯片资料后,第一点需要关注的就是芯片的系统架构该架构主要由驱动单元和被动单元两部分组成。

  • 驱动单元

Cortex®-M3 core的D总线和系统总线

通用DMA

  • 被动单元

内部SRAM

内部FLASH

FSMC(可连接大屏幕)

AHB 到 APB 的桥(AHB2APBx),它连接所有的 APB 外设。

如下图所示,可以从图中看到Cortex-M3 核心,该内核是ARM公司的数字电路流片的产品,数字电路也就是逻辑电路经过FPGA测试符合要求后流片产生IP(知识产权),这是ARM公司的业务。然后ARM公司通过授权把cortex内核卖给ST公司等芯片公司。芯片公司将内核通过 ICode,DCode,System三种总线,与外设进行连接(如图中的DMA、定时器、USART、I2C等)。

这里补充一下总线知识点:

 总线(Bus)是计算机各种功能部件之间传送信息的公共通信干线,它是由导线组成的传输线束, 按照计算机所传输的信息种类,计算机的总线可以划分为数据总线地址总线控制总线,分别用来传输数据、数据地址和控制信号

AHB(Advanced High-performance Bus)是AMBA 总线的一部分,而AMBA是由ARM公司研发推出的一种高级微控制器总线架构(Advanced Microcontroller Bus Architecture)。其中AMBA包含了四种不同的总线标准,分别是:

  • AHB

 AHB总线互联

  • ASB
  • APB
  • AXI

其中AXI是在AMBA3.0的协议中增加的,熟悉xilinx FPGA的小伙伴们应该是比较熟悉的,可以用于ARM和FPGA的高速数据交互。

剩下的三种是在AMBA2.0协议中定义的总线标准:

  • AHB是高级高性能总线,通常用于CPU和高性能设备之间的交互,类比于现代PC的北桥。
  • ASB常用于高性能系统模块间的交互,在开发中相比剩下的几种不是非常常用。
  • APB(Advanced Peripheral Bus),外围总线的意思。该总线协议是ARM公司提出的AMBA总线结构之一,几乎已成为一种标准的片上总线,APB主要用于低带宽的周边外设之间的连接,例如UART、1284等,它的总线架构不像AHB支持多个主模块,在APB里面唯一的主模块就是APB 桥APB和AHB相连接,在STM32中,APB总线分为APB1和APB2两种,分别挂载不同的设备。其中,APB1负责DA,USB,SPI,I2C,CAN,串口2345,普通TIM; APB2负责AD,I/O,高级TIM,串口1

1.2 时钟频率

APB1的最大时钟频率要低于APB2的最大时钟频率。

时钟频率是一个非常重要的知识点,和大家日常接触到的CPU主频一样,就可简单理解为频率越高数据传输和处理速度就越快。如下图所示,STM32单片机各个外设均工作在不同的时钟频率下,就是各个外设的工作节奏,如同大家的生活节奏。

二、STM32F103系统架构

2.1 STM32F103XX工作原理

STM32F103XX的单片机实物图如下图所示,芯片的丝印信息给出了芯片的型号,生产地址以及批次号等。型号具体含义参见《零基础入门STM32编程(一)》

STM32F103XX的原理框图如下图所示。单片机芯片由3.6V外部电源供电,系统内核Cortex-M3连接I-bus(指令总线),将指令从存储器中取到Cortex-M3中。所以这条总线与内部的flash连着;cortex-M3通过D-bus(数据总线)从存储器中取数据,可以用于变量的载入或者debug;cortex-M3通过System总线用来加载外设或者SRAM的数据,这条总线的另一端连接着SRAM,AHB外设(包括APB1/APB2外设)。

这里提到了一个专业词汇:外设,是指STM32中除了内核Cortex-M3 CPU和总线之外的硬件电路,如下图中的普通IO、定时器(TIM)、串口(UART)、SPI等硬件电路。这里的外设进一步分为内部外设和外部外设两种。顾名思义,内部外设是ST公司已将一些常用的外部电路集成到了购买的STM32F103XX单片机电路中,方便用户直接使用;如果这些集成在单片机中的外设还不能满足用户的工作需求,那么就需要用户自己连接自己的硬件设备了,如连接摄像头和显示屏等。

从下图可以看出,一些常用外设分别挂在在APB1和APB2总线上。APB1的时钟频率限速于36MHz,主要挂载了普通TIM定时器、USART2、I2C、CAN、USB和SRAM等外设;APB2的时钟频率限速于72MHz,主要挂载了通用IO、TIM1定时器、SP1、USART1、温度传感器和ADC等外设。

 2.2 内置外设的种类和数量

STM32F103XX的内置外设的组成见下表,该系列的USART口仅有2个,CAN口1个,定时器TIM共3个,麻雀虽小五脏俱全,后面的学习将围绕这些外设展开。 

2.3 主要参数分析

  • 主频

STM32F103XX的最大主频为72MHz,从下图可知,系统时钟的来源分为内部8MHz时钟和外部16MHz时钟两种。此时可知不论是内部时钟还是外部时钟均没有达到72MHz,此时STM32单片机提供了一种叫做PLL(锁相环)的电路,帮助我们实现任务工作频率的愿望。

首先,讲解内部8MHz时钟电路,8MHz晶振的输出分两路,一路直接输出至SW(选择开关);另一路经分频后得到4MHz频率(8MHz除2)进入PLLMUL(锁相环)进行倍频(4MHz频率的整数倍,此时最大时钟4MHz*16=64MHz)后输出至SW(选择开关);由内核根据程序配置控制SW(选择开关)选择时钟来源,供芯片使用。

 其次,分析外部时钟源电路。先看内部晶振的频率精度,见下表,从表中可知,精度为2%。

对于高精度ADC采集应用而言,内部晶振的精度远不能满足,因此STM32可接外部高精度晶振,主要可分为有源晶振和无源晶振。

常见的温补晶振如下图所示,精度有±0.25ppm、±0.6ppm、±1.0ppm、±2.0ppm等,ppm为百万分之一,可见远高于内部晶振精度。比如,12MHz晶振偏差为±20ppm,表示它的频率偏差为12×20Hz=±240Hz,即频率范围是(11999760~12000240Hz)。

无源晶振

无源晶振为2只引脚,频率精度低于温补精度。

外接晶振最大频率不超过16MHz,可分两路进入芯片,一路直接进入PLLXTPRE;另一路分频后进入芯片的PLLXTPRE,最后均输出至SRC与内部晶振汇合。

Logo

开源、云原生的融合云平台

更多推荐