第一章 计算机体系结构(了解)
后续在板子上开发的时候,需要考虑是否有操作系统
- 方式一:有操作系统,通过c库通过os api操作硬件
- 方式二:无操作系统, 通过c库通过固件库操作硬件
第二章 STM32开发板概述
板子/开发板:pcb版,把众多元器件集中到一个板子上面管理
1. 基础概念
Cortex-M系列是ARM针对微控制器应用推出的内核,STM32系列芯片是STMicroelectronics(意法半导体)公司推出的32位ARM Cortex-M微控制器系列产品
STM32系列芯片基于ARM Cortex-M内核,包括Cortex-M0、M0+、M3、M4和M7等多种类型。这些内核提供了不同的性能级别,以满足从低功耗设备到高性能应用的各种需求
2. 产品分类
STM32F0系列
定位:入门级微控制器,适合初学者和简单嵌入式应用。
性能:基于ARM Cortex-M0内核,主频范围为20-64MHz,提供实时性能和低功耗。
应用场景:家居自动化、小型设备控制等。
STM32F1系列
定位:经典中坚力量,广泛应用的系列。
性能:采用Cortex-M3内核,主频可达72MHz,性能稳定。
应用场景:消费电子、小型设备等。
STM32F2系列
定位:高性能与低功耗的结合。
性能:基于Cortex-M3内核,主频高达120MHz,平衡了高性能和低功耗。
应用场景:通信设备、物联网设备等。
STM32F3系列
定位:高度集成数字模拟功能。
性能:搭载Cortex-M4内核,最高主频可达72MHz,具有丰富的数字模拟外设资源。
应用场景:电源管理、电机控制等需要高度集成模拟功能的应用。
STM32F4系列
定位:高性能数字信号处理之选。
性能:基于Cortex-M4内核,主频可高达180MHz,具备硬件浮点单元(FPU),支持DSP指令集,适合处理复杂数字信号和高速数据流。
应用场景:航空航天、工业自动化等。
STM32F7系列
定位:引领行业新标准。
性能:采用Cortex-M7内核,最高主频达到216MHz,具备高级的缓存架构和双精度浮点单元(FPU)。
应用场景:高性能图形显示、多媒体处理等领域。
STM32H7系列
定位:顶级性能系列。
性能:基于Cortex-M7内核,最高主频可达480MHz,是STM32家族中性能最高的系列。具备丰富的存储资源和高速接口。
应用场景:运行复杂的实时操作系统(RTOS)和高级图形界面。
3. STM32芯片命名与规则
比如等下会介绍的:STM32F103C8T6
4. 嵌入式操作系统
4.1 为什么需要操作系统
有的嵌入式系统没有操作系统。只能调用芯片产品提供一下私有库文件来操作。
优点:性能高, 缺点:通用性非常差。
有操作系统,就有操作系统封装了硬件的不一致。 只需要调用操作系统的api就OK了
4.2 嵌入式操作系统的分类
手机平台: android,ios,鸿蒙等
其他平台:
- rtos(实时操作系统): freertos,rtthread,uccos,qnx等 芯片不是很强
- 通用性: 嵌入式linux(经过裁剪),鸿蒙
5. 外设与硬件接口
5.1 常见的外设
传感器 执行器 显示屏 通信接口 存储设备 输入设备 音频设备 ADC/DAC
ADC/DAC:模拟数字转换器(ADC)和数字模拟转换器(DAC)在模拟和数字信号之间进行转换,这在嵌入式系统中非常有用,特别是当需要处理模拟信号时
5.2 芯片的硬件接口
嵌入式系统中的硬件接口是连接微控制器或其他处理器与外部设备的桥梁,它们允许数据和控制信号的传输
通信的概念
- 通信指的是CPU和外部设备之间或者计算机与计算机之间的数据交互
通信的种类
并行通信
- 传输原理:数据各个位同时进行传输(以字节或字节的倍数进行传输)
- 优点:传输速度快
- 缺点:占用引脚资源、传输成本高、传输距离近、抗干扰能力弱(串扰)
- 应用领域:一般大量数据传输,并且传输距离较近 如计算机总线
串行通信
- 传输原理:数据按位依次顺序传输(每一位都占据固定的时间长度)
- 优点:节约引脚资源(最少一根线)、传输成本低、传输距离远
- 缺点:传输速度慢
- 应用领域:一般用于工控设备、测量设备、少部分通信设备 USB COM
第三章 STM32F103C8T6开发板认识
1. 核心参数
STM32F103C8T6是一款基于ARM Cortex-M3 内核STM32系列的32位的微控制器,程序存储器容量是64KB,需要电压2V~3.6V,工作温度为-40°C ~ 85°C。
STM32F103C8T6芯片的基本参数:
- 类别:集成电路(IC);
- 家族:嵌入式-微控制器;
- 总线宽度:32-位;
- 速度:72MHz;
- 外围设备:DMA,电机控制PWM,PWM,温度传感器;
- 输入/输出数:37;
- 程序存储器容量:64KB (64K x 8);
- 程序存储器类型:FLASH;
- RAM容量:20K x 8;
- 电压-电源(Vcc/Vdd):2 V ~ 3.6 V;
- 模数转换器:A/D 10x12b;
- 振荡器型:内部;
- 工作温度:-40°C ~ 85°C;
- 封装/外壳:48-LQFP。
2. 安装驱动
判断安装完成
3. 普中 STM32F103C8T6启动方式
STM32三种启动模式对应的存储介质均是芯片内置的,它们是:
- 用户闪存=芯片内置的Flash。
- SRAM=芯片内置的RAM区,就是内存啦。
- 系统存储器=芯片内部一块特定的区域,芯片出厂时在这个区域预置了一段Bootloader,就是通常说的ISP程序。这个区域的内容在芯片出厂后没有人能够修改或擦除,即它是一个ROM区。
BOOT1=xBOOT0=0从用户闪存启动,这是正常的工作模式
BOOT1=0BOOT0=1从系统存储器启动,这种模式启动的程序功能由厂家设置。 BOOT1=1BOOT0=1从内置SRAM启动,这种模式可以用于调试
第四章 环境搭建
之后我们就要在这个STM32F103C8T6开发板,烧录程序,就需要先搭建各种环境
1. KEIL5 软件安装
2. 安装 STM32 芯片包
3. 破解KEIL5 软件
KEIL5 安装到这里电脑桌面上会有一个快捷方式,如下所示: 首先以管理员模式打开 KEIL5 软件
- 之后再把得到的序列号,拷贝回去就可以了
4. 固件库的使用
STM32的开发方式有三种:寄存器开发 + 函数库开发 + 图形界面开发
寄存器开发: STM32属于32位的MCU,STM32内部的资源十分丰富,就导致寄存器的数量和复杂度都增大了,就要求开发人员对底层的知识掌握的非常扎实。
函数库开发:相比于寄存器开发,使用库函数开发的程序的运行效率稍微低一些,大概低10%~15%左右,但是对于一些实时性要求不高的产品来说,可以忽略不计。ST公司针对STM32开发了两套库(标准外设库 + HAL库),国内大多数的公司还是在采用标准外设库开发(更稳定、资料更多、容易维护)。
图形界面开发:图形界面开发使用了STM32CubeMX工具
我们学习的事主流的开发方式,使用标准固件库,也就是函数库开发
4.1 CMSIS 标准
什 么 是 CMSIS 标 准 ? CMSIS 标 准 英 文 全 称 是 Cortex MicroControllerSoftware Interface Standard,翻译为中文意思就是ARM Cortex 微控制器软件接口标准。由于基于 Cortex 核的芯片厂商很多,不只是ST 公司,为了解决不同厂家的 Cortex 核芯片软件兼容的问题,ARM 和这些厂家就建立了这套CMSIS标准。
我们可以通过一个基于 CMSIS 标准的应用程序框图来看其重要性。如下图所示:
4.2 建立模块工程
step1: 创建模版工程存放路径
step2: 建立三个文件夹(User、Lib、Obj)
Obj 文件夹:用于存放编译产生的 c/汇编/链接的列表清单、调试信息、hex文件、预览信息、封装库等文件。
User 文件夹:用于存放用户编写的 main.c、stm32f10x.h 头文件、stm32f10x_conf.h配置文件、stm32f10x_it.c和stm32f10x_it.h中断函数文件。
Lib 文件夹:用于存放 CMSIS 标准和 STM32 外设驱动文件
step3: 建立自己原始的Lib文件库
- 注意:startup_stm32f10x_md.s根据我们使用芯片来决定(c8t6属于中等容量,所以使用_md.s)
step4: User: 根据固件库的模板添加
4.3 创建工程
4.4 配置工程文件夹
使用工程管理图标(Manager Project Items)添加文件夹,添加文件
说明一下:
- User下面添加Main.c入口程序,以及中断文件stm32f10x_it.c,后面还可以添加我们的功能性文件;
- Startup添加启动文件,startup_stm32f10x_md.s,(找不到可能是因为文件类型)
- StdPeriph_Driver标准库外设驱动文件,一般先添加常用的外设驱动文件(gpio常用外设、rcc时钟相关文件)
- CMSIS添加两个内核文件
4.5 工程参数设置
4.6 启动测试
- 走到这里就表示都配置完了,之后使用就通过每次的
5. 烧录程序到板子上
开始烧录程序
说明一下:
- 这个TestLED.hex是一个控制这个板子上灯的程序
- 这一排灯会从左向右的,依次闪烁
说明一下:
- st-lib.hex 就是我们刚才写的生成,什么都没做,就是一个死循环
- 由于重新烧录了一遍,所以原来的那个灯又被覆盖了
第五章 第一个LED灯程序
1. STM32 芯片中的GPIO
在 STM32 芯片中,GPIO 是 General Purpose Input/Output 的缩写,中文叫做“通用输入输出口”。它是 STM32 微控制器上用来与外部设备(如按钮、LED、传感器、继电器等)进行通信的基本接口之一
2. 寄存器版
#include "stm32f10x.h"
#include "led.h"
int main()
{
//1.给APB2 GPIO C进行时钟使能
*(uint32_t *)(0x40021000+0x18)=16;
//2.找GPIOC 第13个引脚 输出一个低电平
//2.1设置模式 推挽输出模式 50mhz
*(uint32_t *)(0x40011000+0x04)=0x300000;
//找到对应的端口13引脚 赋值为0 低电平
*(uint32_t *)(0x40011000+0x0C)=0xDFFF;
while(1){
}
return 0;
}
- 主要就是查手册,看文档,看原理图或结构图