一、STM32的形成

        ST公司使用这个ARM内核来完善外围电路,就形成了STM32单片机

二、应用领域

2.1、智能车

        STM32寻迹小车可以读取光电传感器或者摄像头的数据,然后驱动电机前进和转弯。

2.2、无人机

        用STM32读取陀螺仪加速度计的姿态数据,然后根据控制算法去控制电机的速度,从而保证飞机稳定飞行。

2.3、机器人

        用STM32驱动舵机,去驱动机器人的关节,然后让机器人运动。

2.4、无限通信

        给STM32连接上一些2.4G无限模块或者蓝牙、WIFI模块,这样就可以具备无限通信的能力了。

2.5、物联网

        可以借助这些无限通信模块来通信,比如蓝牙、WIF、ZIGBee这些,再通过STM32驱动继电器来控制220V电路的通断。

2.6、工业控制

        国产PLC的内部主控就是一块STM32,PLC是用来进行工业控制的。

2.7、娱乐电子产品

        做个爱心流水灯、MP3等。

三、STM32家族四个系列产品

3.1、高性能系列

        CoreMark是内核跑分,跑分越高,性能越好 STM32H7目前STM最高性能的芯片,是一个双核微控制器。

3.2、主流系列

        STM32F1系列的内核都是72MHz的,后缀不同的是内存大小。

3.3、超低功耗系列

3.4、无线系列

四、ARM内核分为三个系列

4.1、Cortex-A系列(Application)

        高端应用型领域,手机(苹果,联发科、高通),电脑,平板等.

4.2、Cortex-R系列(RealTime,实时性很高的场景)

        应用于嵌入式领域,硬盘控制器。

4.3、Cortex-M系列(Microcontroller,微控制器)

        应用于嵌入式领域。

五、STM32F103C8T6

5.1、概述

        系列:主流系列STM32F1 内核:ARM Cortex-M3 主频:72 MHz RAM: 20k(实际存储介质是SRAM) ROM: 64k(实际存储介质是Flash) 供电:2.0~3.6v(标准3.3v) 封装:LQFP48(48个引脚)。

5.2、片上资源/外设(Peripheral)

        可以查看数据手册的器件一览表

        

        NVIC和SysTick这两个深色的是内核里面的外设,剩下的都是内核外的外设,如果你有模块也是一种外设,比如编码器,舵机,电机,显示屏等。

5.2.1、NVIC(嵌套向量中断控制器)

        这是内核里面用于管理中断的设备,比如配置中断优先级这些东西。

5.2.2、SysTick(系统滴答定时器)

        这个是内核里面的一个定时器,注意用来给操作系统提供定时服务的,这个STM32是可以加入操作系统的,比如FreeRTOS、UCOS等,如果用了这些操作系统,就需要SysTick提供定时来进行任务切换的功能 这个课程是不需要用到系统的,可以用来写delay延时函数。

5.2.3、RCC(复位和时钟控制)

        这个可以对系统的时钟进行配置,还有就是使能各模块的时钟; 在STM32中,其它的这些外设在上电的的情况下默认是没有时钟的, 不给时钟的情况下,操作外设是无效的,外设也不会工作,这样的目的是降低功耗 所以,在操作外设之前,必须要先使能它的时钟,所有我们就需要使用RCC来进行时钟使能。

5.2.4、GPIO(通用IO口)

        然后GPIO就是通用的I0口, 我们可以用GPI0来点灯,读取按键等,这也是一个单片机最基本的功能了。

5.2.5、AFIO(复用IO口)

        AFIO是复用I0口, 它可以完成复用功能端口的重定义,还有中断端口的配置。

5.2.6、EXTI(外部中断)

        EXTI是外部中断,配置好外部中断后,当引脚有电平变化时,就可以触发中断,让CPU来处理任务。

5.2.7、TIM(定时器)

        这是整个STM32最常用、功能最多的外设,分为高级定时器、通用定时器、基本定时器三种类型, 最常用的是通用定时器,这个定时器不仅可以完成定时中断的任务,还可以完成测频率、生成PWM波形、配置成专用的编码器接口等功能; 像PWM波形,就是我们电机驱动、舵机驱动最基本的要求了。

5.2.8、ADC(模数转换器)

        这个STM32内置了12位的AD转换器,可以直接读取IO口的模拟电压值,无需外部连接AD芯片,使用非常方便。

5.2.9、DMA(直接内存访问)

        这个可以帮助CPU完成搬运大量数据这样的繁杂任务。

5.2.10、USART(同步/异步串口通信)

        平常用的UART是异步串口的意思,USART是即支持异步串口,也支持同步串口,实际上用的异步串口比较多。

5.2.11、I2C(I2C通信)与SPI(SPI通信)

        STM32内置了这两种常用的通信协议的控制器,可以用硬件来输出时序波形,使用起来更高效,当然用通用IO口来模拟时序波形也是没有问题的。

5.2.12、CAN(CAN通信)

        一般用于汽车领域,VCU,ICM和MMU都是通过CAN来通信的。

5.2.13、USB(USB通信)

        生活中到处都是USB设备,利用这个STM32的USB外设,可以做一个模拟鼠标、模拟U盘等设备。

5.2.14、RTC(实时时钟)

        在STM32内部完成年月日、时分秒的计时功能,而且可以接外部备用电池,即使掉电也能正常运行。

5.2.15、CRC(CRC校验)

        是一种数据的校验方式,用于判断数据的正确性,有了这个外设的支持,进行CRC校验就会更加方便一些。

5.2.16、PWR(电源控制)

        可以让芯片进入睡眠模式等状态,来达到省电的目的。

5.2.17、BKP(备份寄存器)

        这是一段存储器,当系统掉电时,仍可由备用电池保持数据,这个根据需要,可以完成一些特殊功能。

5.2.18、IWDG(独立看门狗)与WWDG(窗口看门狗)

        当单片机因为电磁干扰死机或者程序设计不合理出现死循环时,看门狗可以及时复位芯片,保证系统的稳定。

5.2.19、DAC(数模转换器)

        它可以在IO口直接输出模拟电压,是ADC模数转换的逆过程。

5.2.20、SDIO(SD卡接口)

        可以用来读取SD卡。

5.2.21、FSMC(可变静态存储控制器)

        可以用来扩展内存,或者配置成其他总线协议,用于某些硬件的操作。

5.2.22、(USB OTG)USB主机接口

        用OTG功能,可以让STM32作为USB主机去读取其他USB设备。

5.3、STM32的命名规则

5.4、系统结构

左上角就是Cortex-M3的内核,内核引出了三条总线

5.4.1、ICode指令总线与DCode数据总线

        用来连接FLASH闪存的,FLASH里面就是我们编写的程序 ICode指令总线就是用来加载程序指令的 DCode数据总线是用来加载数据的,比如常量和调试数据这些。

5.4.2、System系统总线

1、用来连接SRAM,用来存储程序运行时的变量数据。

2、也连接了FSMC,这个课程芯片用不到,用来扩展内存的。

3、AHB(意思是先进高性能总线)系统总线就是用来挂载主要的外设的,挂载的一般是最基本的或者性能比较高的外设,比如复位和时钟控制这些基本的电路,还有SDIO也是挂载在AHB上面的。

3.1、APB1(先进外设总线1) 一般是36MHz 次要一点的外设,都会分配到APB1上去。

3.2、APB2(先进外设总线2) 和AHB同频率,都是72MHz 重要的外设基本都是在APB2总线上。

5.4.3、DMA1和DMA2

        可以把它当做内核CPU的小秘书,比如有一些大量的数据搬运的话,让CPU来干的话就太浪费时间了, 比如我有个外设ADC模数转换,这个模数转换可以配置成连续模式,比如1ms转换一次,转换完的数据必须得转运出来,否则数据就会被覆盖丢失,如果直接让CPU来干这活,那CPU没过1ms就得来转运一下数据,这样会费时费力,影响CPU的正常工作,而且这活就是简单的数据搬运,没必要让CPU来干这活;

        所以数据搬运这样的活就会交给DMA来,它可以拥有和CPU一样的总线控制权,用于访问这些外设小弟 当需要DMA搬运数据时,外设小弟就会通过请求线发送DMA请求,然后DMA就会获得总线控制权,访问并转运数据,整个过程不需要CPU的参与,剩下了CPU的时间用来干其他的事情。

5.5、引脚定义

        这个对芯片而言是非常重要的,一般我们拿到一个新的芯片时,需要着重的看一下它的引脚定义,有时候这个引脚定义看完了,我们就可以大概知道这个芯片是怎么使用的了。

        标蓝色的是最小系统相关的引脚, 标绿色的是IO口、功能口这些引脚 标黄色是电源相关的引脚。

        表头上的引脚号和引脚名称和芯片引脚一一对应, 接着是类型,S代表电源,I代表输入,O代表输出,I/O代表输入输出; I/O口电平代表IO口所能容忍的电压,这里有FT的就代表它能容忍5V的电压,没有的就只能容忍3.3V电压,如果没有FT的需要接5V的电平,就需要加装电平转换电路了。

        主功能就是上电后默认的功能,一般和引脚名称相同,如果不同的话,引脚的实际功能是主功能而不是引脚名称的功能, 默认复用功能是IO口上同时连接的外设功能引脚,这个配置IO口的时候可以选择是通用IO口还是复用功能。

        最后一个是重定义功能,这个作用是,如果有两个功能同时复用在了一个IO口上,而你确实需要用到这两个功能,那你可以把其中一个复用功能重映射到其他端口上,当然前提是这个重定义功能的表里有对应的端口。

5.5.1、1号引脚是VBAT

        它是备用电池供电的引脚,在这个引脚可以接一个3V的电池,当系统电源断电时,备用电池可以给内部的RTC时钟和备份寄存器提供电源。

5.5.2、2号引脚是IO口或者侵入检测或者RTC

        IO口可以根据程序输出或者读取高低电平,是最基本也是最常用的功能了。

        侵入检测可以用来做安全保障的功能,比如你的产品安全性比较高,可以在外壳加一些防拆的触点,然后接上电路到这个引脚上,如果有人强行拆开设备,那触点断开,这个引脚的电平变化,就会触发STM32的侵入信号,然后就会清空数据来保证安全。

        RTC的引脚可以用来输出RTC校准时钟、RTC闹钟脉冲或者秒脉冲。

5.5.3、3号和4号引脚是IO口或者接32.768kHz的RTC晶振

        3 号和 4 号引脚具有复用功能,当需要使用 RTC(实时时钟)功能时,可将 32.768kHz 的晶振连接到这两个引脚上,为 RTC 提供时钟信号;如果不需要 RTC 功能,这两个引脚就可以作为普通的 IO 口使用,根据程序输出或读取高低电平。

5.5.4、5号和6号引脚是接系统的主晶振

        一般是8MHz的,然后芯片内部有锁相环电路,可以对这个8MHz的频率进行倍频,最终产生72MHz的频率,作为系统的主时钟。

5.5.5、7号引脚是NRST系统复位引脚

        N代表它是低电平复位的。

5.5.6、8号和9号引脚是内部模拟部分的电源VSSA,ADDA

        比如ADC、RC震荡器等,VSS是负极接GND VDD是正极接3.3V。

5.5.7、接着10号到19号引脚都是IO口

        其中第十号的PA0引脚还兼具了WKUP的功能,这个可以用于唤醒处于待机模式的STM32。

5.5.8、20号引脚是IO口或者BOOT1引脚

        BOOT引脚是用来配置启动模式的,优先使用其他引脚,这个引脚不到万不得已不用做IO口。

5.5.9、21号和22号引脚也是IO口

        使用IO口的配置和其他引脚复用。

5.5.10、23号和24号VSS_1和VDD_1是系统的主电源口

        同样的VSS是负极,VDD是正极,因为STM32内部采用了分区供电的方式,所以就有三组供电口,在使用时,把所有的VSS接地,VDD接3.3V即可。

5.5.11、25号到33号引脚都是IO口

       使用IO口的配置和其他引脚复用。

5.5.12、34号加上37号到40号这些都是IO口或者调试端口

        上面默认的主功能是调试端口,就是用来调试程序和下载程序的,这个STM32支持SWD和JTAG两种调试模式 SWD需要两根线,分别是SWDIO和SWCLK(占用PA13和PA14这两个IO口即可) JTAG需要5根线,分别是JTMS、JTCK、JTDI、JTDO和NJTRST 如果要使用PA15、PB3和PB4作为IO口,就要在程序中进行配置,不配置的话默认是不会用作IO口的。

5.5.13、35号和36号引脚是VSS_2、VDD_2也都是系统的主电源口

5.5.14、41号到43号、45到46号都是IO口

5.5.15、剩下的44号BOOT0和刚才介绍的BOOT1一样,也是用来做启动配置的

5.5.16、47号和48号引脚是VSS_3、VDD_3也都是系统的主电源口

5.6、启动配置

        1、这个启动配置的作用就是指定程序开始运行的位置,一般情况下,程序都是在FLASH程序存储器开始运行, 但是在某些情况下,我们也可以让程序在别的地方开始执行,用以完成特殊的功能。

        2、当BOOT0为0就是接地的意思,这个时候BOOT1接x,就是无论接什么,启动模式都是主闪存存储器的模式,这时候主闪存存储器被选为启动区域,也就是正常的执行FLASH闪存里面的程序,这个模式是最常用的模式,一般情况下都是这个配置。

        3、当BOOT1接0,BOOT0接1,接1就是接到3.3V电源正的意思,那启动模式就是系统存储器,说明是系统存储器被选为启动区域

        其实这个模式就是用来做串口下载用的,这个系统存储器存的就是STM32中的一段BootLoader程序,BootLaoder程序的作用就是接收串口的数据,然后刷新到主闪存中,这样就可以使用串口下载程序了。

        如果我们把那5个调试端口都配置为IO口了,那这个芯片就无法下载程序了,就只能通过串口进行下载了。

        4、当BOOT1接1,BOOT0接1的情况,这时配置的是内置SRAM启动,这个模式主要用来进行程序调试的,这个视频也用不到。

        5、上面图片的最后一段话的意思是BOOT引脚的值是在上电复位后的一瞬间有效的,之后就随便了 在引脚定义中可以看到,这个BOOT1和PB2是在同一个引脚上的,,也就是在上电的瞬间,是BOOT1的功能,当第4个时钟过之后,就是PB2的功能了。

5.7、STM32最小系统电路

        要想STM32工作的话就需要把电源部分和最小系统部分的电路连接好,也就是定义表的蓝色和黄色的部分,下面介绍STM32最小系统电路了

5.7.1、电源部分

        三个系统主电源接口VSS与VDD都要接上,VBAT是备用电池(可接可不接) 在设计电源供电部分,都会习惯上的加上几个滤波电容来保证供电电压的稳定,这个是非常必要的

5.7.2、典型的晶振电路

        这里接了一个8MHz的主时钟晶振,STM32的主晶振一般都是8MHz,8MHz经过内部锁相环倍频,得到72MHz的主频,晶振的两根引脚分别通过这两个网格标号,接到了STM32的5、6号引脚 另外还需要接两个20pF的电容,作为启震电容,电容的另一端接地即可

        如果你需要RTC功能的话,还需要再接一个32.768kHz(32768是2的15次方,内部RTC电路经过2的15次方分频,就可以生成1秒的时钟信号了)的晶振,电路和这个一样,接在3、4号引脚。

5.7.3、复位电路

        这个复位电路是一个10k的电阻和0.1uF的电容组成的,它用来给单片机提供复位信号,这个NRST接在STM32的7号引脚。

        NRST是低电平复位的,当这个复位电路在上电的瞬间,电容是没有电的,电源通过电阻开始向电容充电,并且此时电容呈现的是短路状态,那NRST引脚就会产生低电平。

        当电容逐渐充满电时,电容就相当于断路了,此时NRST就会被R1上拉为高电平了 那上电瞬间的波形就是先低电平,然后逐渐高电平,这个低电平就可以提供STM32的上电复位信号,电容充电很快,所有单片机就在上电的一瞬间复位了。

        电容左边并联了一个按键,这个可以提供一个手动复位的功能,当我们按下按键时,电容被放电,并且NRST引脚也通过按键被直接接地了,这就相当于手动产生了低电平复位信号,按下松手后,NRST就又回归高电平,此时单片机就从复位状态转为工作状态。

5.7.4、启动配置

        H1相当与开关的作用,波动这个开关,就可以让BOOT引脚选择3.3V还是GND了 自己设计时,可以用一个拨码开关。

5.7.5、下载端口

        四个引脚,SWDIO、SWCLK、GND和3.3V。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐