目录
STM32简介
- STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器
- STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等
- STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的嵌入式微控制器
ARM简介
- ARM既指ARM公司,也指ARM处理器内核
- ARM公司是全球领先的半导体知识产权(IP)提供商,全世界超过95%的智能手机和平板电脑都采用ARM架构
- ARM公司设计ARM内核,半导体厂商完善内核周边电路并生产芯片
片上资源/外设
F1系列外设表:
前两个是位于内核里的外设,其他都是内核外的外设,下面做一个大概介绍,现在只需要有个印象。
NVIC(嵌套向量中断控制器):STM32 的 NVIC 可管理多个中断源,通过设置优先级来决定中断响应的先后顺序,确保关键中断能及时得到处理。
SysTick(系统滴答定时器):为 STM32提供了一个简单的定时基准,常用于操作系统的任务调度和时间管理。
RCC(复位和时钟控制):负责为 STM32 配置系统时钟源,如外部高速时钟、内部高速时钟等,并可进行时钟分频和倍频操作。
GPIO(通用 IO 口):STM32F拥有丰富的 GPIO 引脚,可灵活配置为输入、输出、复用功能等,以连接各种外部设备。
AFIO(复用 IO 口):在 STM32中,可通过 AFIO 实现引脚的功能复用,节省引脚资源。用于复用端口重定义以及中断端口配置。
EXTI(外部中断):STM32的 EXTI 可以响应来自多个 GPIO 引脚的外部中断请求,快速响应外部事件。
TIM(定时器):STM32F包含多个通用定时器和高级控制定时器,可实现定时、计数、PWM 输出等功能。
ADC(模数转换器):STM32的 ADC 可将模拟信号转换为数字值,用于测量外部模拟量。
DMA(直接内存访问):在 STM32中,DMA 可实现数据在内存与外设之间的快速传输,减轻 CPU 负担。
USART(同步/异步串口通信):STM32中的 USART 支持多种波特率和数据格式,用于与其他设备进行串行通信。
I2C(Inter-Integrated Circuit,I2C 通信):用于与符合 I2C 协议的设备进行通信,如传感器、EEPROM 等。
SPI(Serial Peripheral Interface,SPI 通信):STM32的 SPI 接口可实现高速的串行数据传输。
CAN(Controller Area Network,CAN 通信):STM32中的 CAN 控制器支持 CAN 2.0A 和 CAN 2.0B 协议,能够实现高速、可靠的网络通信,适用于工业控制和汽车电子等领域。
USB(Universal Serial Bus,USB 通信):STM32部分型号支持 USB 全速设备接口,可用于与计算机或其他 USB 主机进行通信。
RTC(实时时钟):在 STM32中,RTC 可在低功耗模式下运行,保持准确的时间信息,常用于定时唤醒和时间记录。
CRC(Cyclic Redundancy Check,CRC 校验):用于对数据进行校验,提高数据传输和存储的可靠性。
PWR(电源控制):管理 STM32的电源模式,包括睡眠、待机和停机模式,以实现低功耗运行。
BKP(备份寄存器):用于在 STM32掉电或复位时保存重要的数据。
IWDG(独立看门狗):在 STM32运行异常时,独立看门狗会产生复位信号,保证系统的稳定性。
WWDG(窗口看门狗):相较于 IWDG,WWDG 具有更严格的监控机制。
DAC(数模转换器):将数字量转换为模拟电压输出。
SDIO(SD 卡接口):部分 STM32型号具备 SDIO 接口,可方便地与 SD 卡进行数据交互。
FSMC(可变静态存储控制器):可连接外部的静态存储器,扩展存储容量。
USB OTG(USB On-The-Go):在支持 USB OTG 的 STM32型号中,设备可在主机和从机模式间切换
查看数据手册了解是否具备所需外设:如我们使用的STM32F103C8t6有1个高级定时器,3个通用定时器......
命名规则
了解即可
系统结构
引脚定义
STM32F103C8T6引脚定义表:
红色:电源相关
蓝色:最小系统相关
绿色:IO口
启动配置
启动配置即指定程序开始运行的位置,一般情况下程序都在Flash程序存储器开始执行,但是某些情况下我们也可以让程序在别的地方开始执行完成特殊功能。在STM32F10xxx里,可以通过BOOT[1:0]引脚选择三种不同启动模式。启动模式表如下:
最小系统电路
STM32开发方式
介绍STM32开发方式,目前主要有基于寄存器的方式、基于标准库(库函数方式)、基于HAL库。
基于寄存器的开发方式:直接操作芯片的底层寄存器来实现各种功能。
- 优点:能够对硬件实现最精细的控制,代码执行效率高,占用资源少,运行速度快。
- 缺点:开发难度大,代码可读性差,需要对芯片的寄存器有深入的了解。
基于标准库(库函数方式)的开发方式:是对寄存器操作的封装,提供了一系列易于使用的函数。
- 优点:降低了开发难度,提高了代码的可读性和可维护性,同时也能保证较高的执行效率。
- 缺点:不同系列的芯片可能需要修改部分代码以适配。
基于 HAL 库的开发方式:是意法半导体提供的一种更高层次的抽象库,图形化界面。
- 优点:具有更好的跨系列芯片的兼容性,大大简化了开发流程,图形化适合快速开发和新手入门。
- 缺点:隐藏了底层逻辑,难以提高水平
本教程使用基于标准库的方式。
新建工程步骤
- 建立工程文件夹,Keil中新建工程,选择型号
- 工程文件夹里建立Start、Library、User等文件夹,复制固件库里面的文件到工程文件夹
- 工程里对应建立Start、Library、User等同名称的分组,然后将文件夹内的文件添加到工程分组里
- 工程选项,C/C++,Include Paths内声明所有包含头文件的文件夹
- 工程选项,C/C++,Define内定义USE_STDPERIPH_DRIVER
- 工程选项,Debug,下拉列表选择对应调试器,Settings,Flash Download里勾选Reset and Run
具体步骤参考哔哩哔哩江协科技:【STM32入门教程-2023版 细致讲解 中文字幕-哔哩哔哩】 https://b23.tv/imsg6bS