单片机最小系统着实让人着迷
///插播一条:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以哦~点我头像黑色字体加我地球呺也能领取哦。最近比较闲,带做毕设,带学生参加省级或以上比赛///
STM32F103RCT6:
STM32F103RCT6是一种嵌入式-微控制器的集成电路(IC),32位 Cortex-M3内核处理器,速度是72MHz,程序存储器容量是256KB,程序存储器类型是FLASH,RAM容量是48K,封装LQFP64。
STM32单片机命名规则:
STM32单片机最小系统:
所谓单片机最小系统,就是让单片机能够正常运行,最少且必须的器件所组成的系统。
单片机最小系统上电之后,单片机可以正常复位,下载程序,除此之外没有其他任何功能。
在最小系统保证正确的基础上,可以依次添加其他功能模块或器件,使之单片机具有实际功能。
STM32单片机最小系统包括一个复位电路和一个时钟电路,如图1所示。
图中复位电路使用的是上电复位电路,STM32单片机NRST引脚输入低电平,则发生复位。
图1 STM32F103单片机最小系统
电源引脚:
VDD是单片机的数字电源正极,VSS是数字电源负极,共有5个VDD引脚,5个VSS引脚。VDDA是单片机的模拟电源正极,负责给内部的ADC、DAC模块供电,VSSA是模拟电源负极。
还有一个电源引脚,就是VBAT,BAT就是Battery(电池),这个引脚用来连接电池的正极的。STM32带RTC功能(实时时钟),所以有VBAT引脚。
原理图上预留了一个CR1220纽扣锂电池,当主电源供电存在的情况下,由系统中的VCC3.3给VBAT供电;
当主电源断电之后,由CR1220纽扣电池给STM32自带的RTC模块供电,从而能够保证实时时钟模块在主电源掉电的情况下还能够正常工作。
但是这样设计的话,这里有一个矛盾需要解决。如果VBAT引脚直接与VCC3.3和CR1220连接的话,会存在下面问题:
1、当电池电压高于3.3V,电池就会输出电流到AMS1117,使得芯片发烫,还会很快消耗电池电量。
2、如果电池电压低于3.3V,AMS1117产生的3.3V,就会给电池充电,而这种CR1220电池是不能够充电的。
为了解决上面问题,我们将VBAT引脚的供电电路设计如下:
D1防止电池的电流流向AMS1117,D2防止AMS1117产生的3.3V流向电池。
之所以这样设计,用的就是“二极管的单向导通性”。
正常产品设计的时候,每个电源引脚旁边,最好放置一个0.1uF的电容滤波,用来滤除电源的噪声杂波。
复位引脚NRST:
复位就是重启。STM32复位引脚是低电平复位,正常工作状态,复位引脚是高电平。
单片机的置位和复位,其目的都是为了把电路初始化到一个确定状态。复位时在单片机内部单片机是将存储设备和一些寄存器装入生产厂商预设的一个值。
一般来说,单片机复位电路的作用是把一个状态机初始化到一个空的状态。
单片机实现上电复位的原理:
在复位引脚NRST上外接电容和电阻。
当复位电平(低电平)持续两个机器周期以上时复位有效,系统上电后由于电容的充电,会保持一段时间的低电平来使单片机复位。
刚上电,电容两端电压为0,即低电平复位,RC电路有个充电曲线(即电容两端电压变化曲线),单片机识别外部电平有一个连接电压,保证rc电路电容电压充到单片机临界电压的时间在两个机器周期以上就能满足单片机复位条件;
当3.3V电源加到VCC3.3时,RC电路导通,NRST与地的电位差为电容与地的电位差。NRST与地的电位差只有电容充电完毕后才会达到3.3V,所以在电容的充电过程中,给芯片引脚的信号都是低电平。
根据RC电路充电方程式V(t)=U+A*e-(t/RC),只要合理的选择好R跟C的值就可以保证充电时间大于芯片复位所要求的时间。我们一般R选择10K电阻,C选择0.1uF电容。
晶振引脚:
STM32有两组晶振,一组用来给单片机提供主时钟(5:OSC_IN,6:OSC_OUT),主时钟晶振使用8MHz的晶振(为了程序内部倍频方便,一般选用8MHz的晶振)。
一组用来给RTC提供时钟(3:OSC32_IN,4:OSC32_OUT),RTC时钟晶振,需要连接32.768K的晶振,关于为什么要用32.768KHz,大家可以去百度了解一下哈。
实际应用中,如果不用RTC功能的话,RTC的晶振不必连接。
STM32的时钟电路又分为内时钟和外时钟两种模式。
外部时钟是在OSC_IN和OSC_OUT之间加上一个晶振,单片机内部振荡器便能产生自激震荡,产生时钟信号,在晶振的两侧加上20~30pF的瓷片电容起到了微调时钟频率的作用,让频率更加稳定。
内部时钟是STM32内部有时钟产生,所以如果不用外部晶振的话,也可以不用连接,内部时钟是用芯片内部振荡电路,精度不高,温漂也较大,不需要外部振荡器件。
BOOT引脚:
STM32有两个BOOT引脚,分别是BOOT0和BOOT1,这两个引脚的高低电平,决定了单片机的启动方式和运行方式。
第一种(BOOT1=X,BOOT0=0)启动方式是最常用的用户FLASH启动。默认启动方式。
第二种(BOOT1=0,BOOT0=1)启动方式是系统存储器启动方式。STM32中自带的BootLoader(就是通常说的ISP程序)就是在这种启动方式中,如果出现程序硬件错误的话可以切换BOOT0=1到该模式下重新烧写Flash即可恢复正常。BootLoader所在区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
第三种(BOOT1=1,BOOT0=1)启动方式是STM32内嵌的SRAM启动。该模式用于调试。
一般我都是将BOOT0和BOOT1接地。
上面就是最小系统的全部内容,当然只有上面的部分还不行,一般最小系统还包括下面几部分:
电源电路:
因为STM32单片机一般都是3.3V供电,而生活中一般常见的都是5V电源(电脑的USB口,手机充电器,移动电源...),所以一般使用AMS1117-3.3V稳压电源芯片将5V降压为3.3V,该芯片的封装一般为SOT223。
下载电路:
当然,除了上面几部分以为,还需要一个下载电路,STM32的下载方式有如下几种:
(1)串口下载:使用串口下载需要单片机内有相应的程序的支持,而系统存储器中就放了这么一段程序,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程。(在系统存储器启动模式下下载,因为在厂家提供的BootLoader中,提供了串口下载程序的固件,可以通过这个BootLoader将程序下载到系统的Flash中。程序烧录在FLASH)。
注意:使用此种方式需要BOOT0=1,即需要有外部电路支持才可以实现串口下载。
(2)JLINK或者STLINK下载
一般我们使用JTAG或者SWD模式下载程序。
推荐使用SWD模式下载,SWD模