今天我们来学习STM32的最小系统的搭建,依旧选用的我们的STM32F103C8T6这款芯片,主页有实物的结果,进行led的闪烁,可以看一下
1.电源电路
为芯片提供稳定、清洁的电源是系统稳定的基础。
-
供电电压(VDD / VSS):
-
数字电源:通常为3.3V。连接到芯片的
VDD
引脚和VSS
。 -
模拟电源:如果使用ADC、DAC等模拟外设,需要为
VDDA
引脚提供干净的模拟电源,并将VSSA
正确接地。通常通过磁珠或电感从数字电源隔离而来。
-
-
退耦/滤波电容:
-
这是至关重要的。在每个
VDD
和VSS
引脚附近(尽可能靠近引脚),都需要放置一个100nF的陶瓷电容,用于滤除高频噪声。 -
在电源入口处,通常还会放置一个10uF或更大的钽电容或电解电容,用于滤除低频噪声和稳定电压。
-
2. 时钟电路
为芯片提供时序基准。STM32具有内部时钟,但为了获得更高精度和稳定性,需要外部时钟。
-
高速外部时钟:
-
作用:为系统主时钟提供高精度源,通常使用外部晶振。
-
构成:一个8MHz(或其它频率,但8MHz最常用)的无源晶振,连接在
OSC_IN
和OSC_OUT
引脚(即PH0
和PH1
)之间。 -
负载电容:每个晶振引脚到地需要连接两个10pF~22pF的负载电容,具体值需参考晶振数据手册。
-
-
低速外部时钟:
-
作用:为实时时钟和看门狗等需要低功耗且精确计时的外设提供时钟源,可选但强烈推荐。
-
构成:一个32.768kHz的晶振,连接在
OSC32_IN
和OSC32_OUT
引脚上。 -
负载电容:同样需要连接两个负载电容(通常为6~22pF)。
-
注意:在某些对成本或空间极其敏感的应用中,可以省略外部晶振,仅使用内部RC振荡器。但这会牺牲时钟精度。
3. 复位电路
用于在上电、断电或程序跑飞时,将MCU恢复到初始状态。
-
构成:一个简单的RC电路或专用复位芯片。
-
手动复位按钮:一个电阻和一个按键开关串联。
-
通常做法:
NRST
引脚通过一个10KΩ的上拉电阻接到3.3V
,同时通过一个100nF的电容接地以实现上电复位。一个常开按键并联在电容两端,当按键按下时,NRST
被拉低,触发复位
-
4. 下载调试接口
用于将程序烧录到芯片Flash中,并提供在线调试功能。
-
标准:JTAG 和 SWD。
-
最常用:SWD,因为它只需要2根线(SWDIO, SWCLK)加上电源和地,占用引脚少。
-
连接器:通常使用标准的4针或5针排针(
VCC
,SWDIO
,SWCLK
,GND
, 可选的RESET
)。
5.启动电路(BOOT)确定芯片的启动模式
首先我们还是先配置时钟,但是会有所不同,我先拿上节课的记录一下
开始配置芯片
首先选择要配置的芯片
等待他加载完
左上角搜索STM32F103C8,然后选择STM32F103C8T6这个内核,然后点击右上角的star project
然后来到这个页面
这里就模拟了我们真实的一个芯片和他的引脚分布,然后再左边我们进行系统设置
首先我们需要一个时钟,因为芯片必须要有时钟信号,才可以正常工作
我们先点击system,然后点击rcc,发现有两个选项,high是高速时钟,low是低速时钟,我们选高速时钟中的第三个选项,第三个选项的意思是我们选择外部晶振信号
————————————————
选择完之后发现PD0和PD1这两个引脚会变成绿色,也就是说f103c8t6这款芯片,外部时钟信号的引脚,只能通过PD0和PD1两个引脚接入
这次我们配置低速时钟信号,也设置为外部晶振控制,选择完之后发现PC14和PC15这两个引脚会变成绿色,也就是说f103c8t6这款芯片,高速时钟是通过PD0和PD1进行输入的,低速信号是通过PC14和PC15进行输入的
再次提醒如果路径有中文的话,会导致导出的keil文件缺少核心的文件
也就是APP这个文件夹里的文件
然后我们来进行仿真电源的搭建,首先我们知道STM32单片机供电是3.3V,在仿真中,他会自动提供3.3V的电压我们就不用搭建供电电路了
首先我们在工具栏找到终端模式
终端模式中有一个power和ground,这就是我们的gnd和vcc
这里我们选择power然后拿出来一个电源
如果放置的方向和你的不符,可以右键进行旋转
这里我们接入VDDA和VBAT
然后我们拿出来gnd
接在VSSA
接下来我们设置时钟电路,时钟电路我们分为高速时钟和低速时钟进行设置
高速时钟(HSE):提供STM32外设使用,课接4-16MHz的晶振,我们一般接入8MHz加上20pF的起振电容和1MΩ的反馈电阻。这里我们旋转8MHz因为方便分频。
低速时钟(LSE):精准定时,用于提供实时时钟,需要32.768KHz的晶振和12pF的起振电容
这些可以参考stm32f103c8t6的数据手册,这里我们是初级者,所以我们暂时只需要知道怎么连接就好,不用过于追究
根据stm32cube我们知道PD0和PD1是高速时钟现在我们来进行电路连接
首先我们先点击元件模式
然后点击这个p我们来进行一下搜索
搜索我们的晶振名字CRY STAL,点击第一个,然后点击确定,我们把它摆出来
为了方便我们布线,给他进行一个90°旋转
同样我们搜索CAP找到电容
进行放置,我们需要放置两个电容
同理我们搜索电阻进行放置,电阻搜索res
也是进行一下旋转
接下来对电阻,电容,晶振进行数值的修改,我们双击电阻,会有电阻属性,我们修改为1M
然后修改经侦为8Mhz
电容修改为22pF。
还需要让他们接地,所以我们拿出来一个GND。
然后我们进行线路连接,按照我们摆放的位置,依次进行连接,因为是不分正反的,所以依次连接就好
低速时钟信号非常精准,经常用于我们1Hz这样子的时钟信号,能够精确时间,在程序中通常用来写延时函数,延时毫秒,秒。实现时间相关的设定。
根据stm32cube我们可以看到
PC14和PC15是我们低速时钟的接口
由于他和我们高速时钟很像,所以我们可以按住鼠标左键,把这些全部圈起来,然后选择块复制
然后我们将第二个晶振修改为32.768KHz
然后将电容,修改为12pF。
最后我们进行连线,选择我们的PC14和PC15接口
接下来我们搭建复位电路,需要10kΩ的电阻,105的电容和一个开关。
105是电容的一个名字,代表着这个电容是10*10^5的电容,大小为1uF
复位的引脚是我们的NRST引脚
然后我们在元件库搜索BUTTON这是我们的开关,也就是按钮
在我们STM32中低电平是触发复位信号的,所以我们要让他为高电平,按下按扭为低电平
我们先拿出一个GND
我们能不能这样子接呢,答案理论上可以,但是实际上不行,因为会有波动,而且及其不稳定,来一个干扰就会恢复复位
我们拿出来一个电阻,把这个引脚设置为高电平,也就是上拉模式,让他一直高电平,尽量避免干扰信号。并且电阻还有一个限流作用,放置大电流进入烧毁芯片。
在拿出来一个电源
再拿出来一个电容,防止我们松开按键时候,端口立马变为高电平,给端口一个大脉冲,所以接入一个电容,进行滤除这个大脉冲。电容阻值我们上面计算过,为1uF。
然后我们进行线路连接
然后是启动电路,我们仿真中不涉及
1.主闪存存储器是执行程序
2.系统存储器是执行串口程序下载
3.内置SRAM是内置SRAM被选为启动区域
调试和下载电路,仿真也不涉及,实物才设计
分为1.SWD下载电路
2.JTAG下载电路
3.ISP下载电路(一般选择CH340芯片实现)
然后我们双击32单片机,然后把晶振改为8MHz因为我们引入了低速时钟
然后我们在器件库搜索LED,然后下拉,找到GREEN,放置一个。
我们还需要给他放置一个限流电阻,不然led会烧坏,实物中虽然不会烧坏,但是会非常刺眼。
然后加一个接地,让他导通
但是电阻不易过大200欧左右就行
然后我们找到上次编译的.hex文件把它导入到单片机中
然后点击左下角的开始仿真
发现我们的led可以正常点亮,那么就说明我们的最小系统已经搭建完成,下次就可以编写程序,进行程序的仿真了。
在仿真中红色表示高电平,蓝色表示低电平,我们来测试一下看看按钮是否正常
发现按下按钮之后,复位端口确实为低电平了,说明我们按钮可以正常工作。
可能会有人有疑问,为什么LED没有接在芯片里,因为我们是在仿真,所有的VCC和GND都是一个网络,都是连载一起的,所以不需要直接接入我们单片机里,后续进行仿真,基本上都是添加网络标签然后通过网络标签进行连接。
这些就是我STM32单片机最小系统的学习笔记,仅供参考,欢迎大佬指点。后面我还会记录实物的操作,也会记录,欢迎大家交流指导。