STM32芯片介绍
STM32是ST公司以ARM cortex-M为内核的单片机,有很多外设(peripheral)。这里的外设就是定时器,串口,GPIO,SPI等等。ST公司是意大利和法国的两个公司合并而来的。
STM32是个一些列MCU的总称,有多种选项可选,根据命名规则标识芯片规格。
相关学习资料的主要来源包括:ARM公司,ST公司,开发板公司
MCU工作原理
从图中我们可以看出一个MCU一般由CPU(中央处理单元)、地址空间、片上外设三个部分组成。CPU是处理器的核心,它控制着整个系统的运作。片上外设以及芯片内部的各种存储设备都会被映射到地址空间中,使得我们在编写程序的时候只需要对地址空间中的某一段进行读写就可以操控外设了。 片上外设实际上是一个集合,指的是MCU芯片内部为实现某一特殊功能而专门设计的模块,比如说串口、GPIO等等,它们都会映射到地址空间中。
一个芯片上有很多引脚,它们有片上外设控制,是连接芯片内部与用户设备之间的桥梁。 每个引脚的功能基本都是确定的,不过为了节省资源同一个引脚往往对应几个不同的功能。所以具体一个引脚是用作串口还是输出PWM信号,除了由其物理属性决定之外, 还需要在程序中通过软件进行配置。通过正确的连接和配置引脚的功能,合理的操控片上外设,我们就可以控制LED,驱动SD卡,进而实现期望的功能。
注:以上部分转自网上一篇文章STM32的启动过程
最小系统
用STM32组成的最小系统需要:供电、复位、时钟、Boot模式、下载、后备电池几个部分。
如果自行设计一个PCB,至少需要考虑这几个部分,然后才是其他功能。
- 供电
- 要考虑模拟电源、数字电源分开。AMS1117是种输出电压为3.3V的正向低压降稳压器
- 复位:就是一个按钮开关,接一下地就ok了
- 时钟:高速,低速精准
- Boot:两个引脚决定启动模式。就是从SRAM启动,还是从Flash启动
- 下载:SWD、JTAG、串口
- 后备电池:1n4148是小型的高速开关二极管
MAC上STM32开发环境搭建
- gcc-arm-embedded:arm cortex平台的编译器,开源,免费
brew cask install gcc-arm-embedded
- st-link : st公司开发的upload工具
brew install stlink
- PlatformIO IDE(VSCode 插件)
在vscode中安装PlatformIO,这个会自动下载MCU所需要的HAL库,能够自动编译,上传,还是比较方便。
这样就有IDE + Toolchain + Loader,而且都是开源免费的
对嵌入式开发的肤浅理解
MCU内核就是一个CPU,现在普遍用ARM,我想主要是因为生态好。STM32能够广泛被应用,也是因为生态好。其实如果认真看看MIT6.004,都能设计一个CPU出来,但是非主流的指令集没人用。而且小众CPU的成本肯定高。
MCU的外设就是一个电路,他通过寄存器的电压信号,再加上各种电路,比如晶体管,电阻,或者与非门,选择器,移位器等等,来实现数据传递。如果传数据,那就是按照时序,一位位的把信息传递出去。每一位在物理层面传递的只是高电压和低电压,通过人为约定变成0或1。如果传控制信号,可能就是用PWM信号传递。
我原来理解的外设就是鼠标,键盘,显示器这些叫外设。但是在MCU的世界里面,一小块接口电路就叫外设,其实他就是一个外设接口,仅仅是信息通路。
学习MCU就是学习他的各种机制,或者简单说就是规则。然后从外部接数据,和给外部发数据,来实现某种应用。这些应用更多的就是为了让人们省时省力省钱。MCU的软件开发其实就是调用厂家提供的API实现功能,难度和JS开发差不多,不会有什么核心技术。当然一整套完整的嵌入式开发还是牵扯的面比较广,器件选型,接口电路设计,PCB制版,焊装,代码开发,调试运行。内容也不少。但这些毕竟是应用技术,就当是开开眼界吧。