什么是STM32单片机
STM32 单片机
STM32单片机 是由 ST 公司生产的主要基于ARM Cortex-M内核的一系列32位单片机
ST:意法半导体(STmicroelctronis,简称 ST)集团于1987年成立,是由意大利的SGS 微电子公司和法 Thomson半导体公司合并而成,ST 公司生产的 MCU 系列有 STM8 和 STM32
32 位单片机:
本质上是CPU内部的ALU是8位的,CPU是单片机的核心,ALU是CPU的核心
单片机的CPU寄存器(如累加器、指令寄存器、程序计数器等)的宽度为32位,可以支持更大的地址空间。
单片机内部的数据总线宽度(单片机进行内部数据传输的线路)为32位,可以一次可以读取、处理和写入32位的数据,而8位单片机一次性只能处理8位数据,如果8位单片机要处理32位数据,那么就需要分多次处理
例如,一个32位的地址寄存器可以寻址 2^32 种地址,即最大可以拥有4GB的内存空间,而我们使用的windows电脑现在大多是64位的,那它的内存最大可以为2^64种地址,即可以拥有17179869184GB
ARM 内核
ARM 是一家公司,它是 Keil 软件的母公司
ARM 公司提供 ARM 处理器架构(采用 RISC-精简指令集),主要用于移动端芯片的设计(比如手机、平板,穿戴设备)芯片
桌面端芯片设计主要用 X86 架构(采用 CISC -复杂指令集),比如 AMD 和 Intel 的芯片都使用 X86 架构
ARM 处理器架构命名史:
从 1984 的 ARM1 到 2004 ARM11
之后放弃数字命名,用 Corex来命令处理器产品
Cortex-A 系列:主打高性能手机,平板,智能电视等
Cortex-R 系列:主打实时汽车,工业控制,医疗设备
Cortex-M 系列:主打嵌入式 传感器,智能家居等
每一个系列都有很多版本,比如 Cortex-M3、Cortex-M4 等
嵌入式领域的芯片主要使用Cortex-M 内核系列
STM32 系列单片机命名规则
STM32系列单片机支持的不同内核和应用场景
STM32F103C8T6单片机
我学习STM32单片机使用的是和江科大同款的 STM32F103C8T6单片机,也买了同款全套硬件
STM32F103单片机是中等容量高性能系列,集成了Arm Cortex-M3 32位RISC内核
引脚功能
1. 电源引脚
- VDD 和 VSS:芯片的电源引脚,用于供电和接地。
-
- VDD:电源正极(通常3.3V)。
- VSS:电源地(GND)。
- VDDA 和 VSSA:模拟电源引脚,用于ADC等模拟功能。
2. 时钟引脚
- OSC_IN 和 OSC_OUT:外部时钟输入/输出引脚,用于连接外部晶振。
- PC14-OSC32_IN 和 PC15-OSC32_OUT:32kHz低速外部时钟输入/输出引脚,用于RTC(实时时钟)
3. 复位引脚
- NRST:复位引脚,用于复位芯片。可以通过外部按钮或电路触发复位。
4. 备用电源引脚
- VBAT:备用电池引脚,用于为RTC和备份寄存器供电。
5. GPIO 引脚
- PA0 到 PB15:通用I/O引脚,支持多种功能。
-
- I/O 类型:输入/输出(I/O)或仅输入(I)
- 主功能:默认的GPIO功能(如PA0作为普通I/O)
- 复用功能:连接到外设(如定时器、串口、SPI等)
- FT 标记:表示该引脚支持5V容错(5V Tolerant)
6. 专用功能引脚
- BOOT0:启动模式选择引脚,用于选择芯片的启动模式
- PA0-WKUP:唤醒引脚,用于从待机模式唤醒
- PC13-TAMPER-RTC:连接到RTC的备用引脚,可用于防篡改功能
最小系统
下图使用的是嘉立创地阔星开发板的图片和最小系统原理,非常推荐购买,价格实惠功能全面
立创·地阔星STM32F103C8T6开发板 - 立创开源硬件平台
开发方式
我们在51系列单片机中用到的开发方式是基于寄存器的开发,但是对于STM32这种32位单片机,随着它功能强大的同时,寄存器数量也随之急剧增加,所以传统的寄存器开发效率很低,从而出现了基于库函数的开发,分别有标准库函数和HAL库函数
- 基于寄存器开发
优点:
代码执行效率高、对硬件理解深入、更换其他芯片上手快
缺点:
开发效率低、代码移植不方便 - 基于标准库函数开发
优点:
相比寄存器开发效率提高、相比寄存器开发难度降低、相比寄存器开发移植容易
缺点:
屏蔽一些硬件信息,不利于新手学习知识
官方己经停止对标准库的更新,新的芯片己经不提供标准库 - 基于 HAL 库函数开发
优点:
ST 主推,支持力度大
开发难度相比前面两种大大降低移植极其容易
缺点:
屏蔽几乎所有硬件信息,不利于新手学习知识
只学习 HAL,学完之后基础知识不够牢固
当迁移到其他 MCU 设备时,一切都要重新学习
至于学要学那种开发方式,我也不确定,有人说标准库太老不值得学,直接学HAL库,但也有人说HAL库还没有完全普及,现在很多公司都还在用标准库。如果你没有确定的选择,我的建议是全都要,库函数跟着江科大学习,寄存器和HAL库跟着尚硅谷学习,不仅可以全都要,还可以巩固学习成果
开发工具
Keil MDK-ARM
Keil 毕竟是 ARM 的子公司所以对采用ARM内核的芯片的适配力度肯定是很好的
Keil 支持寄存器开发和标准库函数开发
VScode+Keil插件
虽然KEIL的编辑和调试能力很强,但是拉胯的代码补全能力让代码写起来很累,所以采用很多嵌入式工程师常用的方法——代码的编辑在VScode中完成,代码的调试在KEIL中完成。
STCubeMX
前两种的开发工具主要用于寄存器和标准库函数开发,而HAL库的开发需要使用ST公司开发的STCubeMX进行图形化开发