毕业设计项目学习笔记(1)——STM32介绍及其最小系统组成
毕业设计项目学习笔记(1)——STM32最小系统
今年是本人专科大三毕业季,因此就需要进行毕业设计,想到自己已经大三即将毕业,因此,想着借此机会,把自己这两年所学完整的融汇一番,做一个项目。本系列博文相关内容的学习笔记。放出来,便于保存。
如何学习STM32处理器之个人经验
面对一个新的处理器,尤其是这么一款外设颇多,让人感觉一时无法上手的处理器,我个人觉得最重要的,应该是依靠官方资料。因为靠二手资料,虽说可能因此降低入手难度,但是二手资料更新缓慢,若是遇到了一款全新的处理器,难道还要等几年,直到有所谓的第二方教程吗?显然,这是不合适的,因此,我找到了如下几个资料用来学习STM32。
- STM32F40XX参考手册——这个有个优点在于它有中文版,它是ST官方通用参考手册,绝对意义上的第一手资料,其内容丰富翔实,唯一缺点在于缺少实例。
- 固件库中的官方文档或者HAL库中的官方文档——这个资料或者说这个库,弥补了参考手册中没有实例的不足,遇到编程难题的话,这个资料的帮助或许比参考手册更大。唯一有些可惜的是,这类文档是全英文的,可能需要在使用的时候搭配上翻译软件,个人推荐是有道翻译,翻译后自动加单词本,顺便学个英文。
- STM32F407 Datasheet——学习电子类专业,怎么能不看Datasheet呢?更何况,一个开发板也好,还是自己搞的项目也好,总要涉及到硬件电气属性,因此,datasheet的重要性不言而喻。
- STMF3与F4系列Cortex M4内核编程手册——重点在于Cortex M4内核的汇编指令的使用以及内核相关寄存器的使用上。
- Cortex M3与M4权威指南——Cortex M3与M4内核架构介绍以及一些简单的实例。
有了这些手册之后,大概就踏上了漫漫学习的长路,但是却会摸不着头脑,因为资料太多,然而却不知从何开始。这时候,我觉得最基本的,就是从画一块STM32最小系统板开始。因为,项目中肯定需要这么一块处理器,与其最后才搞,不如提前搞好它。然后,慢慢根据项目需求增加外设,总比一次性搞要好很多。
STM32F407ZGT6介绍
首先,STM32F4系列处理器是一款高性能通用处理器,而F407则是其中的基础款,它的特点是更多的连接性(集成更多通讯类外设)和安全性。
先来介绍一下datasheet上写的相关外设与特性,并介绍一些基本的术语:
- 集成了FPU(浮点运算单元)和DSP(数字信号处理)指令
- 192KB SRAM(静态随机存取存储器)、1024KB FLASH(闪存)
- 12个16位定时器、2个32位定时器
- 2个DMA(直接存储器访问)控制器(共16个通道)
- 3个12位ADC(模数转换器)、2个12位DAC(数模转换器)
- 1个RTC(带日历功能的实时时钟)
- 1个SDIO(安全数字输入输出卡)接口、1个FSMC(可变静态存储控制器)接口、1个10/100M以太网MAC(多址接入信道)控制器、1个摄像头接口、3个SPI(串行外设接口)、2个全双工IIS(集成电路内置音频总线)、3个IIC(集成电路总线)、6个串口、2个USB(支持HOST/SLAVE)、2个CAN(控制器域网)
- 1个硬件随机数生成器
- 112个通用I/O口
STM32F407最小系统板(基于官方开发板与文档设计)
ST公司官网上有这么三块开发板:NucleoBoard、DiscoveryKit、EvaluationBoard。本最小系统就是参考NucleoBoard来设计的。
最小系统,一般包括:电源电路、时钟电路、复位电路以及调试电路
-
电源电路
- 作用:为整个电路系统提供所需的工作电压
- 一般情况下STM32F407ZGT6需要3.3V工作电压,可以通过USB供电也可以通过外接电源的形式供电。
-
时钟电路
- 作用:为MCU提供所需的时钟信号
- 时钟电路设计方法:
- 震荡模式(下图都为震荡模式)
- 旁路模式
- 时钟源:
-
LSI:内部低速时钟。由芯片内部RC振荡器提供,用于驱动看门狗,默认值为32kHz
-
HSI:内部高速时钟。由内部芯片RC振荡器提供,默认16MHz
-
LSE:外部低速时钟。通过在OSC32_IN和OSC32_OUT引脚接入32.768kHz的晶振实现。
-
HSE:外部高速时钟。通过在OSC_IN和OSC_OUT引脚接入晶振实现,频率范围是4-26MHz。也可以直接接入外部时钟信号,频率范围是1MHz-50Mhz。需要注意的是,电容应该选择MΩ级,而电容需要选择pF级。
-
-
复位电路
- 作用:为MCU提供统一的初始状态
- 复位的类型:系统复位、电源复位、备份域复位
- 一般使用阻容复位电路,复位信号持续时间可通过下列公式计算
t
=
1.1
R
C
t=1.1RC
t=1.1RC其典型电路为
-
调试电路
- 作用:为MCU提供程序下载和调试所需的接口
- 一般建议使用SWD接口,因为所需引脚少
- STM32支持两种调试电路,分别是JTAG接口和SWD串行调试。
引脚名称 | JTAG调试接口 | SWD调试接口 | 引脚分配 |
---|---|---|---|
JTMS/SWDIO | 测试模式选择 | 串行数据输入输出 | PA13 |
JTCK/SWCLK | 测试时钟 | 串行时钟 | PA14 |
JTDI | 测试数据输入 | —— | PA15 |
JTDO/SWO | 测试数据输出 | 调试信息输出 | PB3 |
NJTRST | 复位MCU | —— | PB4 |
-
MCU部分
- MCU电源部分需要使用电感和零欧电阻作为电桥,实现模数分离。
- BOOT启动模式
BOOT0 | BOOT1 | 启动模式 | 自举空间 |
---|---|---|---|
0 | x | 主FLASH | 选择主FLASH作为自举空间 |
0 | 1 | 系统存储器 | 选择系统存储器作为自举空间 |
1 | 1 | 嵌入式SRAM | 选择嵌入式SRAM作为自举空间 |