- 博客(14)
- 收藏
- 关注
原创 学习笔记:I2C 通信的时序、应答与完整流程复盘
搞懂 I2C 的关键不是死记硬背流程,而是理解电平变化的逻辑,搞懂 SCL 和 SDA 在不同阶段的作用遇到无应答、读不出数据的问题,先从硬件查起(上拉、接线、共地),再查时序和地址后续会继续学习 SPI、UART,把几种通信协议的区别和应用场景整理出来。
2026-05-26 15:37:32
313
原创 状态机设计
某32位单片机雾化产品需要实现:单击按键切换低/中/高三档,长按关机;过温、过压、连续工作超时任一发生时立即关闭输出。请画出或描述一个基于状态机的核心软件结构,并说明各状态、事件和保护动作。故障状态:由硬件中断直接触发,立即关闭输出,子状态:过温,超时,短路,空载,由子状态决定故障灯效以及触发相应的故障处理。待机状态:无输出,检查按键和故障以及咪头信号,检测到咪头信号进入工作状态。工作状态:根据挡位进入高/中/低三种不同的子状态,调节输出pwm占空比。关机状态:仅运行按键中断,检测到长按开机进入待机状态。
2026-05-18 16:17:41
10
原创 计数信号量 | FreeRTOS 学习Day9
/ 按键计数用的计数信号量// 串口打印互斥锁(解决乱码)计数信号量 = N 个二值信号量,计数值可以累加(0~N)核心作用:事件计数(按键按了几次)、资源管理(有几个车位可用)和二值信号量的最大区别:二值信号量连续 Give 多次会丢事件,计数信号量不会丢固定模板必须背:中断里用。
2026-05-06 16:19:28
310
原创 求助,串口打印数据和代码逻辑不符
为什么会有一个创建失败会出现在KEY_Task前面,后面我又更换了之前使用的旧工程跑同样的代码运行结果是这样的。昨天找了一下午问题没找到,求助大佬解释一下这是什么原因。昨天创建了一个新工程学习计数信号量写了以下代码。
2026-05-06 08:08:09
187
原创 寄存器变量和内存变量区别
变量类型存储位置访问速度数量限制核心特点内存变量单片机的 RAM(内存)里慢(需要通过总线访问 RAM)几乎无限制(只要 RAM 够大)每次读写都从内存里读最新值,安全但慢寄存器变量CPU 内部的通用寄存器(R0~R15)里极快(CPU 直接操作寄存器,零等待)极少(STM32F103 只有 16 个通用寄存器)速度极快,但编译器可能会优化掉内存访问,中断里修改的变量会出问题C 语言里可以用register// 显式告诉编译器:把cnt放到寄存器里register。
2026-05-04 11:44:40
399
原创 中断 ↔ 任务同步 | FreeRTOS 学习 Day8
/ 按键中断用的二值信号量中断里只发信号,任务里处理逻辑绝对不能在中断里做耗时操作(打印、延时、复杂计算)
2026-04-30 15:28:20
241
原创 二值信号量 | FreeRTOS 学习 Day 7
上周公司比较忙没时间更新,今天开始学习信号量今天的任务很简单,记住三个API即可首先必须要记住的东西3 个核心 API。
2026-04-30 14:53:41
28
原创 任务间通信 —— 队列 Queue 的创建 / 收发、阻塞机制,用队列实现多任务数据传递 | FreeRTOS 学习Day6
队列本质:内核写好的、线程安全的、带阻塞机制的环形缓冲区。核心特性:先进先出、存数据副本、任意类型数据、线程安全。常用 API阻塞机制:队列满了 / 空了,任务自动进入阻塞态,释放 CPU,事件发生后自动回到就绪态。
2026-04-23 17:39:00
407
原创 比较CubeMX生成的函数与FreeRTOS原生API | FreeRTOS学习 Day5
摘要:CubeMX生成的FreeRTOS任务创建函数通过CMSIS-RTOS标准接口封装了底层差异。其核心流程是:1)CubeMX图形界面配置任务参数后自动生成osThreadDef宏;2)该宏参数被传入osThreadCreate函数;3)函数根据配置自动选择xTaskCreate等原生API。这种设计具有三大优势:实现跨芯片兼容(统一CMSIS-RTOS接口)、自动参数校验(防止配置错误)以及屏蔽底层差异(自动处理动态/静态内存分配)。初学者可先使用这种封装API,待熟悉底层后再转向原生接口。
2026-04-21 16:54:45
162
原创 vTaskCreate /vTaskDelete + 任务栈 / 优先级 / 入口函数 | FreeRTOS 学习 Day4
本文介绍了在STM32上使用FreeRTOS创建和删除任务的方法。主要内容包括:1) 通过vTaskCreate创建两个任务,任务1运行5次后创建任务2,任务2运行3次后删除任务1和自己;2) 详细讲解了vTaskCreate的6个核心参数:入口函数、任务名、栈大小、参数、优先级和任务句柄;3) 对比了原生API与CubeMX封装API的区别,CubeMX通过osThreadDef宏和osThreadCreate函数封装底层实现,自动处理内存分配和优先级转换,提高了代码的可移植性和易用性。文章建议初学者先使
2026-04-18 17:06:46
318
原创 使用CubeMX创建一个FreeRTOS工程| FreeRTOS学习 Day3
本文介绍了RTOS(实时操作系统)的基本概念及其与裸机开发的区别。RTOS支持多任务并行、优先级调度和实时响应,适用于复杂嵌入式项目;而裸机开发采用单流程顺序执行,适合简单项目。文章通过功能、实时性、代码结构等方面对比了两者的差异,并用生活场景类比说明。最后详细讲解了使用STM32CubeMX工具创建FreeRTOS工程的步骤,包括软件安装、工程配置和代码生成等关键环节,为初学者提供了RTOS开发的入门指导。(150字)
2026-04-17 13:51:32
333
原创 利用串口实现printf输出重定向 | FreeRTOS学习 Day2
首先,我们复制一份昨天的工程模板,点开菜单栏的魔术棒,在DEVICE_LIB中添加stm32f10x_usart.c文件,然后在SYSTEM分组里面新建usart.h,usart.c。,由于printf函数以及scanf函数是向标准输出以及标准输入中进行输出与输入,标准输出一般指的是显示器,而现在STM32的MCU中并没有集成显示器,所以就需要对printf函数的输出进行。注意魔术棒一定要勾选Use MicroLIB,否则可能会直接卡死!在usart.c中写以下代码。
2026-04-17 07:52:30
34
原创 创建Keil工程模板 | FreeRTOS学习 Day1
这是我重新学习stm32的第三天,因为在上班没什么时间,学习进度比较慢,今天记录一下第一天的内容创建一个工程模板首先创建一个demo文件夹用于存放模板,在文件夹中创建以下文件夹里面放的文件需要在官方提供的标准库文件中找(下载链接。
2026-04-15 14:18:22
432
原创 前置++和后置++的区别
/ 后置++:先使用变量中内容,整个表达式结束时,给变量加1。//前置++:先加1,后使用,即先使用变量中内容,然后给结果加1。//6 ++运算符:分为前置++和后置++,
2024-10-16 18:00:39
150
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅