意法半导体是由意大利法国两家半导体企业合并而成,我们所说的STM32F103C8T6是属于市场上用得比较广泛的一种型号,意法提供的标准外设库对 STM32片上资源进行了封装,标准库和HALL库相比,标准外设库比较接近于传统的寄存器操作,国产GD32微控制器在很多方面都可以移植。
STM32F103C8T6基于 ARM 32位 Cortex™-M3内核,电压使用范围是2.0V ~ 3.6V,工作频率最高可以达到72MHz,内部采用64K或128K字节 Flash程序存储器,以及高达20K字节的 SRAM数据存储器;内置 CRC循环冗余校验以及 96位编码( 24位的十六进制数)的芯片唯一序列号。
它的主系统由 4个控制单元(DCode总线D-bus、系统总线S-bus、通用DMA1、通用DMA2)以及 4个受控单元(内部SRAM、内部Flash、FSMC、AHB到 APB的桥AHB2APBx)组成,它们通过一个多级的 AHB总线相互进行连接。
ICode总线:连接 M3内核指令总线与 Flash的指令接口,主要作用是进行指令预取。
DCode总线:连接 M3内核 DCode总线与 Flash的数据接口,主要作用是完成调试访问和常量加载。
System总线:连接 M3内核系统总线与总线矩阵 Bus Matrix,用于协调内核与 DMA之间的通信。
DMA总线:连接 DMA的 AHB主接口与总线矩阵 Bus Matrix,用于协调 DCode和 DMA对 SRAM、Flash以及其它外设的访问。
Bus Matrix总线矩阵:利用轮换算法管理内核系统总线与 DMA主总线之间访问的仲裁,由 4个控制单元(DCode、系统总线、DMA1和 DMA2总线)以及 4个受控单元(FLITF、SRAM、FSMC、AHB2APB桥)组成。
AHB/APB bridges:两个 AHB/APB桥提供了 AHB与 2条 APB总线之间的同步连接,APB1操作速度低于36MHz,APB2操作速度最高可达72MHz。每次进行复位操作后,除 SRAM和 FLITF以外的外设都会被关闭。使用外设之前,必须通过设置寄存器RCC_AHBENR打开该外设的时钟。
时钟系统
由于 STM32外设资源众多,工作的时钟频率各不相同,所以采用了多达 5个时钟源:片上经过出厂调校的8MHz RC振荡器系统时钟HSI,以及带校准的40kHz RC振荡器作为实时时钟LSI,也可以采用外置4 ~ 16MHz晶体振荡器作为系统时钟HSE,以及带校准功能的32kHz RTC振荡器作为实时时钟LSE;最后还内置了用于对 CPU时钟进行倍频的的PLL锁相环。
当HSI作为PLL时钟的输入时,最高系统时钟频率只能达到64MHz。当使用 USB功能时,要同时使用HSE和PLL,而且 CPU的频率必须为48MHz或72MHz。当需要的ADC采样时间为1μs的时候,**APB2**必须设置为14MHz、28MHz或56MHz。
GPIO
STM32F103C8T6采用 LQFP48方式封装,一共拥有 37个 I/O引脚,被分为PA(15个)、PB(15个)、PC(3个)、PD(2个)、PE(0个)五个组,所有 I/O接口可以映像到 16个外部中断,并且大部份端口都可以可以兼容5V信号。每个 I/O端口可以接受或输出8mA电流,灌电流则可达到20mA。
每个 GPIO端口都拥有两个 32位配置寄存器GPIOx_CRL和GPIOx_CRH,两个 32位数据寄存器GPIOx_IDR和GPIOx_ODR,一个 32位置位/复位寄存器GPIOx_BSRR和一个 16位复位寄存器GPIOx_BRR和一个 32位锁定寄存器GPIOx_LCKR。
GPIO端口的每个位都可以通过软件将其配置为输出(推挽输出GPIO_Mode_Out_PP、开漏输出GPIO_Mode_Out_OD)、输入(浮空输入GPIO_Mode_IN_FLOATING、上拉输入GPIO_Mode_IPU、下拉输入GPIO_Mode_IPD、模拟输入GPIO_Mode_AIN)、复用(复用推挽输出GPIO_Mode_AF_PP、复用开漏输出GPIO_Mode_AF_OD)功能。
除了模拟输入功能的引脚之外,所有 GPIO都拥有大电流通过能力。根据我们的需要可以对 GPIO进行锁定,主要是防止意外擦写 GPIO相关的寄存器。位于APB2上的 GPIO引脚,其脉冲转换速度可达18MHz。
定时器
STM32F103C8T6拥有 7个定时器,其中 1个用于电机控制的 16位 PWM高级控制定时器、3个 16位通用定时器、2个看门狗定时器(包含独立型的和窗口型)、1个 24位自减型系统嘀嗒定时器。
高级控制定时器 TIM1:TIM1可以被视为分配到 6个通道的三相 PWM发生器,具有带死区插入的互补 PWM输出,还可以用作完整的通用定时器;其四个独立通道可分别用于:输入捕获、输出比较、产生边缘或中心对齐模式的PWM、单脉冲输出。当配置为 16位普通定时器时,与TIM2、TIM3、TIM4具有相同功能;配置为 16位 PWM发生器时,具有0 ~ 100%的全调制能力。
通用定时器 TIM2、TIM3、TIM4:STM32F103C8T6内置有 3个可同步运行的标准定时器,每个定时器都拥有一个 16位自动加载递加/递减计数器、一个 16位预分频器、4个独立通道,每个通道都可用于输入捕获、输出比较、PWM、单脉冲输出,它们还可以通过定时器链接功能与高级控制定时器 TIM1协同工作,从而提供同步或事件链接功能。
独立看门狗定时器 IWDG:用于发生问题时复位整个系统,或作为一个自由定时器为应用程序提供超时管理;内部基于 12位递减计数器和 8位预分频器,并由内置40kHz的 RC振荡器提供时钟,由于该 RC振荡器独立于主时钟,因此可以运行在停机和待机模式。可通过程序配置为软件或者硬件启动的看门狗。
窗口看门狗定时器 WWDG:用于在发生问题时复位整个系统,它由主时钟驱动,具有早期预警中断功能;其内置有 7位的递减计数器,并且可以设置为自由运行。
系统嘀嗒定时器 SysTick:仅用于实时操作系统,也可作为一个标准的递减计数器,具有 24位的递减计数器、自动重加载功能、当计数器为 0时能产生一个可屏蔽系统中断、可编程时钟源等特性。
通信接口
STM32F103C8T6拥有 2个 I²C接口、3个 USART接口、2个 SPI接口、1个 CAN接口、1个 USB 2.0全速接口。
I²C:内置 I²C总线接口能够工作于多主模式或从模式,支持标准和快速模式;I²C接口支持 7位或 10位寻址,7位从模式时支持双从地址寻址,并且内置了硬件 CRC发生器/校验器,支持使用 DMA操作并支持 SMBus总线 2.0版/PMBus总线。I²C总线的连接线一般不超过 2米,并且理论上数据线需要增加2KΩ上拉电阻,所有与STM32F103C8T6连接的设备都需要共同接地。
USART:片上的 USART接口具有硬件 CTS和 RTS信号管理、支持 IrDA SIR ENDEC传输编解码、兼容 ISO7816的智能卡并提供 LIN主/从功能;其中,USART1接口通信速率可达4.5 Mbit/S,而其它 USART接口可达2.25 Mbit/S;所有 USART接口都可以使用 DMA操作。
SPI:STM32F103C8T6拥有 2个 SPI接口,主、从模式下全双工和半双工通信速率可达18 Mbit/S。3位预分频器可以产生 8种主模式频率,并且每帧可配置为 8位或 16位,所有 SPI接口依然可以使用 DMA操作。
CAN:同时兼容 CAN 2.0A和 2.0B规范,位速率高达1Mbit/S,可以接收和发送 11位标识符的标准帧,也可以收发 29位标识符的扩展帧。
USB 2.0:内嵌 1个全速 USB控制器(12Mbit/S),具有待机/唤醒功能,其专用48MHz时钟由内部主锁相环PLL直接产生(时钟源必须为HSE晶体振荡器)。
DMA(直接内存存取,Direct Memory Access)用来提供在外设与存储器或者存储器与存储器之间的高速数据传输,传输过程无需经过 CPU进行干预,数据直接通过 DMA快速进行操作,从而节省大量 CPU资源。