STM32 修炼手册

news2025/5/14 14:35:05

第一章 计算机体系结构(了解)

后续在板子上开发的时候,需要考虑是否有操作系统 

  • 方式一:有操作系统,通过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芯片的基本参数:

  1. 类别:集成电路(IC);
  2. 家族:嵌入式-微控制器;
  3. 总线宽度:32-位;
  4. 速度:72MHz;
  5. 外围设备:DMA,电机控制PWM,PWM,温度传感器;
  6. 输入/输出数:37;
  7. 程序存储器容量:64KB (64K x 8);
  8. 程序存储器类型:FLASH;
  9. RAM容量:20K x 8;
  10. 电压-电源(Vcc/Vdd):2 V ~ 3.6 V;
  11. 模数转换器:A/D 10x12b;
  12. 振荡器型:内部;
  13. 工作温度:-40°C ~ 85°C;
  14. 封装/外壳: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. 寄存器版

STM32F103C8t6 寄存器点灯_stm32f103c8t6的led灯接在哪个引脚上?-CSDN博客

#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;
}
  • 主要就是查手册看文档,看原理图结构图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2375462.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

缓存(2):数据一致性

概述 一致性就是数据保持一致,在分布式系统中,可以理解为多个节点中数据的值是一致的。 强一致性:这种一致性级别是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大弱一致性:这种一致性级别约束了系统在写入成功…

ppy/osu构建

下载 .NET (Linux、macOS 和 Windows) | .NET dotnet还行 构建:f5 运行:dotnet run --project osu.Desktop -c Debug

基于几何布朗运动的股价预测模型构建与分析

基于几何布朗运动的股价预测模型构建与分析 摘要 本文建立基于几何布朗运动的股价预测模型,结合极大似然估计与蒙特卡洛模拟,推导股价条件概率密度函数并构建动态预测区间。实证分析显示模型在标普500指数预测中取得89%的覆盖概率,波动率估…

python如何提取Chrome中的保存的网站登录用户名密码?

很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名、密码,非常方便。作为python脚本,能否拿到用户提前保存在浏览器中的用户名密码,用以自动登录呢?必须有,小爬…

Redis实现分布式获取全局唯一自增ID的案例。

【1】简易自增版本(从 1 开始 1,2,3,...) 项目结构 下面是一个基于 RedisTemplate 实现的分布式全局唯一自增 ID 生成器的案例。适用于 Java Spring Boot 环境,利用 Redis 的原子操作 INCR 指令。 ✅ 原理说明 Redis 提供的 INCR 命令是原子性的&…

人脸识别备案:筑牢人脸信息 “安全墙”

人脸识别备案制度主要依据《人脸识别技术应用安全管理办法》建立,人脸识别技术广泛应用于安防、金融、门禁、交通等领域,带来便利高效的同时,人脸信息安全问题也引发担忧。为规范技术应用、保护个人信息权益,人脸识别备案制度应运…

基于RT-Thread的STM32F4开发第三讲——DAC

文章目录 前言一、DAC是什么?二、RT-Thread工程创建三、DAC函数编写1.DAC.c2.DAC.h3.main.c 四、结果测试五、工程分享 前言 本章利用RT-Thread最新的驱动5.1.0开发DAC模块,使用的开发板是正点原子的STM32F4探索者。很多配置和上文重复,本文…

网络状态可以通过hutool.HttpStatus获取

网络状态可以通过hutool.HttpStatus获取 全部都是静态int类型

Gemini 2.5 推动视频理解进入新时代

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

谈谈各种IO模型

目前的IO模型有5种:BIO(阻塞IO)、NIO(非阻塞IO)、IO多路复用、信号驱动IO、异步IO(AIO) 了解这些模型之前,我们需要先知道IO模型中的几个概念:阻塞&非阻塞、同步&am…

Linux系统管理与编程20:Apache

兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 做好网络和yum配置,用前面dns规划的www的IP进行。 #!/bin/bash #----------------------------------------------------------- # File Name: myWeb.sh # Version: 1.0 # …

BFS算法篇——打开智慧之门,BFS算法在拓扑排序中的诗意探索(下)

文章目录 引言一、课程表1.1 题目链接:https://leetcode.cn/problems/course-schedule/description/1.2 题目分析:1.3 思路讲解:1.4 代码实现: 二、课程表||2.1 题目链接:https://leetcode.cn/problems/course-schedul…

【入门】纸盒的最大体积是多少?

描述 在一张尺寸为 n * n 厘米的正方形硬纸板的四个角上,分别裁剪掉一个 m * m 厘米的小正方形,就可以做成一个无盖纸盒,请问这个无盖纸盒的最大体积是多少? 立方体的体积 v 底面积 * 高) 比如: n 5 &am…

QT5.14安装以及新建基础项目

进入qt中文网站:Qt | 软件开发全周期的各阶段工具 额,考虑新手可能还是找不到,我就分享一下我下载的的吧 通过网盘分享的文件:qt-opensource-windows-x86-5.14.2.exe 链接:https://pan.baidu.com/s/1yQTRp-b_ISje5B3UWb7Apw?pw…

KV cache 缓存与量化:加速大型语言模型推理的关键技术

引言 在大型语言模型(LLM)的推理过程中,KV 缓存(Key-Value Cache) 是一项至关重要的优化技术。自回归生成(如逐 token 生成文本)的特性决定了模型需要反复利用历史token的注意力计算结果&#…

BlockMesh Ai项目 监控节点部署教程

项目介绍 BlockMesh 是一个创新、开放且安全的网络,允许用户轻松地将多余的带宽货币化。 它为用户提供了被动获利并参与人工智能数据层、在线隐私、开源和区块链行业前沿的绝佳机会。 此教程为Linux系统教程 教程开始 首先到这里注册账号,注册后保存…

【Bluedroid】蓝牙 HID DEVICE 初始化流程源码解析

本文深入剖析Android蓝牙协议栈中HID设备(BT-HD)服务的初始化与启用流程,从接口初始化、服务掩码管理、服务请求路由到属性回调通知,完整展现蓝牙HID服务激活的技术路径。通过代码逻辑梳理,揭示服务启用的核心机制&…

iOS创建Certificate证书、制作p12证书流程

一、创建Certificates 1、第一步得先在苹果电脑上创建一个.certSigningRequest的文件。首先打开钥匙串,使用快捷键【command空格】——输入【钥匙串】回车(找不到就搜一下钥匙串访问使用手册) 2、然后在苹果电脑的左上角菜单栏选择【钥匙串…

curl发送数据不为null,但是后端接收到为null

curl -X POST http://localhost:8080/xiaozhi/test --header "Content-Type: application/json" -d "{\"age\":123}"经过检查发现注解导入错误 正确的应该是 import org.springframework.web.bind.annotation.RequestBody;

blazor与硬件通信实现案例

在网页接入硬件交互通信方案这篇博客中,曾经提到了网页中接入各种硬件操作的方法,即通过Windows Service作为指令的中转,并建立websocket通信连接,进而实现接入硬件的各种操作。这篇博客就以实际的案例来讲解具体怎么实现。 一、建立Windows Service项目 比如我就建立了一…