- 博客(124)
- 资源 (1)
- 收藏
- 关注
原创 嵌入式机器学习 - 学习笔记1.2.3 - 机器学习软件框架
文章从三个关键支点展开:轻量模型设计(如MobileNetV2)、专用推理框架(如LiteRT for Microcontrollers)和优化算子库(如CMSIS-NN)。通过对比Reference Kernel和Optimized Kernel的区别,阐述了如何利用SIMD、DSP等指令集加速计算。文章还深入探讨了编译优化、内存访问、量化技术和张量形状对性能的影响,并提供了针对EEG、ECG等生理信号处理的具体优化建议。最后强调TinyML优化需要全链路协同,综合考量才能实现最佳性能。
2026-07-15 11:24:05
415
原创 嵌入式机器学习 - 学习笔记1.2.2 - 机器学习专用硬件
摘要:本文探讨了嵌入式AI硬件的真实加速能力,指出传感器和普通MCU不等于AI加速器,需区分通用MCU、带DSP/ML指令的CPU(如Cortex-M55)和专用NPU(如Ethos-U55)。TinyML任务按计算需求分为Vibration、Voice、Vision三类,性能提升需结合计算架构、内存优化和编译器(如Vela)。强调硬件选型应基于任务复杂度(如EEG/EMG多模态需NPU,GSR/EDA可能仅需MCU),而非盲目追求“AI开发板。
2026-07-13 12:07:00
461
原创 嵌入式机器学习 - 学习笔记1.2.1 - 嵌入式设备上的机器学习
本章系统阐述嵌入式机器学习(TinyML)的核心概念、技术演进与应用边界。首先厘清嵌入式系统、单板计算机(SBC)与微控制器(MCU)的差异,解释传统机器学习框架更易在 SBC 运行的原因;其次剖析 TensorFlow Lite for Microcontrollers 等工具,通过模型量化、内核优化、指令集适配与自动化部署等技术,让神经网络在资源受限的 MCU 上落地,结合语音、图像识别等多类案例展现其应用潜力。
2026-07-10 23:30:19
743
原创 嵌入式机器学习 - 学习笔记1.1.2 - 机器学习的局限性与伦理
摘要:本章探讨TinyML项目中潜在偏差与风险的形成机制,以语音南瓜(无法识别儿童声音)为例,揭示数据覆盖不完整、采样偏差(仅含成人数据)等核心问题。提出偏差的五大来源:采样、测量、标签、历史及部署偏移,并强调总体准确率可能掩盖群体差异(如儿童识别率仅45%)。为确保可信AI,建议通过六道工程闸门(任务边界、数据覆盖、分组评估、稳健性、人工监督、发布问责)管控风险,并指出端侧推理虽能减少隐私泄露,仍需配合数据最小化、许可证(如RAIL)及严格验证。最后提供检查表,帮助开发者将伦理原则转化为可落地的技术措施。
2026-07-10 20:08:05
388
原创 嵌入式机器学习 - 学习笔记1.1.1 - 什么是机器学习?
本章最重要的收获是:机器学习不是神秘的黑箱,而是一种让模型从数据中学习规则的方法。AI 是更大的概念,机器学习是 AI 的一个子集,深度学习又是机器学习中的一个重要方向。传统算法依赖人写规则,而机器学习通过训练数据学习规则,并希望对新数据具有良好的泛化能力。对于 TinyML 项目来说,这些基础概念非常关键:后续无论是语音识别、手势识别,还是 EEG、ECG、EMG、PPG、HRV、GSR / EDA 生理信号监测,本质上都离不开数据、标签、特征、模型训练、模型评估和端侧推理。
2026-07-10 10:05:23
441
原创 嵌入式机器学习 - 学习笔记1.0.2 - 机器学习基础到 TinyML应用路线导览
课程由主讲人Shawn Hymel与多位专家共同授课:Alexander Fred-Ojala讲解ML历史、AI伦理与神经网络基础;Tomas Edsö解析Arm处理器硬件加速;Felix Johnny介绍CMSIS-NN库的MCU优化;Daniel Situnayake演示工业场景部署案例。文章强调TinyML在生理信号(EEG/ECG/PPG等)应用中的关键考量,包括模型轻量化、硬件选型(如Cortex-M/ESP32)、低功耗设计及伦理风险,并指出EdgeImpulse等工具对开发流程的整合作用。
2026-07-09 13:04:19
521
原创 嵌入式机器学习 - 学习笔记1.0.1 - 为什么机器学习开始跑进微控制器?
摘要: 本章探讨了机器学习从云端走向嵌入式设备的必要性,介绍了Edge AI、Embedded ML和TinyML的概念及其应用场景。通过语音助手Alexa的唤醒词检测案例,阐述了本地推理在低延迟、隐私保护和低功耗方面的优势。TinyML通过模型压缩和量化技术,使得微控制器(MCU)能够运行轻量级模型,适用于手势识别、语音关键词检测等任务。Edge Impulse平台简化了数据采集、模型训练和部署流程,支持Arduino、ESP32等硬件。
2026-07-09 12:36:12
573
原创 C语言学习笔记 - 64.流程控制18 - 选择结构中的if与switch
C 语言选择结构主要包括if和switch。当前学习重点是if 语句,因为它适用范围更广。switch适合处理固定值匹配的多分支问题。if适合处理范围判断和复杂逻辑条件。switch中的case只是入口标号,不是条件判断语句。break用于跳出switch,一般不能省略。default用于处理所有case都不匹配的情况。判断成绩区间时,通常使用,不适合直接用switch。使用 VSCode 练习时,应通过不同输入观察程序分支执行结果。
2026-06-26 20:40:08
212
原创 C语言学习笔记 -63.流程控制17 - 选择9 - if...else if多分支选择与常见错误解析
本文主要内容包括:1. if-else基本语法和执行流程;2. else if多分支结构的执行规则(只执行首个满足条件的分支);3. 常见错误:if后误加分号、else直接接条件表达式、数学区间写法错误(如90<=score<=100应改为score>=90 && score<=100);4. 成绩等级判断的完整示例及改进方案;5. 调试建议和核心结论。特别强调else后不能直接写条件表达式,区间判断必须使用逻辑运算符&&连接,以及所有分支条件的覆盖完整性检查。
2026-06-26 20:33:35
190
原创 C语言学习笔记 -62.流程控制16 - 选择8 - if语句常见错误:空语句问题
本文重点讲解了C语言if语句后误加分号的常见错误。if条件后加分号会形成空语句,导致后续代码不再受条件控制,造成逻辑错误而非语法错误。文章通过具体示例分析了正确与错误写法的执行流程差异,强调应避免在if后加分号并使用花括号包裹代码块。同时区分了语法错误、警告和逻辑错误,建议初学者使用-Wall选项检查潜在问题。正确理解if语句的流程控制是掌握C语言编程的基础。
2026-06-26 20:19:34
217
原创 C语言学习笔记 - 61.流程控制15 - 复习算法思维与程序掌握方法
本文重点阐述了C语言程序设计中算法优先的核心思想。文章通过变量交换和三个数排序两个典型案例,详细说明了程序设计的基本流程:先明确算法思路(输入、处理步骤、输出),再用语法实现。强调看懂程序需分三步:理解执行流程、分析语句功能、代入数据验证。指出掌握程序需通过修改调试、独立复现等实践环节,并提供了具体的学习步骤建议。最后总结了程序设计的关键在于算法思维培养,而不仅是语法记忆,同时给出了调试练习和间隔复习的方法论。
2026-06-26 20:06:56
192
原创 C语言学习笔记 - 60.流程控制14 - 学习方法论与经典小算法
摘要 本文系统介绍了C语言流程控制算法的科学学习方法。针对初学者常见误区,指出算法学习应以理解语法为核心,而非独立发明算法。提出三步阅读法:梳理流程、理解单句、数据验证。推荐分步骤学习模式:限时思考→精读答案→修改验证→独立复现→间隔巩固。详细解析了素数判断、回文数、进制转换等7个经典算法的实现逻辑和代码要点,强调通过变量跟踪理解程序本质。最后总结流程控制的核心能力训练点,包括循环、条件判断、数组应用等基础语法的综合运用。
2026-06-26 11:06:22
187
原创 STM32F103 学习笔记-25-SPI-读写串行FLASH(第1节)-SPI协议介绍
SPI协议与STM32F103开发指南 摘要:本文详细介绍了SPI(串行外设接口)协议的原理及STM32F103的SPI外设开发方法。SPI是一种高速全双工同步通信总线,采用4线制(NSS、SCK、MOSI、MISO),支持主从架构,通过时钟极性(CPOL)和相位(CPHA)组合形成4种工作模式。STM32F103提供3个SPI外设,最高支持36MHz通信速率。文章包含硬件架构分析、标准库初始化流程、完整代码示例及避坑指南,重点讲解了SPI1的初始化配置(模式0、8位数据帧、MSB先行)和字节读写函数实现。
2026-06-17 22:31:08
90
原创 C语言学习笔记 - 59.流程控制13 - if语句应用2:三个数排序算法的应用
本文介绍了三个整数从大到小排序的编程实现方法。核心思想是先设计算法再编码:通过两两比较和变量交换(需借助临时变量),将最大值逐步交换到变量a,次大值到b,最小值到c。文中提供了完整C语言代码,并强调了测试用例验证的重要性。此外还扩展了排序算法的通用思路,指出这是冒泡排序的雏形,并列举了常见排序算法。最后总结了初学者易犯的错误,如scanf漏地址符、if条件写反、变量交换步骤缺失等。文章强调算法设计优先于编码实践,体现了"程序=算法+语言"的编程思想。
2026-06-17 19:25:22
364
原创 C语言学习笔记 - 58.流程控制12 - if语句应用1:两个变量值互换
本文系统讲解了C语言中变量互换的实现方法。首先分析了初学者常见的错误方式(连续两次赋值导致变量覆盖),揭示了其无法实现互换的本质原因。随后通过"杯子液体交换"的类比,详细阐述了正确方法——引入临时变量的三步法(t=i;i=j;j=t),并强调步骤顺序不可颠倒。文章提供了完整代码实现及逐行解析,指出临时变量命名规范、方法通用性等注意事项,建议将该操作作为基础公式记忆。该方法适用于所有基本数据类型,是C语言编程中的基础必备技能。
2026-06-17 19:14:12
241
原创 C语言学习笔记 - 57.流程控制11 - 选择7 - if举例 - 成绩等级判定
本文介绍了用C语言实现考试成绩等级判定的程序设计方法。程序通过多分支if-elseif结构,将输入成绩按区间划分为优秀、良好、及格和不及格四个等级,并处理非法输入(超100分或负数)。重点解析了区间判断的正确写法(需用逻辑与运算符连接两个关系表达式)和空语句陷阱(if条件后误加分号会导致逻辑错误)。程序采用float类型支持小数输入,测试用例验证了各分支的正确性。文章最后总结了多分支结构的使用要点,并指出switch语句的适用场景。
2026-06-17 19:00:44
168
原创 C语言学习笔记 - 56.流程控制10 - 选择6 - if语句真假判断规则
C语言采用"非零即真,零为假"原则:所有非零值(整数、浮点数、非空指针等)均视为真,仅数值0(含0.0、NULL)为假。重点包括:1)关系/逻辑表达式运算结果严格返回1(真)或0(假);2)典型场景如数值直接判断(如if(5))、关系比较(3<5返回1)、逻辑运算(10&&0返回0);3)常见误区如浮点数精度误差需用fabs(x)<1e-6判断、误用赋值运算符(=)代替相等比较(==)。
2026-06-17 11:57:13
338
原创 C语言学习笔记 - 55.流程控制9 - 选择5 - if...else if多分支语句
本文介绍了C语言中if-elseif多分支语句的核心概念和应用。该语句专门用于处理多个互斥条件的选择问题,通过自上而下依次判断表达式,从多个分支中选择且仅执行一个语句块。文章详细阐述了语法格式、执行逻辑,并提供了成绩等级划分和一元二次方程求解两个典型示例。同时指出了常见错误,如条件判断顺序错误、单独的else语句等,并对比了if-elseif与嵌套if语句的优劣,强调前者在代码简洁性和可读性方面的优势。
2026-06-17 11:49:37
405
原创 C语言学习笔记 - 54.流程控制8 - 选择4 - if...else双分支语句
本文系统介绍了C语言中if-else双分支语句的核心要点:1. 作用特点:专用于处理二选一场景,两个分支互斥执行且必执行其一;2. 语法规范:包含表达式规则、语句块格式及最佳实践(推荐始终使用花括号);3. 执行逻辑:通过判断表达式真假选择执行路径;4. 示例演示:包含数值比较和控制范围两个典型案例;5. 注意事项:特别强调控制范围规则(默认仅控制下一条语句)和代码排版规范;6. 开发问题:针对VSCode语法高亮异常提供解决方案。全文突出if-else结构的逻辑边界和常见错误防范,适合初学者掌握基础语法。
2026-06-17 11:37:19
180
原创 C语言学习笔记 - 53.流程控制7 - 选择3 - if语句的作用范围
C语言if语句作用范围解析:if默认仅控制紧随其后的单条语句(不含分号),多语句控制需用花括号{}包裹形成复合语句。常见错误包括忽略花括号导致逻辑错误(如缩进对齐但实际不受控)、花括号不配对等。规范建议:受控语句缩进,花括号成对编写,先写花括号再填语句。示例显示,条件为真时执行受控语句(复合语句内所有内容),无论条件真假,非受控语句都会执行。理解if作用范围是保证程序逻辑正确的关键。
2026-06-17 11:26:10
194
原创 C语言学习笔记 - 52.流程控制6 - 选择2 - if最简单的用法
本文系统介绍了C语言中单分支if语句的核心概念和使用要点。if语句作为选择结构基础,其语法格式为if(表达式){语句块},执行逻辑基于表达式真假判断(非0为真,0为假)。文章通过多个代码示例演示了关系表达式、常量判断等常见用法,重点指出三个易错点:混淆=与==、误加分号导致空语句、多语句漏写花括号。强调正确使用缩进和花括号的编码规范,为后续复杂逻辑学习奠定基础。掌握if语句对理解C语言流程控制至关重要。
2026-06-17 11:07:20
252
原创 C语言学习笔记 - 51.流程控制5 - 选择1 - if概述
本文详细介绍了C语言中选择结构的两种实现方式:if语句和switch语句。if语句分为单分支、双分支、多分支及嵌套形式,通过条件判断执行不同代码块;switch语句则适用于基于整型表达式的多分支场景。文章阐述了C语言对真假的处理规则(非0为真,0为假),并提供了成绩转换、闰年判断等典型示例。同时指出了常见错误如分号误用、浮点数比较等问题。switch部分强调其语法规则及break的关键作用,最后通过成绩等级案例演示了两种结构的实际应用。
2026-06-17 10:49:17
190
原创 C语言学习笔记 - 50.流程控制4 - 流程控制为什么非常非常重要
本文介绍了C语言流程控制的定义、分类及核心重要性。流程控制是程序代码的执行顺序规则,分为顺序、选择、循环三种基本结构,这些结构组合可解决任何可计算问题。其重要性体现在:1)是类C语言的通用基础;2)体现图灵理论的核心计算思想;3)统一了各类编程技术的控制逻辑;4)是自学编程的必备能力。掌握流程控制能帮助开发者理解程序执行逻辑,快速学习其他语言和技术。
2026-06-15 10:26:19
159
原创 C语言学习笔记 - 49.流程控制3 - 流程控制的分类
C语言程序流程控制包含三种基本结构:顺序执行(默认自上而下执行)、选择执行(if/switch实现分支逻辑)和循环执行(while/do-while/for处理重复操作)。这三种结构是构建所有复杂程序的基础,其中顺序结构是根本,选择结构处理条件分支,循环结构优化重复任务。根据谭浩强《C程序设计》的体系,第3-5章分别对应这三种核心结构,是C语言入门必须掌握的重点内容。这些控制结构通过组合嵌套,能够实现任意复杂的程序逻辑。
2026-06-15 10:18:55
176
原创 C语言学习笔记 - 48.流程控制2 - 什么是流程控制
本文介绍了C语言运算符与流程控制的核心概念。运算符部分强调位运算需以补码知识为基础,将在后续讲解。流程控制作为编程基础,包含顺序结构(代码顺序执行)、选择结构(if/switch实现条件分支)和循环结构(while/do-while/for实现重复执行)三大基本结构,这些结构在主流语言中具有通用性。掌握流程控制对理解程序执行逻辑和后续语言学习至关重要。内容参考谭浩强《C程序设计》相关章节。
2026-06-15 10:11:36
163
原创 C语言学习笔记 - 47.流程控制1 - 基础运算符与scanf补充
本文总结了C语言中scanf函数的使用技巧和常见运算符的语法规则。主要内容包括:1. scanf函数使用时需注意非输入控制符需原样输入,输入控制符与参数需一一对应;2. 算术运算符中,除法运算结果取决于操作数类型,取余运算仅适用于整数;3. 关系运算符的优先级和注意事项,特别是==与=的区别;4. 逻辑运算符的短路特性及其真假判断规则;5. 基本和复合赋值运算符的使用方法。文中通过代码示例详细说明了各运算符的使用场景和常见错误。
2026-06-15 10:02:41
207
原创 STM32F103 学习笔记-24-I2C-读写EEPROM(第4节)-STM32的I2C通讯过程
摘要:STM32的I2C外设详解 本文系统介绍了STM32的I2C外设工作原理及使用要点。主要内容包括:I2C硬件外设的状态监控机制,主发送/接收模式的完整通讯流程及其对应的状态事件检测方法。重点阐述了状态寄存器的标志位清除规则和时序控制的关键点,特别是发送停止信号前检测BTF位、接收最后一个字节时发送非应答等易错环节。文章通过电话通话的类比帮助理解I2C通讯过程,并强调超时处理和总线状态检测的重要性。最后总结了常见问题解决方案,为开发者提供了实用的I2C编程指南。
2026-06-14 22:17:10
411
原创 STM32F103 学习笔记-24-I2C-读写EEPROM(第3节)-STM32的I2C框图详解
本文详细介绍了STM32F103的I2C硬件外设。主要内容包括:1. 硬件I2C与软件模拟I2C的区别及优缺点对比;2. STM32F103的I2C外设架构,包含通讯引脚模块、时钟控制逻辑、数据控制逻辑和整体控制逻辑;3. I2C时钟频率计算方法,涵盖标准模式(100KHz)和快速模式(400KHz);4. 标准库初始化流程及代码实现;5. 常见问题与避坑指南,重点强调GPIO模式配置和时钟频率设置要点。文章通过生活类比和寄存器分析,深入浅出地讲解了I2C硬件工作原理,为STM32开发者提供了实用的技术参考
2026-06-14 21:39:10
575
原创 STM32F103 学习笔记-24-I2C-读写EEPROM(第2节)-I2C协议层介绍
I2C协议层核心详解:文章系统解析了I2C通讯的协议层规范,重点阐述了三种基本通讯流程(主机写、主机读、复合格式)及其数据包结构,通过课堂师生互动类比形象说明通信机制。详细剖析了起始/停止信号、数据有效性、地址模式(7位/10位)、响应机制等关键时序规则,并给出GPIO模拟的完整代码实现。特别强调7位地址左移等易错点,指出90%通讯失败源于地址处理错误。最后提供避坑指南,包括总线死锁处理、时序要求、应答机制等注意事项,配套STM32参考手册和官方协议规范作为技术依据。
2026-06-14 21:03:53
385
原创 STM32F103 学习笔记-24-I2C-读写EEPROM(第1节)-I2C物理层介绍
本文详细介绍了STM32硬件I2C驱动AT24C02 EEPROM的实现方法。1. I2C协议原理:采用双线制,支持多主从设备通信,通过起始/停止信号、地址帧、应答机制实现可靠数据传输。2. STM32硬件I2C架构:包含时钟控制、数据移位寄存器和中断/DMA模块,支持标准和快速模式。3. 关键实现步骤:GPIO配置为复用开漏输出、时钟参数计算、标准库初始化、读写时序控制,特别注意页写入时的地址对齐处理。4. 典型问题解决方案:包括总线锁死恢复、写入等待超时处理、跨页写入拆分等。
2026-06-14 19:34:40
376
原创 C语言学习笔记 - 46.运算符和表达式 - 运算符4 - 对初学运算符的一些建议
《C语言运算符学习指南》摘要:C语言提供34种运算符,涵盖多种操作类型。学习核心原则是无需死记硬背优先级和结合性,推荐三种实用方法:1)主动使用括号明确运算顺序;2)为提升可读性添加括号;3)拆分复杂表达式为多个简单语句。当前阶段只需掌握基础运算符(算术、赋值、关系、逻辑),其余运算符将在后续章节结合实际应用讲解。附录提供了常用运算符优先级参考表,建议在具体开发中优先使用括号而非依赖优先级记忆。这种方法既能保证代码正确性,又能提高可读性和可维护性。
2026-06-04 14:43:43
387
原创 C语言学习笔记 - 45.运算符和表达式 - 运算符3 - 逻辑运算符
本文系统介绍了C语言的逻辑运算符及其特性:1. 三种基本逻辑运算符:!(非)、&&(与)、||(或)及其运算规则;2. C语言的真假判定标准(非零为真,零为假);3. 逻辑运算符的短路特性(&&左假则右不执行,||左真则右不执行);4. 通过代码示例演示了逻辑运算的实际应用和短路特性;5. 强调了表达式与语句的区别,以及编程时需注意避免依赖短路表达式中的副作用。文章内容对理解C语言逻辑运算机制和规避常见错误具有指导意义。
2026-06-04 14:35:10
239
原创 C语言学习笔记 - 44.运算符和表达式 - 运算符2 - 除法与取余运算符
本文系统介绍了C语言中的除法(/)和取模(%)运算符。除法运算结果取决于操作数类型:整数除法直接截断小数部分(向零取整),浮点除法保留完整小数。取模运算要求两操作数为整数,结果符号与被除数一致。文章通过代码示例详细演示了不同数据类型的运算结果,并总结了常见易错点:整数除法截断特性、浮点触发条件、取模的类型限制和符号规则等。特别强调当被除数绝对值小于除数时,取模结果等于被除数本身。
2026-06-04 14:22:45
332
原创 C语言学习笔记 - 43.运算符与表达式 - 运算符1 - 运算符的分类和简单介绍
本文系统介绍了C语言中五类基础运算符的使用规范:1. 算术运算符(+,-,*,/,%)重点说明整数除法向零取整规则和取余运算的整数限制;2. 关系运算符强调区分"=="与"="的易错点;3. 逻辑运算符详解短路求值特性;4. 赋值运算符包含基本与复合两种形式;5. 运算符优先级通过口诀"非算关逻赋"记忆。特别指出整数运算特性、==/=混淆风险、短路特性等关键考点,建议复杂表达式使用括号提升可读性。
2026-06-04 14:15:50
216
原创 C语言学习笔记 - 42.数据类型 - scanf函数深度解析
本文系统介绍了C语言中scanf函数的核心用法与注意事项。主要内容包括:1. scanf的基本语法格式及其两种典型用法(推荐仅用输入控制符);2. 常用输入控制符(%d、%c、%f等)与变量类型的匹配关系,特别强调%c会读取空白符和double必须用%lf输入;3. 输入缓冲区的工作机制及残留问题,通过实例展示错误现象;4. 给出6条最佳实践建议,包括强制使用取地址符、类型匹配、避免非输入控制符等;5. 列举4类常见错误及修正方法;6. 补充了scanf返回值、指定输入宽度等进阶特性。
2026-06-04 13:22:13
288
原创 STM32F103 学习笔记-23-常用存储器原理与分类
计算机存储器分类与应用解析 摘要:本文系统介绍了计算机存储器的分类、原理及应用。存储器分为易失性(RAM)和非易失性两大类:RAM包括需要刷新的DRAM和静态保持的SRAM;非易失性存储器涵盖ROM、Flash(NOR/NAND)和EEPROM等。文章详细对比了各类存储器的特性,如DRAM的高密度低成本与SRAM的高速稳定,NOR Flash的快速读取与NAND Flash的大容量优势。特别分析了STM32系统中的存储器应用场景,包括内部Flash存储程序、SRAM暂存数据,以及外部扩展存储器的选择限制。
2026-05-25 20:45:55
707
原创 STM32F103 学习笔记-22-DMA(第1节)-DMA功能框图讲解和DMA初始化结构体讲解
摘要:DMA是STM32F103微控制器的重要功能,可在不占用CPU资源的情况下实现高速数据传输。文章详细介绍了DMA的核心优势、三种传输模式(存储器到存储器、外设到存储器、存储器到外设)以及DMA控制器的通道配置。重点解析了DMA功能框图,包括请求机制、通道映射和仲裁规则,并深入讲解了DMA初始化结构体的参数设置,如数据传输方向、地址增量模式和数据宽度等。此外,还介绍了常用的DMA固件库函数,包括初始化、使能、状态查询和中断配置等功能。
2026-05-25 19:52:37
595
原创 STM32F103 学习笔记-21-串口通信(第6节)-串口发送命令控制RGB灯
本摘要概述了STM32串口中断接收的核心原理、硬件机制、配置方法及实战应用。首先通过“厨师与快递员”的类比,形象解释了串口中断(特别是RXNE中断)相比查询式接收的高效性。其次,详细剖析了串口数据接收的硬件流程以及关键寄存器的作用。然后,给出了从0到1的完整配置步骤:包含宏定义、NVIC优先级配置、GPIO与USART初始化、中断服务函数编写,并提供了最小可用代码及寄存器操作注释。最后,通过串口命令控制RGB灯的实战案例,对比了查询式与中断式接收的实现方式。
2026-05-25 19:33:49
506
原创 PCB设计 - 为什么嵌入式软件工程师必须学PCB设计?
摘要:当前嵌入式软件工程师招聘中,硬件知识与PCB能力已成为核心要求。行业头部企业招聘JD显示,掌握PCB设计能显著提升问题排查效率、规避硬件缺陷并加速原型验证。软件工程师需掌握基础电子电路知识、PCB设计基础和硬件调试工具使用,建议从简单项目入手逐步提升。学习资源推荐嘉立创EDA和Altium Designer等工具。具备PCB能力的工程师在职业发展上更具优势,能向驱动开发、系统架构等高薪方向发展,成为团队核心成员。软硬件结合能力是优秀嵌入式工程师的关键竞争力。
2026-05-23 22:35:04
392
原创 C语言学习笔记 - 41.数据类型 - scanf用法4 - 如何使用scanf编写出高质量代码
先提示后输入:用printf明确告知用户输入格式。简化格式控制:scanf中只保留必要的格式声明,避免使用\n等非输入控制符。处理非法输入:每次scanf后清除输入缓冲区,防止残留字符导致后续读取失败。这些原则能显著提升程序的健壮性和用户体验,是工业级C程序的基本要求。
2026-05-19 10:00:29
597
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅