
STM32 项目实战
文章平均质量分 94
STM32 CubeMX实战,结合开发板,带你了解ARM Cortex M3, M4内核架构,BootLoader刷新项目,逻辑分析仪项目,智能手表项目
艾格北峰
只为了好玩,Just For Fun.
展开
-
嵌入式系统设计师重要100条知识点速记
嵌入式系统设计师重要100条知识点速记原创 2025-04-10 07:37:22 · 1017 阅读 · 0 评论 -
STM32 物联网智能家居 (七) 设备子系统--风扇控制
下面我们来讲解设备子系统中的风扇控制,这是我们设备子系统中的最后一章,相信前面大家一家掌握了这种架构分层的编程思想,后续会很容易将程序进行扩展和开发。下面是STM32物联网智能家居的系统设计图,本节我们讲解的风扇系统是通过GPIO进行控制,通过INA和INB两个引脚分别给高低电平,使风扇进行正转和反转。原创 2025-02-27 07:44:04 · 1235 阅读 · 0 评论 -
ARM Cortex-M3 技术解析:核寄存器R1-R15介绍及使用
作为嵌入式开发领域的经典处理器内核,ARM Cortex-M3(CM3)凭借其高效能、低功耗和丰富特性,在工业控制、物联网、消费电子等领域广泛应用。而内核寄存器是我们调试代码,理解程序运行逻辑必不可少的好帮手,理解汇编是通往嵌入式高手的必经之路。下面本文从技术角度解析其核心架构与核寄存器做相关讲解。ARM Cortex-M3是一款面向嵌入式系统的32位RISC处理器内核,采用改进型哈佛架构,通过独立指令总线(I-Code)和数据总线(D-Code)实现并行访问,同时维护统一编址的4GB线性存储空间。内核配备原创 2025-02-22 09:21:26 · 1347 阅读 · 0 评论 -
STM32 物联网智能家居 (六) OLED显示设备
OLED(Organic Light-Emitting Diode,有机发光二极管)显示屏是一种常见的显示技术,广泛应用于智能手机、智能手表、嵌入式设备等。下面我们来讲解设备子系统中的OLED显示设备,本节我们不讲解OLED的基本原理,只展示OLED作为设备子系统的编程思路。原创 2025-02-20 07:51:51 · 1133 阅读 · 0 评论 -
STM32 物联网智能家居 (五) 设备子系统之点亮LED灯
对于LED灯控制,我们可以设想一下LED灯的功能。首先就是灯的,主要大概就是这三个功能。我们如何将这三个功能抽象出来呢,无论底层的LED设备是什么,都可以用这个结构体抽象出来。如下面所示,控制LED设备肯定需要初始化函数,控制LED设备亮灭,目前设置LED灯的颜色需要三色灯,目前不支持,控制LED灯的亮灭,可以通过给出不同占空比的PWM波进行控制亮度,目前该项目没有考虑。原创 2025-01-18 13:13:09 · 1369 阅读 · 1 评论 -
STM32 物联网智能家居 (四) 设备子系统之分层框架
前面我们讲述了输入子系统中的按键输入和标准输入,我们学习了函数指针的调用方法,这种方法一般在裸机程序中使用的比较少,但在Linux、FreeRTOS和RT-Thread操作系统中使用的比较多。这种方法有利于函数的封装、扩展。方便后续再给软件增加新的接口提供便利。下面我们继续采用上面面向对象的方法,来讲解我们的设备子系统。设备子系统分为三类,GPIO控制、风扇控制和OLED显示这三部分。原创 2025-01-16 23:21:18 · 1598 阅读 · 0 评论 -
STM32 物联网智能家居 (三) 输入子系统
STM32物联网智能家居项目通过添加设备抽象层,如GPIO键和时间监控,配合输入系统和测试,已构建了一个框架分明的物联网智能家居输入子系统。此系统能将高度进行抽象和分层,对于事件跨芯片和平台进行多样化处理,最终展现了很好的优化效果。原创 2025-01-15 23:26:21 · 1089 阅读 · 0 评论 -
STM32 物联网智能家居 (二)-开发环境及工程搭建(STM32CubeMX)
这篇文章我们具体会讲到整个项目需要哪些硬件模块、软件环境、搭建最小工程时用到STM32CubeMX的详细配置指导,以及最后用Keil 5工具进行编译工程的教学,- 中控屏启动后,自动连接家里的路由器,在中控屏上显示出路由器的IP地址;- 用户用手机上启动微信小程序,输入中控屏显示的IP,连接到家里的中控屏上;- 用户在微信小程序里,点击图标控制家中的灯、风扇、空调、窗帘、除湿器等,并读取屋内温湿度;- 并且中控屏每隔60s向微信小程序传输一次家中温度和湿度值进行更新;原创 2025-01-14 08:08:24 · 1346 阅读 · 0 评论 -
STM32 物联网智能家居 (一) 方案设计STM32+ESP8266+TCP/UDP/MQTT
下面我们要开展的博客专栏,该专栏我们会将STM32各种外设模块I2c、Usart、Wifi、ESP8266、分层编程思想以及调试的方法融入到整个专栏中,让你从一个单片机小白,进化到一个能独立编写出具有软件框架思维的初级单片机爱好者。整个专栏我借鉴了韦东山老师的双RTOS课程中内容。下面让我们一起来学习一下。下面展示三张系统设计框图,具体内容我会在后面详细介绍,这三张图放到前面开宗明义,让大家一看就系统设计、硬件设计和软件设计的思路。下面是我们的系统设计:下面是将整个系统抽象出来的硬件框图。原创 2025-01-12 13:57:49 · 2166 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (十四) 所有源代码获取
大家好,我们的文章已经更新了13期了,历时半年时间,从BootLoader的方案,到STM32的硬件设置,STM32CubeMx配置硬件GPIO,LED,UART,NVIC,再到使用STM32CubeIDE编译工程,使用STM32CubeProgrammer查看MCU的Flash和RAM的Hex内容,BootLoader和App的地址划分,BootLoader地址跳转,Flash写入,擦除,Option Byte操作,Python上位机等等。原创 2024-12-05 08:03:08 · 525 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (十三) Python上位机介绍
这是我们STM32 BootLoader的最后一篇文章了,讲述用Python写的上位机,也更新了半年时间了,谢谢大家的支持,到目前为止,已经更新了12篇文章了,想必大家对BootLoader已经有了个基本的了解,下面是Python上位机的全部源码,有需要的兄弟可以借鉴一下,水平有限。原创 2024-12-03 08:08:12 · 1191 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (十二) Option Byte之FLASH_OPTCR-命令0x58
OPTION Byte 是 STM32 系列芯片中一种特殊的配置区域,存储在片内闪存(Flash memory)中。它的主要作用是提供芯片启动、保护和工作模式等关键参数的配置选项。这些字节在系统启动时被加载到对应的配置寄存器中,影响芯片的行为。是一个 32 位寄存器,其各位或各位段控制特定的 Option Byte 配置。位段名称说明[0]OPTLOCK选项锁位(Option Lock)[1]OPTSTRT选项启动位(Option Start)[2:3]BOR_LEV。原创 2024-12-01 09:22:49 · 1655 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (十一) Flash写操作-命令0x57
STM32F407 芯片采用 Cortex-M4 内核,内置 Flash 存储用于程序和数据存储。扇区 0 到 3:16KB 每扇区扇区 4:64KB扇区 5 到 11:128KB 每扇区扇区编号起始地址大小00x0800000016 KB10x0800400016 KB20x0800800016 KB30x0800C00016 KB40x0801000064 KB5-110x08020000 开始每扇区128 KB分区结构。原创 2024-11-18 07:53:26 · 1302 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56
STM32F407 芯片采用 Cortex-M4 内核,内置 Flash 存储用于程序和数据存储。扇区 0 到 3:16KB 每扇区扇区 4:64KB扇区 5 到 11:128KB 每扇区这种不同大小的扇区设计适合不同的应用需求,比如小容量扇区用于存储配置数据,大容量扇区用于存储固件。在本篇文章,我们的主要是介绍0x56的命令,这个命令主要是在BootLoader中擦除指定Flash Sector的命令。原创 2024-11-15 07:30:46 · 2003 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
在本篇文章,我们的主要是介绍0x55的命令,这个命令主要是在BootLoader中让程序跳转到指定地址。通过上位机发送10 Byte的数据,其中第1 Byte为整个数据的长度,第2Byte为指令码,第3-6 Byte为跳转的地址,第7-10 Byte为前6个Byte的CRC校验值。上位机通过串口UART发送给下位机,下位机回复地址是否跳转成功的标志。原创 2024-11-08 08:15:58 · 1770 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (八) 读取Flash保护ROP-0x54
介绍一下BootLoader一上电对芯片Option Byte操作的过程,Option Byte可以配置的功能包括**Read protection (RDP) **读出保护级别,**BOR级别(Brown-out Reset)**设置电压阈值,**看门狗配置**,**Flash写保护**。原创 2024-11-08 07:24:19 · 1180 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (七) 获取芯片ID-0x53
前面的一系列文章中,我们介绍了整体的BootLoader的一个方案,现在我们针对该BootLoader设计多个命令,下面我们来讲述获取芯片ID的命令-0x53。STM32F407的Device ID(设备标识符)和Type ID(类型标识符)是用于标识芯片的唯一性信息。Device ID通常是芯片生产时赋予的唯一序列号,而Type ID用于标识芯片的型号和系列。原创 2024-10-12 08:05:52 · 1105 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (六) 获取帮助-命令0x52
在嵌入式MCU软件开发中,通过串口进行人机交互是非常常见且重要的操作方式。获取帮助的命令通常用来向用户展示所有支持的交互指令及其使用方法。原创 2024-09-17 08:37:38 · 1735 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (五) 获取软件版本号-命令0x51
通过读取上位机终端输入的“1”,知道是要获取软件版本号的命令,则按照规定先发送数据长度5,在发送命令指令0x51,在计算前两位的CRC值,总共6byte的数据发送给下位机。通过switch语句,判断0x51,则进入bootloader_handle_getver_cmd(bl_rx_buffer),来回去软件版本号的函数。启动第一个字节,为接下来要发送数据的长度,即为5个字节,第二个字节为0x51,即为上面获取软件版本号的指令,后四位为前两位的CRC校验位。如果正确的传输,则发送ACK让上位机接收。原创 2024-07-17 21:26:13 · 1394 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (四) 通信协议
前面几章节,我们已经介绍了BootLoader的整体程序框架,方案设计,以及STM32CubdeMX的配置操作。下面切入整个BootLoader项目的核心内容,通信协议。我理解的通信协议,其实就是双方提前约定好的暗号。比如说到了提前约定好的地方,一个人逢人便说:“天王盖地虎”。只有懂他暗号对接的人才知道,这是他要找的人,另外一个人就回:”小鸡炖蘑菇“。至此,这两个便通过暗号,传达到了他们配对的信息。原创 2024-07-14 16:16:59 · 1404 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (三) 程序框架搭建及刷新演示
本项目采用正点原子探索者v2开发板,选用其中的左下角的USB串口进行和上位机之间的串口通信。正点原子STM32F4 探索者V2开发板,如下图所示,通过短接PA9-RXD,短接PA10-TXD,即将USART1与CH340芯片连接在一起,串口USART1与上位机可通过USB进行通信。如下图电路所示,使用一根MicroUSB结构的USB数据线,一端连接计算机的USB口,一端连接开发版左下角的USB_232口上,就可以在计算机上虚拟出一个串口,通过这个虚拟串口可以进行计算机与开发板之间的串口通信。原创 2024-07-13 11:53:00 · 1202 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (二) 方案介绍
本项目做的BootLoader是在STM32自带的启动一级boot上加了一层,即为二级Boot,其是专门为客户自定义的启动过程中操作软件的后门。主要作用是更新MCU中的软件,在正常启动过程中,CB刷新整个控制器中的软件。整个软件的代码块如下图所示,最下一层是SB(ST自带的Boot),这里面初始化异常向量表,初始化堆栈和RAM。第二层是CB(客户定制化的Boot),这里面主要是执行客户所定义的启动逻辑,其中包括刷新整个控制器中的软件,获取软件版本号,擦除指定Sector的代码原创 2024-06-23 18:54:32 · 1344 阅读 · 2 评论 -
STM32 BootLoader 刷新项目 (一) STM32CubeMX UART串口通信工程搭建
本项目采用正点原子探索者v2开发板,选用其中的左下角的USB串口进行和上位机之间的串口通信。正点原子STM32F4 探索者V2开发板,如下图所示,通过短接PA9-RXD,短接PA10-TXD,即将USART1与CH340芯片连接在一起,串口USART1与上位机可通过USB进行通信。如下图电路所示,使用一根MicroUSB结构的USB数据线,一端连接计算机的USB口,一端连接开发版左下角的USB_232口上,就可以在计算机上虚拟出一个串口,通过这个虚拟串口可以进行计算机与开发板之间的串口通信。原创 2024-06-11 08:10:56 · 1820 阅读 · 0 评论 -
一文读懂STM32中断NVIC(超详细+中断CubeMX配置指南)
STM32F407有23个外部中断,每个输入线都可以单独配置触发事件,其中EXTI0至EXTI4的每个中断有独立的ISR,EXTI线[9:5]中断共用一个中断号,也就是共用ISR,EXTI线[15:10]中断也共用ISR,见下表所示。如下图所示,是外部有信号从右边输入线输入,通过边缘检测电路,判断其中断标志位,进而一步步输送到NVIC中断控制器中。但是对于检测按键输入的外部中断,这是有问题的,因为清除中断挂起标志位后,按键的抖动就会触发下一次中断,并将中断挂起标志位置位,就会在执行一次回调函数。原创 2024-03-11 22:46:09 · 6726 阅读 · 1 评论 -
STM32 FSMC (Flexible static memory controller) 灵活静态内存控制器介绍
FSMC模块能够与同步和异步存储器以及16位PC内存卡进行接口。其主要目的是:将AHB事务转换为适当的外部设备协议,满足外部设备的访问时序要求。所有外部存储器与控制器共享地址、数据和控制信号。每个外部设备通过唯一的芯片选择来访问。FSMC一次只对一个外部设备进行访问。原创 2024-02-10 16:48:15 · 2021 阅读 · 0 评论 -
I2C总线和通信协议详解 (超详细配42张高清图+万字长文)
I2C(Inter-Integrated Circuit)通信总线,作为嵌入式系统设计中的一个关键组成部分,其灵活性和高效率使其在高级应用中备受青睐。本文旨在提供关于I2C通信总线的深度解析,包括其基本概念、特点、通信协议,以及在不同场景下的高级应用和最佳实践。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C通信协议可以用普通GPIO引脚进行软件模拟。I2C接口主要用于通讯速率要求不高,以及多个器件之间通信的应用场景。原创 2024-01-17 07:50:02 · 3537 阅读 · 0 评论 -
CAN总线通信详解 (超详细配34张高清图)
CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到10Km 时,CAN 仍可提供高达50Kbit/s 的数据传输速率。由于 CAN 总线具有很高的实时性能,现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。原创 2024-01-13 17:54:41 · 13376 阅读 · 1 评论 -
STM32 CubeMX 中断NVIC 实战 (超详细配30张高清图,附源码)
STM32F407的嵌套向量中断控制器(Nested Vectored Interrupt Controller,NVIC)管理所有中断,它有82个可屏蔽中断,还有13个系统中断。82个可屏蔽中断和部分系统中断可配置中断优先级,总共有16个优先级。NVIC是ARM Cortex-M处理器内部的模块,负责管理处理器的中断。在STM32系列中,要使用中断,通常的步骤包括配置相关的外部硬件(如果需要)、配置NVIC以及编写中断服务程序。在初始化过程中,需要确保配置中断优先级和使能相应的中断。原创 2024-01-03 10:12:01 · 2475 阅读 · 1 评论 -
STM32 CubeMX GPIO 输入/输出按键点亮LED灯实战 (超详细配高清图,附源码)
STM32F407ZG有8个16引脚的GPIO端口,从PA到PH,还有一个12引脚的PI端口,这些GPIO端口都链接在AHB1总线上,最高时钟频率可以达到168MHz(如下图时钟树),GPIO引脚能承受5V电压。一个端口的16个GPIO引脚的功能可以单独配置,每个引脚的输入/输出数据可以单独读取或输出。一个GPIO引脚的内部结构如下图所示,其内部有双向保护二极管,有可配置的上拉或下拉电阻。每个GPIO引脚可以配置为多种工作模式。原创 2023-12-26 21:50:42 · 2313 阅读 · 0 评论 -
嵌入式软件之链接脚本 .ld
编译:将源代码(如C或C++)转换为汇编语言。汇编:将汇编语言转换为机器代码。链接:将多个对象文件和库合并成一个单一的可执行文件。RAM:用于存储变量和程序数据。ROM:用于存储程序代码和常量数据。Stack:用于存储局部变量和函数调用的返回地址。Heap:用于动态内存分配。ELF(Executable and Linkable Format)是一种常用的可执行文件格式。它包含了程序的代码、数据、符号表等信息,可以帮助链接器正确地组合各个代码和数据段。在MEMORY。原创 2023-09-14 15:42:37 · 551 阅读 · 0 评论 -
基于freeRTOS制作音乐播放器方案和框架
总结你在项目中学到的东西,以及你可以在未来项目中应用的教训。编写一个完整的音乐播放器源代码超出了这里能提供的帮助,这是一个庞大的项目,需要很多时间和专业知识。但我可以帮你开始这个项目,提供一个简单的框架和一些你可能会找到的有用资源。原创 2023-09-11 08:05:19 · 1104 阅读 · 1 评论 -
Registered ARM Compiler Version not found in path:‘ARMCLANG’! Keil MDK5.9不安装Compiler Version5解决办法
Compiler VersioWaring: Registered ARM Compiler Version not found in path:‘ARMCLANG’! Keil MDK5.9 不预安装Compiler Version5解决办法n5解决办法原创 2023-03-28 07:46:43 · 9054 阅读 · 3 评论