Stm32 最小系统
Stm32芯片要正常工作,必须为芯片增加相应的外围电路,使其形成最小系统。 最小系统最基本的电路包括:晶振电路、复位电路、电源电路、下载电路。
如果将Stm与人脑相比,电源可以理解为人类的消化系统,稳定地向单片机提供外部输入能量;晶体振动类似于心脏, 提供时间序列(脉搏)以确保芯片内部正常工作;复位可以说是单片机的免疫系统,有时是由于程序bug或因硬件原因工作混乱, 复位可以使单片机系统归零,重新开始工作。
晶振电路
stm32工作时间可由HSE、LSE、HSI、LSI、PLL产生五个时钟源, 高速外部时钟(HSE)可使用一个4~16MHz的晶振构成的振荡器产生; 低速外部时钟(LSE)可使用32.768kHz由晶体/陶瓷谐振器组成的振荡器。
系统时钟参考时钟源:stm32 滴答定时器和数码管
如下图所示,我们自制的 STM32F103C8最小系统 中, 选取8M晶振.768K低速外部时钟采用晶振。
谐振器和负载电容器必须尽可能靠近振荡器的引脚,以减少输出失真和启动时的稳定时间。
上图中的C6-C9为晶振电容器。 对于电容,建议使用高质量、高频应用设计的(典型值为)5pF~25pF瓷介电容器之间,选择符合要求的 晶体或谐振器。通常两个电容器有相同的参数,晶体制造商通常会将负载电容器的参数串行给出两个电容器。 在选择电容时,PCB和MCU应考虑引脚的容抗(可粗略考虑引脚和PCB板的电容按10pF估计)。
负载电容CL计算公式如下: CL = CL1 x CL2 / (CL1 CL2) Cstray, 其中Cstray是引脚的电容和PCB板或PCB 相关电容。
复位
复位电路的作用是使系统恢复到初始状态。STM32F10xxx支持系统复位、电源复位、备份区复位三种复位形式。
系统复位
除时钟控制器外RCC_CSR除了寄存器中的复位标志位和备份区域中的寄存器外,系统将所有寄存器复位到其复位状态。 以下任何事件发生时,都会产生系统复位:
-
- NRST引脚上的低电平(外部复位)
-
- 窗户看门狗计数终止(WWDG复位)
-
- 独立看门狗计数终止(IWDG复位)
-
- 软件复位(SW复位)
-
- 低功耗管理复位
可通过查看RCC_CSR控制状态寄存器中的复位状态标志位识别复位事件来源。
通过将Cortex?-M3中断应用和复位控制寄存器SYSRESETREQ位置’1’。
在以下两种情况下可产生低功耗管理复位:
-
- 进入待机模式时,产生低功耗管理复位:用户选择字节nRST_STDBY位置1将能够复位。此时,即使进入待机模式,系统也会被复位而不是进入待机模式。
-
- 低功耗管理复位是在进入停止模式时产生的:用户选择字节nRST_STOP位置1将能够复位。此时,即使进入停机模式,系统也将被复位,而不是进入停机模式。
电源复位
电源复位发生在以下事件之一时:
-
- 上电/掉电复位(POR/PDR复位)
-
- 返回到待机模式
除备份区域外,电源复位还将复位所有寄存器。复位源最终将作用于RESET在复位过程中引脚并保持低电平。复位入口矢量固定在地址0x0000_0004。 芯片内部的复位信号将在NRST脉冲发生器保证每个(外部或内部)复位源至少能有20个引脚输出μs脉冲延迟;当NRST当引脚被拉低时,它会产生复位脉冲。
在C在8最小系统中,按下按钮NRST引脚产生低电平,从而复位单片机系统。
备份域复位
备份区域有两个特殊的复位,只影响备份区域。备份区域复位发生在以下事件之一时。
-
- 设置备份域控制寄存器进行软件复位 (RCC_BDCR)(见6.3.9节)中的BDRST位产生。
-
- 在VDD和VBAT两者掉电的前提下, VDD或VBAT上电将导致备份区复位。
电源电路
- VDD = 2.0~3.6V: VDD引脚为I/O引脚和内部调压器供电。
- VSSA、VDDA = 2.0~3.6V:为ADC、复位模块、 RC振荡器和PLL模拟部分提供电源。ADC时, VDDA不得小于2.4V。 VDDA和VSSA必须单独连接VDD和VSS。
- VBAT = 1.8~3.6V:当关闭VDD时, (通过内部电源切换器)RTC、外部32kHz振荡器和后备寄存器供电
在我们的电路中预留一个TTL转USB接口和一个模块SWD接口下载程序。TTL可直接给模块C最小系统提供5V电压,在经过AMS1117-3.3将电源芯片转换成3.3V,SWD可直接提供3.3V。
下载电路
在了解下载模式之前,我们先来看看数据手册中32的启动模式。
启动模式
在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同的启动模式
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-4nj3bVIK-1621218393429)(https://taotaodiy-mcu.readthedocs.io/en/latest/_images/principle005.png)]
系统复位后, SYSCLK第四个上升沿, BOOT引脚值将被锁定。用户可以设置BOOT1和BOOT选择复位后的启动模式。 退出待机模式时, BOOT引脚锁定引脚值;因此,在待机模式下BOOT引脚应保持为所需的启动配置。
启动延迟后, CPU从地址0x0000 从启动存储器的0000中获取堆栈顶的地址x0000 004指示的地址开始执行代码。 由于固定的存储图像,代码区域始终从地址0开始x0000 0000开始(通过ICode和DCode总线访问),数据区(SRAM)始终从地址0x2000 0000开始(通过系统总线访问)。
Cortex-M3的CPU始终从ICode总线获得复位向量,即启动仅适用于代码区(典型来自)Flash启动)。 STM32F10xxx微控制器实现了一种特殊的机制,系统不仅可以从Flash也可以从内置的存储器或系统存储器开始SRAM启动。
主闪存存储器、系统存储器或根据所选启动模式SRAM以下方式可访问:
- 从主闪存储器开始:主闪存储器映射到启动空间(0x0000 0000),但仍能在原地址(000x0800 访问它,即闪存存储器的内容可以在两个地址区域访问, 0x00000000或0x0800 0000。
- 从系统存储器开始:系统存储器映射到启动空间(0x0000 0000),但仍能在原地址访问。
- 从内置SRAM启动:只有0x2000 访问00000开始的地址区SRAM。
所以我们也应该明白Keil一些莫名其妙的值设置在中间。
[外链图片存储失败,源站可能有防盗链机制,建议保存图片直接上传(img-EcM6EBhD-1621218393429)(https://taotaodiy-mcu.readthedocs.io/en/latest/_images/principle006.png)]{.align-cente}
现在再来看看stm单片机有两种下载方式,一种是串口下载,另一种是模拟器下载。
串口下载
stm32内嵌了自举程序,存放在系统存储区,由ST在生产线上写入,用于通过可用的串行接口对闪存存储器进行重新编程,即串口下载程序。
下面是使用CH340芯片组成的一键下载电路。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PHyLaTab-1621218393430)(https://taotaodiy-mcu.readthedocs.io/en/latest/_images/principle007.png)]{.align-cente}
从电路图可以看出,BOOT0和RESET分别由CH340G芯片的RST和DTR控制,而这两个引脚可以通过与下载程序的上位机通信来改变电平的高低,从而控制启动方式进行程序下载。
仿真器下载
stm32支持JLINK、JTAG、ULINK和STLINK等,如原理图所示,我们在这里留的SWD调试接口。
- GND:公共地信号;
- SWDIO:串行数据输入信号,作为仿真信号的双向数据信号线,建议上拉;
- SWCLK:串行时钟输入,作为仿真信号的时钟信号线,建议下拉;
- VCC:3.3V
使用jlink或者stlink连接即可下载程序。参考 stm32 调试下载
原文链接
https://taotaodiy-mcu.readthedocs.io/en/latest/base/pcb.html