1 简介
今天主要来谈谈MCU的设计,我使用过的MCU的型号包括意法半导体的STM32、华大GD32、Infineon的CY8C5868LTI-LP039以及MicroChip的ATSAME70,今天的主角是意法半导体的STM32最小系统设计,其它MCU电路设计后续进行分享。
2 最小系统
STM32的最小系统设计都是类似的,今天以STM32F429IGT6为例。STM32最小系统包含了 电源电路 、 配置电路 、 复位电路 、 时钟电路 、下载电路。
2.1 电源电路设计
STM32手册设计指导:
VDD电源
STM32一般采用3.3V供电,根据手册VDD的供电范围1.7V~3.6V,该电源一般用于外部IO,使能内部内部稳压器,可对外供电。以下是VDD实战设计电路,VDD的每个电源引脚附近需要放置一个0.1uF电容,且每个0.1uF电容需要放置在相应PIN脚附近,另外建议在额外增加1到2个10uF的电容。
VDDA电源
VSSA和VDDA的电压范围1.7V-3.6V,ADC, DAC,以及Reset模块的模拟电源。以下是VDDA实战设计电路,选用3.3V供电,此处R3可能是保守设计,用于后期调试(也有可能用于RC滤波),不建议增加10R电阻。对应的位置应放置一个10uF电容和一个0.1uF电容, 10μF 电容放置在远离 IC 的位置,用于平滑电源中的低频变化, 0.1μF 电容放在靠近 IC的位置,用于平滑高频电源的变化。小电容器需要更靠近IC,这将更有效过滤IC产生的高频信号,或更有效地抑制线路引入的高频信号对IC的影响。
VBAT电源
VBAT的供电范围1.65V-3.6V,可作为RTC电源,外部时钟32 kHz振荡器和备份寄存器(通过电源开关)供电。VBAT用于连接纽扣电池,当板卡上电时,该PIN脚使用板卡上的3.3V电源,当板卡下电时,使用纽扣电池供电。D1的型号为BAT54C主要有以下两种场景:
当板卡上电时,即端口2为3.3V,端口1为3V,此时下二极管导通,端口3和端口2电压近似相等,此时1端截止,VBAT=3.3V;
当板卡不上电时,即端口2浮空,此时可视为下二极管截止,端口1为3V,上二极管导通,端口3和端口1的电压近似相等,VBAT=3V;
2.2 控制电路设计
PDR_ON控制
内部上电复位(POR) /下电复位(PDR)电路通过PDR_ON引脚关闭。外部电源监督员应监视VDD,只要VDD低于指定的阈值,就应保持设备处于复位模式。
推荐的参考电路为:
参考电压VREF+
在电路设计中,我们常常会用到ADC来采集电压数据,其中VREF+就是ADC的参考电压,具体ADC的精度需要查看参考手册,一般为12为ADC。
Regulator OFF
通过保持BYPASS_REG高来禁用调节器。Regulator OFF模式允许通过VCAP_1和VCAP_2引脚向外部提供V12电压源。
启动模式选择
系统在进行复位之,在系统时钟的第四个上升沿BOOT引脚的值会被锁存。用户可以通过BOOT0和BOOT1的值,来设置系统启动模式。
启动模式选择引脚 | 启动模式 | 说明 |
---|---|---|
BOOT1 | BOOT0 | |
X | 0 | 主闪存存储器 |
0 | 1 | 系统存储器 |
1 | 1 | 内置SRAM |
手册描述见下:
Flash memory启动方式(boot0 = 0)
这种启动方式地址为0x08000000,是STM32内置的Flash。一般均使用这种方式,通过JATG或者SMD下载的代码通常保存在该Flash中。
System memory启动方式(boot0 = 1;boot1 = 0)
这种启动方式地址为0x1FFF0000,该启动方式的程序一般由厂家提前烧录好。STM32在出厂时,厂家在内部预置了BootLoader(通常被称为ISP程序,该部分为ROM,掉电数据不丢失),且无法修改。 使用这种模式的好处是可以通过串口下载程序固件,将程序下载到BootLader 。
SRAM启动方式(boot0 = 1;boot1 = 1)
这种启动方式的地址为0x20000000,属于内置SRAM,无法存储程序。这种启动方式仅用于快速调试。
2.3 时钟电路设计
主时钟
时钟是STM32内部最核心的器件,它可以提供时钟信号。依赖于这个信号,STM32中的器件才可以有条不紊地将工作进行下去。主时钟的范围 4-25MHz ,此处按照25MHz进行设计,具体设计电路见下:
实时时钟
实时时钟(RTC)是一个独立的BCD定时器/计数器。专用寄存器包含秒,分,小时(12/24小时),星期,日期,月,年,BCD(二进制编码的十进制)格式。每月28日、29日(闰年)、30日和31日的更正为自动执行。RTC提供可编程报警和可编程具有从停止和待机模式唤醒的周期性中断。单位秒数为也有二进制格式。
它的时钟是由一个32.768 kHz的外部晶体,谐振器或振荡器,内部低功耗RC振荡器或高速外部时钟除以128。内部低速RC典型频率为32千赫。RTC可以使用外部512 Hz进行校准输出补偿任何天然石英偏差。
使用32.768 kHz的原因?
2的15次方正好等于32768,反过来讲,如果要把32.768K的时钟频率经过15次分频的话,得到的频率正好是1Hz,正好就是1秒钟时间,这样就可以计时了。
2.4 复位电路设计
复位电路使程序恢复到最开始运行的状态。当系统运行出现异常时,可以通过手动复位的方式确保系统回到正常运行状态。其中,C12用于硬件消抖,同事建议增加TVS管,防止静电损坏器件。看门狗后面有专门文章讲解。
2.5 下载电路设计
程序下载有两种方式,分别JTAG模式和 SMD模式 。
JTAG模式
JTAG的全称是Joint Test Action Group (测试行动联合组织),它是由几家主要电子制造商发起制定的PCB 和IC 测试标准,主要应用于电路的边界扫描测试和可编程芯片的在线系统编程。
JTAG调试接口必须使用VCC、GND电源信号,以及TMS、TCK、TDI、TDO四根调试信号。
SMD模式
SWD的全称是Serial Wire Debug(串行调试)。SWD是ARM公司设计的协议,用于对其微控制器进行编程调试。由于SWD专门从事编程和调试,因此它具有许多特殊的功能,通常在其他任何地方都无法使用,例如通过IO线将调试信息发送到计算机。
由于它是ARM专门为在其设备中使用而制造的,因此SWD的性能通常是同类产品中最好的。相对于JTAG接口,使用更少的信号。四根信号如下: VCC、GND、SWDIO、SWCLK 。