1 综述
1.1 课程介绍
1.2 硬件设备
1.3 软件设备
1.4 套件介绍
1.5 STM32简介
- STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器;
- STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等;
- STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器;
- 下图表示STM32有四个系列,每个系列都有不同的产品;
- 高性能系列;
- 主流系列;
- 本课程使用的就是STM32F1系列;
- 超低功耗系列;
- 无线系列;
1.6 ARM
- ARM既指ARM公司,也指ARM处理器内核;
- ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构;
- ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片;
- 下右图中:
- 蓝色是ARM公司生产的老版本的内核,是一些经典的ARM处理器;
Cortex-A
系列适用于高端应用领域,是ARM内核中性能最高、发展最快的系列;Cortex-R
和Cortex-M
系列适用于嵌入式领域;- R就是RealTime的意思,主要面向实时性很高的场景,比如硬盘控制器;
- M就是MicroController的意思,主要应用在单片机领域;
1.7 STM32F103C8T6
-
系列:主流系列STM32F1;
-
内核:ARM Cortex-M3;
-
主频:72MHz;
-
RAM:20K(SRAM);
- RAM,即运行内存,实际的存储介质是SRAM;
-
ROM:64K(Flash);
- ROM,即程序存储器,实际的存储介质是Flash闪存;
-
供电:2.0~3.6V(标准3.3V);
- 51单片机是5V;
-
封装:LQFP48;
- 共有48个引脚;
- 共有48个引脚;
-
片上资源/外设:
- 高亮的两个外设是位于Cortex-M3内核里面的外设,剩下的都是内核外的外设;
- 注意:这是STM31F1整个系列的所有外设,并不是所有的型号都有全部的外设,比如此次使用的C8T6芯片就没有第二列最下面四个外设;
- 具体有什么外设,每个外设有几个,需要查询手册;
英文缩写 名称 英文缩写 名称 NVIC 嵌套向量中断控制器 CAN CAN通信 SysTick 系统滴答定时器 USB USB通信 RCC 复位和时钟控制 RTC 实时时钟 GPIO 通用IO口 CRC CRC校验 AFIO 复用IO口 PWR 电源控制 EXTI 外部中断 BKP 备份寄存器 TIM 定时器 IWDG 独立看门狗 ADC 模数转换器 WWDG 窗口看门狗 DMA 直接内存访问 DAC 数模转换器 USART 同步/异步串口通信 SDIO SD卡接口 I2C I2C通信 FSMC 可变静态存储控制器 SPI SPI通信 USB OTG USB主机接口 - NVIC:嵌套向量中断控制器。内核里面用于管理中断的设备,比如配置中断优先级;
- SysTick:系统滴答定时器。是内核里面的一个定时器,主要是用来给操作系统提供定时服务的;
- STM32是可以加入操作系统的,比如FreeRTOS、UCOS等。如果用了这些操作系统,就需要SysTick提供定时,来进行任务切换的功能;
- 本课程不需要操作系统,可以使用这个定时器来完成Delay函数的功能;
- RCC:复位和时钟控制。可以对系统的时钟进行配置,还可以使能各模块的时钟;
- 在STM32中,其它的外设在上电的情况下默认是没有时钟的。不给时钟的情况下,操作外设是无效的,外设也不会工作,这样子的目的是降低功耗。所以,在操作外设之前,必须先使能它的时钟,此时就需要RCC来完成时钟的使能;
- GPIO:通用IO口。可以用GPIO来点灯,读取按键等;
- AFIO:复用IO口。可以完成复用功能端口的重定义,还有中断端口的配置;
- EXTI:外部中断。配置好外部中断后,当引脚有电平变化时,就可以触发中断,让CPU来处理任务;
- TIM:定时器。这是整个STM32最常用、功能最多的外设,TIM分为高级定时器(最复杂)、通用定时器(最常用)和基本定时器三种类型。这个定时器不仅可以完成定时中断的任务,还可以完成测频率、生成PWM波形、配置成专用的编码器接口等功能;
- ADC:模数转换器。是STM32内置的12位的AD转换器,可以直接读取I/O口的模拟电压值,无需外部连接AD芯片,使用非常方便;
- DMA:直接内存访问。可以帮助CPU完成搬运大量数据这样的繁杂任务;
- USART:同步/异步串口通信。平时用的UART是异步串口的意思,这里的USART是既支持同步,又支持异步;
- I2C:I2C通信;
- SPI:SPI通信。和上面的I2C是两种非常常用的通信协议,STM32内置了它们的控制器,可以用硬件来输出时序波形,使用起来更高效,当然也可以使用I/O口来模拟时序波形也是可以的;
- CAN:CAN通信。通信协议,一般用于汽车领域;
- USB:USB通信。通信协议,利用STM32的USB外设,可以做一个模拟鼠标、模拟U盘等设备;
- RTC:实时时钟。在STM32内部完成年月日、时分秒的计时功能,而且可以接外部电池,即使掉电也可以正常运行;
- CRC:CRC校验。CRC校验是一种数据校验方式,用于判断数据的正确性。有了这个外设的支持,进行CRC校验就会更加方便一点;
- PWR:电源控制。可以让芯片进入睡眠模式等状态,以达到省电的目的;
- BKP:备份寄存器。这是一段存储器,当系统掉电时,仍可由备用电池保持数据,这个根据需要,可以完成一些特殊功能;
- IWDG:独立看门狗;
- WWDG:窗口看门狗。当单片机因为电磁干扰死机或者程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统的稳定;
- DAC:数模转换器。可以在I/O口直接输出模拟电压,是ADC模数转换的逆过程;
- SDIO:SD卡接口。可以用来读取SD卡;
- FSMC:可变静态存储控制器。可以用来扩展内存,或者配置成其它总线的协议,用于某些硬件的操作;
- USB OTG:USB主机接口。用OTG功能,可以让STM32作为USB主机去读取其它USB设备;
-
命名规则:
-
系统结构:
Cortex-M3
内核引出三条总线,分别是ICode指令总线、DCode数据总线、System系统总线;- ICode指令总线和DCode数据总线是用来连接Flash闪存的,Flash里面存储的就是我们编写的程序;
- ICode指令总线用来加载程序指令;
- DCode数据总线用来加载数据,比如常量和调试参数;
- System系统总线连接上了许多外设;
- SRAM,用于存储程序运行时的变量数据;
- FSMIC,本课程中的芯片不会用到;
- AHB(Advanced High Performance Bus,先进高性能总线)系统总线,挂载的一般是最基本的或者性能比较高的外设,比如复位和时钟控制(RCC)这些最基本的电路,还有SDIO;
- AHB系统总线后面有两个桥接,接到了APB1和APB2两个外设总线上;
- 因为AHB和APB的总线协议、总线速度,还有数据传送格式的差异,所以中间需要加两个桥接,来完成数据的转换和缓存;
- AHB的整体性能要比APB高一些,APB2的性能又比APB1的性能高一些。APB2一般是和AHB同频率的,都是72MHz,APB1一般是36MHz,所以APB2连接的一般是外设中比较重要的部分,比如GPIO端口,还有外设的1号选手,比如UASRT1、SPI1、TIM1、TIM8(和TIM1一样都是高级定时器)、ADC、EXTI、AFIO;
- PB1的意思是先进外设总线,用于连接一般的外设。其它的2、3、4、5号外设,还有DAC、PWR、BKP等,这些次要一点的外设,都被分配到APB1上
- 在使用的时候,个人一般感觉不到APB1和APB2的性能差异,只需要知道外设是挂载到哪个总线上即可;
- DMA通过DMA总线连接到总线矩阵上,它可以拥有和CPU一样的总线控制权,用于访问外设;
- 当需要DMA搬运数据时,外设就会通过DMA请求线向DMA发送请求,然后DMA就会获得总线控制权,访问并转运数据,整个过程不需要CPU的参与;
-
引脚定义:
- 红色是电源相关引脚;
- 蓝色是最小系统相关引脚;
- 绿色是IO口、功能口引脚;
- 引脚分类:
S
代表电源、I
代表输入、O
代表输出、I/O
代表输入输出; - I/O口电平表示该I/O口所能容忍的电压,有
FT
的表示可以容忍5V的电压,没有FT
的则只能容忍3.3V;- 若没有
FT
的却需要接5V的电平,就需要加装电平转换电路了;
- 若没有
- 主功能是上电后默认的功能,一般和引脚名称相同;
- 若不同,则引脚的实际功能是主功能,而不是引脚名称的功能;
- 默认复用功能是I/O口上同时连接的外设功能引脚;
- 配置I/O口的时候可以选择是主功能还是默认复用功能;
- 重定义功能是指:如果有两个功能同时复用在了一个I/O口上,而确实需要同时用到这两个功能,就可以把其中一个功能重映射到其他端口上;
- 前提是该重定义功能的表里有对应的端口;
- 前提是该重定义功能的表里有对应的端口;
- 1号引脚:VBAT,是备用电池供电的引脚。在这个引脚可以接一个3V的电池,当系统端电时,备用电池可以给内部的RTC时钟和备份寄存器提供电源;
- 2号引脚:I/O口或侵入检测或RTC;
- I/O口可以根据程序输出或读取高低电平;
- 侵入检测可以用来做安全保障的功能。比如可以在外壳加一个防拆的触点,然后接上电路到这个引脚上,若有人强行拆开设备,该触点断开,那个引脚的电平变化就会触发STM32的侵入信号,然后就会清空数据来保障安全;
- RTC引脚可以用来输出RTC校准时钟、RTC闹钟脉冲或秒脉冲;
- 3、4号引脚:I/O口或接32.768KHz的RTC晶振;
- 5、6号引脚:接系统的主晶振,一般是8MHz。芯片中有锁相环电路,可以对这个8MHz的频率进行倍频,最终产生72MHz的频率,作为系统的主时钟;
- 7号引脚:NRST,系统复位引脚,N代表它是低电平复位;
- 8、9号引脚:内部模拟部分的电源,比如ADC、RC振荡器等;
- VSS是负极,接GND;VDD是正极,接3.3V;
- 10~19号引脚:I/O口;
- 10号引脚:PA0,还兼具了WKUP的功能,可以用于唤醒处于待机模式的STM32;
- 20号引脚:I/O口或BOOT1引脚;
- BOOT引脚用于配置启动模式;
- 该引脚名称没有加粗,在使用I/O口时更加推荐加粗的I/O口,没有加粗的I/O口,可能需要配置或兼具其它功能;
- 21、22号引脚:I/O口;
- 23、24号引脚:VSS_1和VDD_1是系统的主电源口;
- VSS是正极,VDD是负极;
- VSS_2、VDD_2、VSS_3和VDD_3均是系统的主电源口;
- 因为STM32内部采用了分区供电的方式,所以供电口比较多;
- 25~33号引脚:I/O口;
- 34、37~40号引脚:I/O口或调试端口,主功能是调试端口;
- 调试端口是用来调试或下载程序的;
- STM32支持SWD和JTAG两种调试方式;
- SWD需要两根线,分别是SWDIO和SWCLK;
- JTAG需要五根线,分别是JTMS、JTCK、JTDI、JTDO和NJTRST;
- 本课程使用的是STLINK来调试程序,STLINK使用的是SWD的方式,所以只需要占用PA13和PA14这两个I/O口。在使用SWD的调试方式时,剩下的PA15、PB3和PB4可以当成普通的I/O口来使用,但要在程序中进行配置,不配置的话默认是不会用作I/O口的;
- 41~43号引脚、45~46号引脚:I/O口;
- 44号引脚:BOOT0引脚,用于做启动配置;
-
启动配置:
- 启动配置的作用就是指定程序开始运行的位置;
- 一般情况下,程序都是在Flash程序存储器开始执行。但是在某些情况下,也可以让程序在别的地方开始执行,用以完成特殊的功能;
- BOOT1接X(就是随便接什么都可以),BOOT0接0时,启动模式就是上面讲的一般情况;
- BOOT1接0,BOOT0接1(接3.3V电源)时,启动模式就是系统存储器,即系统存储器被选为启动区域;
- 其实这个模式就是用来做串口下载的,在需要使用串口下载程序的时候会配置到这个模式;
- 此处的系统存储器存的就是STM32中的一段BootLoader程序,BootLoader程序的作用就是接收串口的数据,然后刷新到主闪存中;
- 那什么时候需要用到串口下载呢?
- 情况一:34和37~40号引脚是调试端口,他们既可以用来下载程序,也可以当做普通的I/O口来使用。如果在程序中把这5个端口全部配置成了I/O口,就会导致这个芯片没有调试端口了,也就是下载不了程序,此时就可以通过串口的方式来下载程序;
- 情况二:若没有STLINK和JLINK,那么也可以使用串口来下载程序;
- BOOT1接1,BOOT0接1时,此时配置的是内置SRAM启动,该模式主要用来程序调试;
- 上图中最下面的那一句话的意思是:在上电的瞬间,20号引脚是BOOT1的功能。当第4个时钟过后,就是I/O口的功能;
-
最小系统电路: