当前位置: 首页 > article >正文

STM32 修炼手册

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

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

  • 方式一:有操作系统,通过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;
}
  • 主要就是查手册看文档,看原理图结构图

相关文章:

STM32 修炼手册

第一章 计算机体系结构(了解) 后续在板子上开发的时候,需要考虑是否有操作系统 方式一:有操作系统,通过c库通过os api操作硬件方式二:无操作系统, 通过c库通过固件库操作硬件 第二章 STM32开发板概述 板子/开发板&…...

缓存(2):数据一致性

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

什么是原码和补码

补码的本质确实是模运算(Modular Arithmetic),这是理解补码为何能统一加减法的核心数学原理。下面用最通俗的语言和例子解释清楚: —### 1. 先理解什么是“模运算”- 模运算就是“周期性计数”,比如钟表: -…...

ppy/osu构建

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

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

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

使用交互式半自动化标注工具制作语义分割数据集

参考的初始资源: GitHub项目文档 B站视频 1.安装工具 打开Anaconda Prompt 1.创建虚拟环境 conda create -n isat_env python3.8 conda activate isat_env2.安装GPU版本pytorch 4070 Ti CUDN12.5 pip install torch torchvision torchaudio --index-url https:/…...

deepseek梳理java高级开发工程师微服务面试题

Java微服务高级面试题与答案 一、微服务架构设计 1. 服务拆分原则 Q1:微服务拆分时有哪些核心原则?如何解决拆分后的分布式事务问题? 答案: 服务拆分五大原则: 1. 单一职责原则(SRP)- 每个…...

二分查找算法的思路

二分查找思路总结 明确目标与单调性特点: 核心目标:寻找满足某种条件的答案(如最小/最大值)。单调性要求:需要证明你的判断函数具有单调性——即如果某个答案 T 可行,那么大于 T 的答案通常也是可行的&…...

(1)python开发经验

文章目录 1 安装包格式说明2 PySide支持Windows7 更多精彩内容👉内容导航 👈👉Qt开发 👈👉python开发 👈 1 安装包格式说明 PySide下载地址 进入下载地址后有多种安装包,怎么选择: …...

DAY05:深入解析生命周期与钩子函数

引言 在 Vue 开发中,生命周期和钩子函数是理解组件行为的关键。无论是初始化数据、操作 DOM,还是清理资源,生命周期钩子都提供了精确的控制点。本文将从基础理论出发,结合项目实战,详细剖析 Vue 3 的生命周期机制、组…...

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探索者。很多配置和上文重复,本文…...

UE5通过C++实现TcpSocket连接

在 Unreal Engine 5 的 C 项目中,实现一个具备消息监听、心跳检测和断线重连功能的 TCP 客户端,可以参考以下完整示例。 准备工作 1、模块依赖 在 YourModule.Build.cs 文件中,添加对 Sockets 和 Networking 模块的依赖: Publ…...

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

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

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

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

谈谈各种IO模型

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

基于STM32、HAL库的ADAU1701JSTZ音频接口芯片驱动程序设计

一、简介: ADAU1701JSTZ 是 Analog Devices 公司推出的一款高性能、低功耗音频编解码器 (CODEC) 芯片。它专为便携式音频设备设计,集成了麦克风前置放大器、ADC、DAC、耳机放大器等功能模块,支持多种音频接口和采样率,非常适合与 STM32 微控制器配合使用。 主要特性: 24…...

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…...

什么是Vim

Vim可是Linux中最强大、最受欢迎的文本编辑器之一,很多程序员、系统管理员都离不开它。要说清楚Vim的各种功能和用法,似乎有点长,但我会尽量用简单通俗的方式,把Vim的核心知识讲清楚,让你能一步一步开始使用它。 一、…...

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

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

Java Spring MVC -01

SpringMVC 是一种基于 的实现 MVC 设计模式的请求驱动类型的轻量级 Web 框架,属于 Spring FrameWork 的后续产品,已经融合在 Spring Web Flow 中。 First:SpringMVC-01-SpringMVC 概述 SpringMVC 是 Spring 框架的一个模块,用于构建 Web 应…...

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

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

视频编解码学习十一之视频原始数据

一、视频未编码前的原始数据是怎样的? 视频在未编码前的原始数据被称为 原始视频数据(Raw Video Data),主要是按照帧(Frame)来组织的图像序列。每一帧本质上就是一张图片,通常采用某种颜色格式…...

[Java实战]Spring Boot 3 整合 Apache Shiro(二十一)

[Java实战]Spring Boot 3 整合 Apache Shiro(二十一) 引言 在复杂的业务系统中,安全控制(认证、授权、加密)是核心需求。相比于 Spring Security 的重量级设计,Apache Shiro 凭借其简洁的 API 和灵活的扩…...

Cursor 编辑器 的 高级使用技巧与创意玩法

以下是针对 Cursor 编辑器 的 高级使用技巧与创意玩法 深度解析,涵盖代码生成优化、工作流定制、隐藏功能等层面,助你将 AI 辅助编程效率提升至新高度: 一、代码生成进阶技巧 1. 精准控制生成粒度 行级控制: 在代码行内用 // > 指定生成方向(替代模糊注释)def merge_…...

mysql性能提升方法大汇总

前言 最近在开发自己的小程序的时候,由于业务功能对系统性能的要求很高,系统性能损耗又主要在mysql上,而业务功能的数据表很多,单表数据量也很大,又涉及到很多场景的数据查询,所以我针对mysql调用做了优化…...