![](https://i-blog.csdnimg.cn/direct/6f722fdb8c0c47078c11cd6e9c55e691.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
STM32 项目实战
文章平均质量分 93
STM32 CubeMX实战,结合开发板,带你了解ARM Cortex M3, M4内核架构,BootLoader刷新项目,逻辑分析仪项目,智能手表项目
艾格北峰
只为了好玩,Just For Fun.
展开
-
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 · 638 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (四) 通信协议
前面几章节,我们已经介绍了BootLoader的整体程序框架,方案设计,以及STM32CubdeMX的配置操作。下面切入整个BootLoader项目的核心内容,通信协议。我理解的通信协议,其实就是双方提前约定好的暗号。比如说到了提前约定好的地方,一个人逢人便说:“天王盖地虎”。只有懂他暗号对接的人才知道,这是他要找的人,另外一个人就回:”小鸡炖蘑菇“。至此,这两个便通过暗号,传达到了他们配对的信息。原创 2024-07-14 16:16:59 · 822 阅读 · 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 · 673 阅读 · 0 评论 -
STM32 BootLoader 刷新项目 (二) 方案介绍
本项目做的BootLoader是在STM32自带的启动一级boot上加了一层,即为二级Boot,其是专门为客户自定义的启动过程中操作软件的后门。主要作用是更新MCU中的软件,在正常启动过程中,CB刷新整个控制器中的软件。整个软件的代码块如下图所示,最下一层是SB(ST自带的Boot),这里面初始化异常向量表,初始化堆栈和RAM。第二层是CB(客户定制化的Boot),这里面主要是执行客户所定义的启动逻辑,其中包括刷新整个控制器中的软件,获取软件版本号,擦除指定Sector的代码原创 2024-06-23 18:54:32 · 779 阅读 · 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 · 983 阅读 · 0 评论 -
一文读懂STM32中断NVIC(超详细+中断CubeMX配置指南)
STM32F407有23个外部中断,每个输入线都可以单独配置触发事件,其中EXTI0至EXTI4的每个中断有独立的ISR,EXTI线[9:5]中断共用一个中断号,也就是共用ISR,EXTI线[15:10]中断也共用ISR,见下表所示。如下图所示,是外部有信号从右边输入线输入,通过边缘检测电路,判断其中断标志位,进而一步步输送到NVIC中断控制器中。但是对于检测按键输入的外部中断,这是有问题的,因为清除中断挂起标志位后,按键的抖动就会触发下一次中断,并将中断挂起标志位置位,就会在执行一次回调函数。原创 2024-03-11 22:46:09 · 3677 阅读 · 1 评论 -
STM32 FSMC (Flexible static memory controller) 灵活静态内存控制器介绍
FSMC模块能够与同步和异步存储器以及16位PC内存卡进行接口。其主要目的是:将AHB事务转换为适当的外部设备协议,满足外部设备的访问时序要求。所有外部存储器与控制器共享地址、数据和控制信号。每个外部设备通过唯一的芯片选择来访问。FSMC一次只对一个外部设备进行访问。原创 2024-02-10 16:48:15 · 1693 阅读 · 0 评论 -
一文读懂I2C总线 (超详细配42张高清图)
I2C(Inter-Integrated Circuit)通信总线,作为嵌入式系统设计中的一个关键组成部分,其灵活性和高效率使其在高级应用中备受青睐。本文旨在提供关于I2C通信总线的深度解析,包括其基本概念、特点、通信协议,以及在不同场景下的高级应用和最佳实践。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C通信协议可以用普通GPIO引脚进行软件模拟。I2C接口主要用于通讯速率要求不高,以及多个器件之间通信的应用场景。原创 2024-01-19 20:38:15 · 3948 阅读 · 0 评论 -
I2C总线和通信协议详解 (超详细配42张高清图+万字长文)
I2C(Inter-Integrated Circuit)通信总线,作为嵌入式系统设计中的一个关键组成部分,其灵活性和高效率使其在高级应用中备受青睐。本文旨在提供关于I2C通信总线的深度解析,包括其基本概念、特点、通信协议,以及在不同场景下的高级应用和最佳实践。I2C接口只有2根信号线,总线上可以连接多个设备,硬件实现简单,可扩展性强。I2C通信协议可以用普通GPIO引脚进行软件模拟。I2C接口主要用于通讯速率要求不高,以及多个器件之间通信的应用场景。原创 2024-01-17 07:50:02 · 1821 阅读 · 0 评论 -
一文读懂CAN总线协议 (超详细配34张高清图)
CAN 是 Controller Area Network 的缩写(以下称为 CAN),是 ISO国际标准化的串行通信协议。在当前的汽车产业中,出于对安全性、舒适性、方便性、低公害、低成本的要求,各种各样的电子控制系统被开发了出来。由于这些系统之间通信所用的数据类型及对可靠性的要求不尽相同,由多条总线构成的情况很多,线束的数量也随之增加。为适应“减少线束的数量”、“通过多个 LAN,进行大量数据的高速通信”的需要。CAN 最初出现在80年代末的汽车工业中,由德国 Bosch 公司最先提出。原创 2024-01-14 11:11:26 · 22591 阅读 · 4 评论 -
CAN总线通信详解 (超详细配34张高清图)
CAN 是一种多主方式的串行通讯总线,基本设计规范要求有高的位速率,高抗电磁干扰性,而且能够检测出产生的任何错误。当信号传输距离达到10Km 时,CAN 仍可提供高达50Kbit/s 的数据传输速率。由于 CAN 总线具有很高的实时性能,现在,CAN 的高性能和可靠性已被认同,并被广泛地应用于工业自动化、船舶、医疗设备、工业设备等方面。原创 2024-01-13 17:54:41 · 6515 阅读 · 0 评论 -
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 · 1709 阅读 · 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 · 1719 阅读 · 0 评论 -
嵌入式软件之链接脚本 .ld
编译:将源代码(如C或C++)转换为汇编语言。汇编:将汇编语言转换为机器代码。链接:将多个对象文件和库合并成一个单一的可执行文件。RAM:用于存储变量和程序数据。ROM:用于存储程序代码和常量数据。Stack:用于存储局部变量和函数调用的返回地址。Heap:用于动态内存分配。ELF(Executable and Linkable Format)是一种常用的可执行文件格式。它包含了程序的代码、数据、符号表等信息,可以帮助链接器正确地组合各个代码和数据段。在MEMORY。原创 2023-09-14 15:42:37 · 280 阅读 · 0 评论 -
基于freeRTOS制作音乐播放器方案和框架
总结你在项目中学到的东西,以及你可以在未来项目中应用的教训。编写一个完整的音乐播放器源代码超出了这里能提供的帮助,这是一个庞大的项目,需要很多时间和专业知识。但我可以帮你开始这个项目,提供一个简单的框架和一些你可能会找到的有用资源。原创 2023-09-11 08:05:19 · 663 阅读 · 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 · 5617 阅读 · 3 评论