- 博客(511)
- 资源 (16)
- 收藏
- 关注
原创 字符串转浮点数函数atof、strtod、strtof和strtold详解
历史背景:C89 标准引入的基础函数,隶属于<stdlib.h>,设计目标是快速转换、接口简洁核心特点:无错误处理机制,仅返回转换结果;自动忽略前导空白字符,遇到非数字字符停止转换适用场景:简单场景(如已知字符串格式规范),无需精确错误判断的快速转换// atof:无错误反馈,返回double// strtod:支持endptr和base(base=0时自动识别十进制/八进制/十六进制)// strtof:单精度版strtod// strtold:扩展精度版strtod。
2025-12-09 16:06:42
605
原创 基于STM32F103驱动AD7124-8 24Bit 多通道ADC数据采集模块采集信号
AD7124-8 是一款高精度、低功耗的 24 位模数转换器(ADC),内置多种模拟前端功能,专为高精度传感器测量等应用设计。它支持最多 8 路差分输入,也可配置为最多 16 路伪差分输入,适用于多通道数据采集。产品特性高精度低噪声:内置 24 位 Σ-Δ(Sigma-Delta)ADC,具备极低的输入噪声。可直接连接微弱信号,无需额外前级放大。灵活的功耗模式:提供三种功耗模式(低功耗、普通、全速),可根据需求权衡功耗、速度和噪声性能。
2025-11-12 21:32:14
1021
原创 STM32之TM1638数码管及键盘驱动
TM1638是带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。主要应用于冰箱、空调 、家庭影院等产品的高段位显示屏驱动。• 采用功率CMOS 工艺 • 显示模式 10 段×8 位 • 键扫描(8×3bit)• 辉度调节电路(占空比8 级可调)• 串行接口(CLK,STB,DIO) • 振荡方式:RC 振荡(450KHz+5%) • 内置上电复位电路 • 采用SOP28封装。
2025-10-24 20:48:34
738
原创 嵌入式(C/C++)开发模块化配置与编译、裁剪思想【借鉴freertos与HAL库模块化设计思想】
嵌入式模块化配置与编译方法总结 本文介绍了嵌入式开发中借鉴FreeRTOS和HAL库思想的模块化配置方法,主要内容包括: 预处理宏控制:通过config.h定义模块开关宏,利用#ifdef条件编译控制代码包含 模块化文件组织:每个功能模块独立成.c/.h文件,通过宏或工程配置决定编译 HAL库配置参考:模仿stm32f1xx_hal_conf.h设计,使用外设使能宏控制驱动代码 实际应用示例:展示了UART/SPI模块的配置实现方式 开发环境管理:介绍了Keil中文件包含和宏定义配置方法 这种方法显著提高了
2025-10-16 10:03:49
603
原创 【工程模板复用】STM32CubeMX .ioc的工程名修改,保持工程文件目录和代码不丢失
将xx.ioc 文件用记事本打开;找到ProjectManager.ProjectFileName和ProjectManager.ProjectName,把其后面的参数改成你要修改的新名称;
2025-10-12 16:40:42
970
原创 FreeRTOS互斥信号量解决优先级翻转实战教程
本文介绍了如何使用FreeRTOS的互斥信号量解决优先级翻转问题。通过将二值信号量替换为互斥信号量,当高优先级任务尝试获取被低优先级任务占用的信号量时,系统会临时提升低优先级任务的优先级,防止被中优先级任务抢占。文章详细展示了代码修改过程,包括在FreeRTOSConfig.h中启用互斥信号量、创建互斥信号量的实现原理,并通过串口输出验证了优先级继承机制的工作效果。最后提供了完整的示例代码,演示了互斥信号量如何确保高优先级任务及时执行,避免优先级翻转问题。
2025-10-09 20:27:54
949
原创 FreeRTOS临界资源保护方法
FreeRTOS提供多种临界资源保护方法:临界区通过关闭中断保护短操作(如变量修改),适用于微秒级操作;互斥量通过所有权机制保护长时间资源访问,支持优先级继承避免优先级反转;二进制信号量用于轻量级资源保护或任务同步;原子操作利用CPU指令直接保证简单变量操作的原子性。选择方法需考虑操作时长、频率、优先级关系及实时性要求:短操作用临界区或原子操作,长占用用互斥量,任务同步用信号量。核心目标是确保资源访问的原子性,防止数据竞争。
2025-10-08 21:09:06
954
原创 FreeRTOS任务同步与通信--任务通知
FreeRTOS任务通知是一种高效的任务间通信机制,允许直接向任务发送事件通知并附带32位值,相比传统队列或信号量速度更快且占用内存更少。每个任务拥有通知值和状态字段,通过API函数如xTaskNotify()进行发送和接收。从V10.4开始,任务通知支持数组形式,可通过配置扩展数量。xTaskNotify()更新目标任务的通知值,eAction参数决定更新方式(如设置、递增或覆盖)。该机制可作为轻量级队列替代方案,特别适合资源受限场景。
2025-10-08 13:42:30
982
原创 stm32 freertos下基于hal库的模拟I2C驱动实现
本文介绍了在STM32 FreeRTOS系统下基于HAL库实现模拟I2C驱动的完整方案。主要内容包括:1)使用DWT实现精确延时函数(delay.c/h);2)通过GPIO模拟I2C协议的实现(i2cc.c/h),包括起始/停止信号产生、应答检测、数据收发等功能;3)关键配置要点,如将SCL和SDA引脚设置为开漏输出模式,以便同时支持输出和输入功能。该驱动可直接移植使用,实现了完整的I2C通信功能,适用于需要软件模拟I2C接口的应用场景。
2025-10-07 19:13:30
616
原创 字符串比较函数strcmp和strncmp以及memcmp详解与对比分析
字符串比较的本质是按 ASCII 码值逐字符对比,而非比较字符串长度。C 语言中字符串以’\0’作为结束标志,这一特性直接决定了strcmp()与strncmp()的设计逻辑差异:简单来说:strcmp()是 “全自动” 比较(直到结束符),strncmp()是 “半自动” 比较(指定最大长度)。两者的返回值逻辑一致 —— 均通过字符 ASCII 差值判断大小,但适用场景和安全性差异显著。
2025-10-07 09:48:38
1298
原创 FreeRTOS任务同步与通信--事件标志组
事件位用于表明某个事件是否发生,事件位通常用作事件标志,比如下面的几个例子:当收到一条消息并且把这条消息处理掉以后就可以将某个位(标志)置1,当队列中没有消息需要处理的时候就可以将这个位(标志)置0。当把队列中的消息通过网络发送输出以后就可以将某个位(标志)置1,当没有数据需要从网络发送出去的话就将这个位(标志)置0。现在需要向网络中发送一个心跳信息,将某个位(标志)置1。现在不需要项网络中发送心跳信息,这个位(标志)置0。
2025-10-06 11:35:57
874
原创 STM32f407在FreeRTOS中的微秒和毫秒延时函数(IIC/SPI等外设驱动时序需要不带任务调度的延时)
【代码】STM32f407在FreeRTOS中的延时函数。
2025-10-05 21:42:41
486
原创 仿照STM32 HAL库设计思想使用FreeRTOS实现异步非阻塞式设备驱动
作为对比,HAL库给用户提供了HAL_UART_Transmit_IT、HAL_UART_Transmit_DMA等非阻塞式的操作方式,API仅启动的数据传输,后台自己执行数据传输任务,达到非阻塞式的效果,同时,可以在回调函数中指定发送结束需要处理的操作。HAL库提供的非阻塞式API,需要依赖实际的底层硬件和CPU并行操作,如DMA、中断,但是,实际的驱动程序编写场景,例如使用的软件模拟I2C的通信过程很难使用硬件并行的方式消除主程序的阻塞。另外,回调函数的另一个好处是可以屏蔽底层硬件差异。
2025-10-05 20:00:22
1192
原创 VS Code快速使用指南
在使用vscode打开工程文件之后,如果需要对比两个文件之间的差异。然后右键选择“Compare Seleted”即可。只需要ctrl选中两个文件,左键选中对比文件。
2025-10-02 17:53:25
373
原创 优雅动听的歌曲之一-小城画师
小城画师》是由李小贝演唱的国风歌曲,发行于2022年8月13日,歌词通过“折花赠人”“描月牙诉牵挂”等意象,展现诗意场景。歌曲收录于同名专辑《小城画师》,并衍生出合唱版伴奏、现场版等多版本演绎形式。歌词以国风元素为核心,通过“折花”“摘云霞”“描月牙”等意境化表达,构建出古典浪漫的画面感。歌曲《小城画师》由李小贝演唱,由未子夫填词,阿豪谱曲,收录在专辑《小城画师》中。
2025-09-28 21:56:00
213
原创 KEIL MDK程序代码编译成静态库文件及库引用笔记教程
本文介绍了在KEIL MDK中将STM32程序代码编译成静态库文件的方法。主要内容包括:1)库文件的作用(代码复用、模块化开发、保护知识产权等);2)具体操作步骤:移除无关源文件和头文件、修改输出格式为Create Library选项、提取生成的lib文件;3)测试验证方法;4)注意事项(正确声明函数变量、处理依赖关系等)。同时还提供了将多个.c/.h文件生成动态lib库的补充教程,强调保护知识产权和缩短编译时间的优势。文章通过详细图文说明,帮助开发者掌握库文件编译技术。
2025-09-25 20:48:40
1370
原创 STM32 HAL库实现FreeRTOS+FreeModbus(从机和主机)
本文介绍了在STM32 HAL库环境下实现FreeRTOS+FreeModbus(主从机)的移植过程。通过CubeMX配置硬件平台(STM32F407VET6),生成Keil工程,重点讲解了UART通信和中断的设置。移植FreeModbus源码时,需修改port文件夹下的关键接口文件,包括临界区保护、事件通知、串口通信和定时器实现等。其中,使用FreeRTOS的事件组和软件定时器来替代原RTT实现,并调整了定时器优先级。文章提供了详细的代码注释和配置说明,适合开发者参考移植。
2025-09-22 20:37:43
1132
原创 stm32 BootLoader之检查栈顶地址是否合法(否则无法跳转到APP程序)
本文介绍了STM32 BootLoader中检查栈顶地址合法性的原理与实现。以STM32F407ZGT6为例,在跳转到APP区时,需验证栈顶地址是否位于SRAM区域(0x20000000)。通过分析启动文件(startup_stm32h407xx.s)可知,FLASH起始地址存放的是栈顶指针(__initial_sp)和复位处理函数地址(Reset_Handler)。代码中通过判断高16位是否为0x2000来验证栈顶合法性,并结合MAP文件确认栈区范围(0x20004aa0-0x24005a40)。该机制确
2025-09-22 16:47:58
656
原创 STM32CubeMx配置FreeRTOS工程
本文介绍了使用STM32CubeMX配置FreeRTOS工程的注意事项和具体步骤。重点指出FreeRTOS时基源不要使用SysTick,建议切换至其他时钟源以保证时间准确性。文章对比了中断优先级和任务优先级的区别,并详细说明了FreeRTOS的特点,包括任务管理、内存管理等。配置步骤包括时基时钟源选择和FreeRTOS参数设置,通过图形化界面简化了实时操作系统的移植过程。该配置方法适用于STM32系列芯片,能有效提高系统实时性和可靠性。
2025-09-20 22:00:05
985
原创 STM32 裸机时间片任务调度设计思想探讨
本文探讨了STM32裸机系统中的时间片任务调度设计方法。系统采用1ms定时器中断作为时基,通过任务控制块(TCB)管理多个任务,每个任务实现为独立的状态机。主循环轮询执行就绪任务,任务执行遵循非阻塞原则。该方案具有模块化、时间确定性强等优点,通过状态机模板和临界区保护实现稳定调度,适合对实时性有要求且不愿引入RTOS的嵌入式项目。文中详细给出了硬件定时器配置、TCB结构定义、任务状态机模板和调度器实现等核心代码。
2025-09-20 08:41:20
1169
原创 STM32使用内部FLASH保存程序配置参数(带有配置参数版本识别)
这篇文章介绍了如何在STM32微控制器中使用内部FLASH存储程序配置参数,并实现版本识别功能。主要内容包括:1) 设计了包含版本信息的嵌套结构体,包括配置参数头信息(ConfigHeader)和实际配置参数(AppConfig);2) 提供了FLASH操作函数,包括解锁、锁定、擦除、读写等基本操作;3) 实现了配置参数的保存(Save_Config)和加载(Load_Config)功能,包含CRC校验和版本检查机制;4) 通过定义魔数、版本号等标识确保配置数据的完整性和兼容性。这种方法适用于需要长期保存程
2025-09-19 11:59:43
424
原创 STM32HAL库-移植mbedtls开源库示例(一)
本文介绍了如何在STM32HAL库环境下移植mbedtls开源库,以支持MQTT证书加密功能。mbedtls是一个轻量级的C语言加密库,实现了TLS/SSL协议、X.509证书操作等安全功能,适用于嵌入式系统。文章使用STM32F103CBT6开发板和Keil MDK开发环境,详细说明了移植过程。mbedtls可为物联网通信提供安全加密支持,使TCP、MQTT、HTTP等协议升级为安全版本(TCP(S)、MQTT(S)等),有效防止数据传输中的中间人攻击。该库遵循Apache 2.0开源协议,适用于资源受限
2025-09-17 18:11:47
842
原创 在Linux和Windows系统下使用Qt监测U盘的插拔事件
本文介绍了在Linux和Windows系统下使用Qt监测U盘插拔事件的两种方法。方法一通过执行lsblk命令获取U盘路径信息,适用于Linux系统;方法二使用Qt的QStorageInfo类,可跨平台获取存储设备信息,包括U盘名称、路径、文件系统类型及容量等。两种方法均提供了完整的代码示例,其中QStorageInfo方法还能区分USB设备类型,适用于更复杂的应用场景。这些方案为开发跨平台U盘监控功能提供了实用参考。
2025-09-16 21:34:16
831
原创 正点原子STM32F407 U盘升级程序(IAP)OTA Bootloader APP USB升级+FATFS+USB Host
本文介绍了基于STM32F407的U盘IAP升级方案,通过Bootloader和APP分区实现固件远程更新。硬件采用正点原子STM32F407开发板,软件使用CUBEMx配置USB Host和FATFS文件系统。核心内容包括Flash分区管理(Bootloader区64KB,APP区动态分配)、U盘检测与固件读取流程、Flash擦写操作及跳转机制。文中提供了关键代码片段,包括Flash擦除写入函数和状态验证逻辑,并附完整源码链接。该方案实现了通过U盘进行固件升级的完整流程,包括数据校验、错误处理等功能,提升
2025-09-14 21:00:20
1100
原创 软件设计七大原则
软件设计七大原则是构建高质量代码的基石,包括开闭原则(OCP)、里氏替换原则(LSP)、依赖倒置原则(DIP)、单一职责原则(SRP)、接口隔离原则(ISP)、迪米特法则(LOD)和合成复用原则(CRP)。这些原则旨在降低对象间的耦合度,提升代码的可复用性、可扩展性和可维护性。例如,OCP强调通过扩展而非修改来适应变化,LSP要求子类完全替换父类而不影响功能,DIP提倡依赖抽象而非具体实现,SRP确保每个类职责单一,ISP拆分臃肿接口,LOD减少模块间依赖,CRP优先使用组合而非继承。合理运用这些原则能有效
2025-09-12 08:25:10
912
原创 【C++设计模式】第四篇:Composite 模式(组合实体模式)- 树形结构的优雅处理方案
摘要:C++组合模式(Composite Pattern)解析 组合模式是一种结构型设计模式,用于处理树形结构对象,将对象组合成树形结构表示"整体-部分"层次关系。它通过抽象组件(Component)、叶子节点(Leaf)和组合节点(Composite)三个角色实现统一操作接口,使客户端能一致对待单个对象和组合对象。典型应用场景包括文件系统、GUI组件、组织结构等树形结构。代码示例展示了如何实现组件基类、叶子节点和包含子节点的组合节点,通过递归操作处理树形结构。组合模式的优点在于简化客户
2025-09-09 08:22:12
655
原创 【C++设计模式】第三篇:观察者模式(别名:发布-订阅模式、模型-视图模式、源-监听器模式)
本文介绍了C++中的观察者模式(Observer Pattern),这是一种行为型设计模式,用于建立对象间的一对多依赖关系。当被观察对象(Subject)状态变化时,会自动通知所有注册的观察者(Observer)。文章通过交通信号灯与汽车的类比解释其工作原理,并列举了该模式的其他别名。观察者模式主要用于解决状态变化通知、对象间松耦合和广播通信等问题,适用于GUI更新、事件处理和分布式系统等场景。核心概念包括Subject(维护观察者列表并通知变化)和Observer(接收通知并响应),以及它们的具体实现类。
2025-09-08 17:59:13
997
原创 【C++设计模式】第二篇:策略模式(Strategy)--从基本介绍,内部原理、应用场景、使用方法,常见问题和解决方案进行深度解析
本文深入解析C++策略模式,从基本概念到应用实践。策略模式是一种行为型设计模式,通过封装算法实现定义与使用分离,遵循开闭原则。其核心结构包括策略接口、具体策略类和上下文类。文章通过代码示例展示了策略模式的基本使用方式,并详细分析了其内部原理:封装与委托机制、多态运用、动态切换策略以及策略选择决策方法。策略模式适用于需要动态切换算法、避免条件分支复杂化等场景,能有效提升代码的可维护性和扩展性。
2025-09-04 11:03:20
1255
原创 无法回避的字节对齐问题,从八个方向深入探讨(变量对齐,栈对齐,DMA对齐,结构体成对齐
回答:没有__packed的会出现字对齐等也就是,char型的有可能是占用4个字节的长度的内存空间有__packed 的就不会,就肯定是1个字节的内存空间,是gcc编译器的关键字。(不止vc下面32位的系统里面的内存数据的存取是32位的,处理的时候都是4个字节为单位,通常也就是int的长度。4.若自定义的malloc函数本身没有对分配的内存实现4字节或以上的对齐操作,分配出来的不对齐的内存,编译器是不知道的,所以很可能会产生问题。字节对齐的含义:4字节对齐的含义就是变量地址对4求余数为0;
2025-05-07 09:38:42
1087
原创 深入理解Qt状态机的应用
有限状态机(finite-state machine)又称有限状态自动机(finite-state automaton),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学计算模型。这个概念在计算机科学、数学、语言学、工程以及其他研究领域都有广泛的应用。有限状态机非常适合用于描述那些通过一系列的输入来转移状态的系统。
2025-04-17 12:02:12
1185
原创 VS Code常见的查找快捷键大全
在查找并替换面板中,你可以输入要查找的文本和替换的文本,VS Code 会在当前文件中查找并替换所有匹配项。在打开的文件中,你可以使用快捷键 Ctrl+F(Windows/Linux)或 Cmd+F(macOS)来查找文件中的文本。VS Code 提供了多种方法来查找和导航文件,包括快速打开文件、文件资源管理器、全局搜索、查找符号、查找文件中的文本、查找并替换、文件导航和使用命令面板。你可以使用快捷键 Ctrl+T(Windows/Linux)或 Cmd+T(macOS)来查找符号(如函数、变量、类等)。
2025-04-13 17:22:12
2754
原创 Qt触摸屏隐藏鼠标指针
1.如果只希望在某个 widget 中不显示鼠标指针,那么在该 widget 的构造函数中调用。还可以用setCursor函数来设置鼠标指针的不同样式。3.可以在任一控件或者页面下显示或者隐藏鼠标指针。QT鼠标图标显示与隐藏。
2025-04-12 20:50:09
729
原创 【C++设计模式】第一篇:C++单例模式--懒汉与饿汉以及线程安全
无论全局静态变量还是局部静态变量,都是执行动态初始化,也就是都得在代码真正执行时,
2025-04-06 22:03:51
909
原创 openssl交叉编译
no-async: 交叉编译工具链没有提供GNU C的ucontext库。no-asm: 在交叉编译过程中不使用汇编代码代码加速编译过程;–cross-compile-prefix=: 交叉编译工具。shared: 生成动态连接库。–prefix=: 安装路径。执行下面的命令配置工程。
2025-04-06 10:03:35
728
原创 【VS Code 插件】SQLite 可视化插件
(3) 在搜索结果中选择 SQLite:打开数据库(open database)。将选择你的数据库文件:*.db。项目经常用到SQLite这个轻量型数据库,于是乎,就想着找一个可视化工具,但是我有时候只是想方便预览数据。用习惯VS Code的小伙伴们都知道,插件的帮助之下,开发效率更高。我的表名称为events,全查询如下,sql的语句知识捡一下。但这时候,你会发现,啥变化都没有,别急,继续。表,又不想安装额外的程序,那么这款插件很适合你。输入查询语句后,右键Run Query执行查询。
2025-03-09 20:45:18
6015
原创 qt 操作多个sqlite文件
以下是一个简单的示例,展示如何在Qt中操作多个SQLite数据库文件。在Qt中使用多线程操作多个SQLite数据库文件时,需要注意SQLite的线程安全性以及Qt的多线程机制。SQLite默认支持多线程操作,但需要确保每个线程使用独立的数据库连接,以避免竞争条件。如果文件不存在,SQLite会自动创建它。使用QSqlDatabase::addDatabase创建独立的数据库连接,并通过moveToThread将工作者对象移动到独立的线程中。程序会创建多个线程,每个线程操作一个独立的SQLite数据库文件。
2025-03-08 20:21:15
1663
原创 QT-自定义参数设计框架软件
常用本地数据参数通常使用的是xml等文本的格式,进行本地的数据参数的存储。这种参数的保存方式有个致命的一点,就是可以存在参数的丢失。特别是在软件异常退出的情况下发生。针对此等情况,我们现在使用的是sqllite的本地存储方式进行设计,并且尽量将参数的格式通用化。
2025-03-04 21:17:31
1025
原创 Qt互斥锁(QMutex)的使用、QMutexLocker的使用
QMutexLocker提供的简化互斥锁锁定和解锁的机制在很多时候时蛮方便的,在使用互斥锁的地方使用QMutexLocker会减去许多安全隐患;不过在多线程循环输出ABC的时候好像就不适合该方法。所以使用类似的类还得按情况而定。
2025-02-27 22:12:20
4281
原创 温湿度传感器SHT40(第四代)&SHT20(第二代)
然而,SHT20仍因其成熟的性能和相对的成本优势,在很多应用中仍有广泛的使用。•SHT40:相比SHT20,SHT40在精度和稳定性上有进一步提升,温度精度可达±0.2°C(典型值),湿度精度可达±1.8%RH(典型值),并且具有更好的长期稳定性。•SHT40:相对于SHT20,增加了更多的内部自校准功能,能够更好地补偿传感器老化和温度漂移,从而在整个产品生命周期内保持高精度。•SHT20:具有高精度的温湿度测量能力,温度精度±0.3°C(典型值),湿度精度±2%RH(典型值),并且具有良好的长期稳定性。
2025-02-26 20:43:17
3573
正点原子STM32F407 U盘升级程序(IAP)OTA Bootloader APP USB升级+FATFS+USB Host
2025-09-15
FreeRTOSv202112.00.zip
2022-01-04
cJSON(STM32CubeMX5.3.0).rar
2021-10-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅