- 博客(60)
- 收藏
- 关注
原创 Keil MDK 中文乱码完整解决方案(编辑器注释 + 串口 printf 中文问号)
本文提供了Keil MDK中文乱码的完整解决方案,分为两种情况:一是Keil编辑器内中文注释乱码,二是串口输出中文乱码而英文正常。对于编辑器乱码,需调整编码设置与源文件实际编码一致;对于串口输出乱码,重点注意MicroLib库与UTF-8编码的兼容性问题,给出了保留MicroLib使用GBK编码和关闭MicroLib使用UTF-8两种方案。文章还总结了常见错误组合和快速定位故障的方法,强调编码一致性是解决问题的关键,并指出Keil5与Keil4在编码支持上的差异。
2026-08-17 17:12:44
248
原创 RoboMaster_C板_启动与复位_CSDN
本文解释了RoboMaster C板(STM32F407IGH6TR)烧录程序后无反应的常见问题原因及解决方法。关键点包括: BOOT0引脚必须拉低(接地),确保芯片从Flash启动执行用户程序,否则会进入系统bootloader导致程序不运行。 烧录后需手动复位的原因: 下载仅写入Flash,不改变CPU执行状态 复位强制CPU重新从Flash起始地址取指令执行新程序 可在Keil中勾选"Reset and Run"自动完成复位 检查清单:确认BOOT0状态、芯片型号选择、供电正常、启用自动复位功能等。
2026-08-15 21:11:20
198
原创 虚拟机运行速度提升方法
具体调整规则:将默认开启的“允许交换部分虚拟机内存”选项,修改为“调整所有虚拟机内存适应主机预留的可用资源”。配置入口操作:打开全局菜单栏的编辑选项,进入首选项设置页面后,选择内存配置子模块开展相关参数的调整操作。优先级调整:切换至首选项的优先级配置页,将虚拟机输入内容抓取等级从默认的“正常”调整为“高”等级。配置操作:切换至首选项的设备配置页,取消默认勾选的“虚拟机运行时在主机上禁用自动运行”的功能选项。:打开已创建完成的虚拟机的设置编辑界面,进入硬件配置调整模块,按需开展对应参数的修改操作。
2026-07-24 19:13:07
238
原创 FreeRTOS入坑必看!vTaskDelay与HAL_Delay的本质区别(90%新手都用错)
FreeRTOS延时函数避坑指南:HAL_Delay vs vTaskDelay 核心区别: HAL_Delay:裸机式"死等",独占CPU导致系统卡顿(如员工占工位不干活)。 vTaskDelay:RTOS智能阻塞,主动释放CPU让其他任务运行(如请假让同事工作)。 关键点: 使用场景: HAL_Delay仅用于初始化、中断等无OS环境。 vTaskDelay必须用于FreeRTOS任务,否则破坏多任务调度。 避坑提示: 任务中误用HAL_Delay会锁死系统;中断调用vTaskDel
2026-07-18 17:40:50
272
原创 [特殊字符]嵌入式硬核解析:任务优先级与中断优先级的核心区别(彻底搞懂不混淆)
摘要:嵌入式RTOS开发中,任务优先级(软件层)和中断优先级(硬件层)是两套独立体系,常因混淆导致实时性问题。核心区别: 层级与管理:任务优先级由RTOS调度器管理,决定任务间CPU分配;中断优先级由芯片NVIC控制,决定中断抢占顺序。 数值规则:RTOS任务优先级数值越大越高,NVIC中断优先级数值越小越高。 抢占逻辑:中断天然高于所有任务,任何中断均可抢占任务,但任务无法抢占中断。 开发避坑: 禁止跨体系对比优先级数值; 中断上下文不可执行阻塞操作; 勿随意修改系统中断(如SysTick)优先级。
2026-07-06 16:21:16
310
原创 STM32 printf 串口重定向代码完整解析
C语言标准函数printf()putchar()底层依赖标准库函数fputc,默认是向**电脑屏幕(标准输出stdout)**输出字符。但单片机没有屏幕,直接调用printf会报错、无任何输出。这段代码是STM32 HAL库的printf串口重定向模板:通过重写标准库底层输出函数fputc,把printf打印内容转发到硬件串口1,实现单片机向电脑串口助手打印调试信息。
2026-07-01 20:50:05
265
原创 使用VScode中插件进行Latex编写,保姆级资料分享
【【Vscode+TeXLive】LaTeX环境安装配置详细教学,内置AI编辑,可适配Codex,一键更换期刊模板,附赠所需安装包及各期刊LaTeX模板)】 https://www.bilibili.com/video/BV1GcG86METf/?【Latex:超详细新手安装latex:TexLive环境+VScode编辑器】 https://www.bilibili.com/video/BV1y8411P7qs/?
2026-06-24 21:08:51
324
原创 VMware安装Ubuntu20.04以及安装ROS1
本文提供了Ubuntu系统安装及配置的完整指南:1)通过VMware虚拟机快速安装Ubuntu系统(推荐两个8分钟教程视频);2)使用鱼香ROS的一键安装方法配置ROS1开发环境;3)详细介绍了4种Windows与Ubuntu系统间互传文件的方法(参考CSDN技术博客)。这些资源涵盖了从系统搭建到开发环境配置的完整流程,特别适合机器人操作系统(ROS)开发者快速搭建开发环境。所有参考资料均附视频教程链接和技术博客地址,便于读者逐步操作。
2026-06-12 11:11:30
209
原创 嵌入式开发必看:彻底搞懂大小端(Endian)原理、判断与实战示例
本文深入浅出地讲解了嵌入式开发中关键的大小端问题。主要内容包括:大小端的核心定义(大端模式高字节存低地址、小端模式低字节存低地址)、经典内存存储示例、常见平台的大小端规则(ARM/x86为小端,网络协议为大端)。文章提供了可运行的大小端判断代码(基于union特性)、16/32位数据转换函数,并分析了串口通信和网络协议中的实战应用场景。最后总结出6个必背要点,帮助开发者彻底掌握这一嵌入式核心知识点,避免数据解析错误和通信乱码问题。
2026-05-30 21:29:27
308
原创 【STM32 C 语言入门】什么是强制类型转换?小白也能秒懂!
强制类型转换是C语言中将一种数据类型临时转换为另一种类型的方法,主要用于解决数据类型不匹配问题。常见场景包括数字与枚举转换、整数与小数转换、大类型与小类型转换等。在STM32开发中,常用于LED控制等硬件操作。使用时需注意:1)格式为(目标类型)数据;2)不改变原变量类型;3)确保目标类型匹配。常见错误包括类型写错、数据溢出、转换顺序错误、枚举越界和不必要转换等。正确使用可避免90%的常见bug,核心原则是只在类型不匹配时使用。
2026-05-24 21:32:56
386
原创 C语言结构体变量和结构体指针详解:定义、访问、传参与易错点总结
结构体(struct)是一种自定义数据类型,它允许我们把多个不同类型的数据成员组合在一起。int age;name:姓名age:年龄score:成绩通过结构体,我们可以更方便地管理一组相关数据。结构体变量就是结构体类型的普通变量。这表示定义了一个Student类型的结构体变量s1。int age;int age;} s1, s2;结构体指针是指向结构体变量的指针。这里p是一个指向类型的指针。->结构体变量和结构体指针是 C 语言中非常基础但也非常重要的内容。
2026-05-20 21:12:49
426
原创 一、驱动基础
驱动的核心作用是让硬件动起来,它是底层硬件和上层软件之间的桥梁,直接与硬件打交道。在无操作系统(裸机)的场景中,驱动开发直接通过操作寄存器控制硬件,比如单片机控制 LED 灯的程序,无需额外的系统框架。在Linux 系统中,驱动开发需要遵循系统提供的驱动框架,为应用程序提供统一的调用接口,整体架构为「应用→操作系统→驱动→硬件」。字符设备:需按串行顺序访问的设备,如鼠标块设备:支持任意顺序访问的存储设备,如硬盘网络设备:面向数据包收发的设备,如网卡。
2026-05-19 10:42:30
499
原创 优化LED驱动--
本文详细介绍了基于STM32与FreeRTOS的LED驱动开发实践,从最基础的GPIO操作逐步演进到面向对象的驱动框架设计。通过宏定义封装、结构体参数管理、枚举类型优化等步骤,实现了高内聚、低耦合的LED驱动方案。重点阐述了数据与操作分离、静态/运行参数划分等面向对象思维,最终构建出具备统一接口、硬件解耦特性的驱动框架。该方案不仅提升了代码可维护性和复用性,还为扩展其他外设驱动提供了参考范式,体现了嵌入式开发中"把硬件细节封装为业务接口"的核心价值。
2026-05-18 16:01:19
362
原创 【STM32 串口完全指南】从轮询到中断再到 DMA,一步步教你搞定串口收发!
串口(UART/USART)是嵌入式开发中最常用的通信接口,不管是调试打印、传感器数据读取,还是上位机指令交互,都离不开它。很多新手刚接触串口时,会被“轮询/中断/DMA”这三种模式搞懵:到底什么时候用轮询?中断和DMA又有什么区别?这篇文章会从基础到进阶,带你吃透STM32串口的三种工作模式,每个模式都会讲清原理、CubeMX配置、带注释的示例代码,以及测试验证方法,看完就能直接用到你的项目里!本文基于STM32 HAL库编写,适用于STM32F1/F4/H7全系列芯片,可直接复制代码使用。
2026-05-06 15:36:01
583
原创 从零写一个LED驱动
本文系统阐述了嵌入式LED驱动设计的演进过程。从直接操作GPIO引脚开始,逐步优化为宏定义、带参宏定义和函数封装等单LED控制方法。随后引入参数结构体和数组管理多个LED,通过编号索引实现统一操作接口。这种设计将硬件参数与操作逻辑分离,形成了面向对象的雏形:LED作为对象实例,驱动提供统一接口。最终实现了硬件无关的上层调用,降低了耦合度,提高了代码复用性。整个过程体现了嵌入式驱动开发的核心思想——通过数据结构和算法封装,将硬件操作抽象为简洁的接口。
2026-04-18 11:06:35
343
原创 【RC / 无人机硬核科普】电调(ESC)全解:分类、参数、接线与避坑指南
本文全面解析了电调(ESC)在RC遥控车、无人机等动力系统中的核心作用。从电调分类(有刷/无刷、分体/四合一)、关键参数(安数、电压适配)到匹配原则(电机-电池-电调三角关系)进行了系统阐述。详细介绍了电调接线方法(BEC供电、信号控制)、参数设置(油门校准、启动模式等)以及常见烧毁原因(堵转、过流等)。针对不同应用场景提供了专业选型建议,帮助RC玩家和开发者正确使用电调,避免因参数不匹配或操作不当导致的设备损坏。
2026-04-13 13:58:32
1835
原创 航模 / 无人机电池 S 数、C 数到底是什么?一篇看懂电压与放电能力
航模/无人机电池的S数和C数是关键参数。S数代表电池串联节数,决定电压等级(如3S=11.1V),S数越高电压越大、动力越强,但需匹配设备耐压。C数表示放电倍率,决定瞬间爆发力,计算公式为容量×C数=最大电流。高C数适合暴力飞行但更贵更重,新手应根据设备电压和飞行风格选择合适参数,不必盲目追求高C数。mAh容量则影响续航时间。理解S数(电压)、C数(放电能力)和mAh(容量)的关系,就能正确选购电池避免损坏设备。
2026-04-11 17:41:57
986
原创 智能电池类型 + 串数 完整科普
本文系统介绍了5种锂电池化学体系(LiHv、LiPo、LiIon、LiFe、LiXX)及其核心参数、优势与应用场景,重点解析了电池串数(S数)对电压和容量的影响。通过对比不同S数对应的电压值,提供了选型建议与安全操作指南,强调正确匹配电池类型和S数的重要性。文章指出,电池类型决定化学特性,串数决定总电压,两者结合才能完整标识锂电池性能,为无人机、航模等设备选型提供依据,同时强调了平衡充电、防火存放等安全注意事项。
2026-03-28 11:59:57
829
原创 FreeRTOS工程项目实践
任务之间、中断与任务间,可以使用全局变量和队列进行信息传递;消息队列可以方便地阻塞任务,但是时间和空间开销比全局变量大;消息队列在任务内和中断内要使用不同的函数;为节省消息队列开销,可以在保证数据完整性的情况下传递指针;队列大小要依据实际情况选择,太小会丢数据,太大会浪费内存。本质特性:信号量的本质是消息队列,但其中的元素均为空元素,不占用实际存储空间。核心用途:同步:协调任务的执行时机(解决 “什么时候执行” 的问题)互斥:保护共享资源的访问权限(解决 “谁能执行” 的问题)
2026-03-17 22:42:00
490
1
原创 Keil5调试代码为什么要把代码优化关掉
Keil调试时需关闭代码优化功能,主要原因在于优化会破坏源码与机器码的对应关系,导致调试混乱。优化可能导致单步执行跳行、变量显示异常、断点失效以及函数无法单步进入等问题。调试完成后发布版本时可开启优化(如O2),以减小代码体积并提升运行效率。简言之,调试需要源码与执行过程严格对应,而优化以提高效率为目标,二者冲突,因此调试阶段必须关闭优化功能。
2026-01-25 19:37:47
423
原创 TTSY-学习笔记2
摘要:SPI总线是摩托罗拉开发的同步串行通信接口,具有高速全双工特点,采用主从架构和4线制(SCLK、MOSI、MISO、CS)。其核心参数包括波特率、传输顺序、数据位长度、时钟极性和相位。文章还通过Flash实验和串口通信案例,分析了阻塞延时导致数据丢失的问题,并提出三种解决方案:定时器中断控制LED、非阻塞延时轮询、串口中断接收,强调了解耦实时任务的重要性。最后指出单片机模块普遍支持中断机制,并提及串口中断实验需设置弱函数。
2026-01-24 21:22:19
427
1
原创 不同段位工程师串口设计方案(详细版)
纯新手入门级方案,仅满足“能收到数据”的最低需求,无工程化设计思维:仅初始化串口波特率(如115200bps)、数据位(8位)、停止位(1位)、校验位(无),不开启任何中断、DMA功能:CPU通过“死等”方式轮询串口接收寄存器状态位(如STM32的RXNE位),未收到数据则一直卡在循环里,收到数据后直接读取寄存器,无任何缓冲处理。伪代码示例:while(1) {while(!// 死等数据,CPU完全占用// 读取1字节数据。
2026-01-24 13:10:55
549
1
原创 为什么在cubeide里勾选了can1,生成的工程里没有can.c?
在STM32CubeIDE中勾选CAN1但未生成can.c文件,主要原因包括:1)代码生成设置问题,需在Project Manager中勾选"Generate peripheral initialization as a pair of '.c/.h' files"选项;2)CAN初始化函数可能已集成在main.c中;3)CAN模式未正确配置为Master Mode;4)引脚分配冲突。解决方法包括调整代码生成设置、检查CAN模式配置、确认引脚映射,建议为每个外设生成独立.c/.h文件以获
2026-01-22 11:06:30
740
原创 保姆级解析:C++浮点转定点数代码(机器人控制场景实战)
本文解析的浮点转定点数代码,核心逻辑是“线性映射+归一化+整数映射”,通过3步完成转换:① 计算物理量范围跨度;② 浮点数归一化到0~1;③ 映射到固定位数的整数。这种转换能大幅降低硬件运算开销,是机器人控制、嵌入式开发中“高效数据处理”的常用技巧。
2025-12-22 20:22:30
335
原创 C#计算阶乘&程序改进
这段 C# 代码实现了一个计算阶乘的控制台程序。核心功能是:用户输入一个整数,程序通过递归方法计算其阶乘并输出结果。代码采用三元运算符实现阶乘的递归计算(n! = n*(n-1)!),并处理了0!的特殊情况。程序存在三个潜在问题:输入范围限制(仅支持Int16)、未处理非法输入(如输入字母会崩溃)、阶乘结果超过int范围时可能溢出。改进建议包括:使用long/BigInteger扩大计算范围、用TryParse验证输入、遵循Pascal命名规范等。最后提供了一个优化版本,演示了如何安全读取输入并处理异常情况
2025-08-16 16:44:29
649
原创 Console.ReadLine()用法&功能
本文介绍了C#中Console.ReadLine()方法的基本用法和特性。作为控制台程序的标准输入方法,它会读取用户输入的一行文本并返回字符串类型。文章详细说明了其语法、使用场景、注意事项,特别强调了数字转换的推荐做法(使用int.TryParse避免程序崩溃)。此外还提供了多个实用示例,包括简单交互、多行输入和计算器实现,帮助开发者掌握这一基础但重要的输入方法。核心要点是:该方法始终返回字符串、需手动转换数字类型、必须等待回车输入,是C#入门必备技能。
2025-08-16 16:27:24
730
原创 C#控制台输入(Read()、ReadKey()和ReadLine())
摘要: C# 提供三种控制台输入方法: Console.Read():读取单个字符的ASCII码(需回车),会捕获\r\n,返回int类型。 Console.ReadKey():即时读取任意按键(无需回车),返回ConsoleKeyInfo,支持功能键检测。 Console.ReadLine():读取整行文本(需回车),自动去除\r\n,返回string类型。 适用场景: 单字符输入(如菜单选择)→ ReadKey() 整行文本输入(如用户名)→ ReadLine() 低级字符处理→ Read()
2025-08-15 21:11:07
1715
原创 普通字符串(使用转义字符) 和 逐字字符串(verbatim string literal,使用 @ 符号)
C# 提供两种字符串字面量:普通字符串(使用转义字符)和逐字字符串(以 @ 开头)。普通字符串支持 \n、\t 等转义序列,但需对 \ 和 " 进行转义,适合简单文本。逐字字符串原样保留所有字符(除双引号需写为 ""),特别适合文件路径、SQL、JSON等多行文本,可读性更高。C# 11+ 还引入了原始字符串字面量,可更优雅处理多行文本。选择时,路径推荐用逐字字符串,带转义字符的文本宜用普通字符串,复杂多行文本可考虑C#11新特性。
2025-08-14 10:46:47
1031
原创 机器人运动学中的Actuator space, Joint space 和 Cartesian space
机器人学中,执行器空间、关节空间和笛卡尔空间是控制机械系统的三个关键概念。执行器空间直接关联硬件参数(如电机位置),用于底层控制;关节空间描述各关节状态,便于路径规划;笛卡尔空间直观表示末端执行器的位姿,适合任务目标设定。三者通过正向/逆向运动学相互转换:执行器空间需映射至关节空间,关节空间与笛卡尔空间可双向转换。理解这些空间及其关系对机器人系统设计和精确控制至关重要。
2025-08-13 10:57:22
795
原创 Denavit-Hartenberg (D-H) 参数法 中对连杆参数 a (link length) 的理解
摘要: 在 Denavit-Hartenberg (D-H) 参数法 中,连杆参数 a 表示两个相邻关节轴(zᵢ 和 zᵢ₊₁)沿 xᵢ 方向的公垂线距离。当两个 z 轴 共线 或 垂直相交 时,它们的最短距离为 0,因此 a = 0。若两轴 平行但偏移 或 异面,则 a > 0。核心思想是:a 反映两轴间的横向偏移,共线或相交时无偏移,故 a 为零。
2025-08-13 10:42:50
565
原创 旋转关节 (Revolute Joint) 和棱柱关节 (Prismatic Joint)
特性旋转关节 (Revolute Joint)棱柱关节 (Prismatic Joint)运动类型旋转 (Rotation)平移 (Translation)关节变量θ (角度)d (距离)自由度1 个旋转自由度1 个平移自由度常见应用肩、肘、腕关节伸缩臂、线性执行器大多数工业机械臂(如 SCARA、六轴机器人)主要由旋转关节组成,因为它们能提供较大的工作空间和灵活性。而一些特定应用(如笛卡尔坐标机器人、某些并联机器人)会使用棱柱关节来实现精确的直线运动。
2025-08-13 10:22:24
1635
原创 Rotation Matrix与转角 小結
欧拉角与固定角:三维旋转的12种表示方法 欧拉角(Euler angles)和固定角(Fixed angles)是描述三维旋转的两种方式。欧拉角绕物体自身坐标系(动轴)连续旋转三次,如Z-Y'-Z'';固定角则绕固定世界坐标系旋转三次,如Z-Y-X。由于三维旋转需避免连续绕同一轴,经过组合计算(3×2×2)可得12种有效的旋转序列。 关键对偶性在于:每个欧拉角序列(如Z-Y'-X'')对应一个反向顺序的固定角序列(X-Y-Z)。这种关系使得12种旋转序列可分别解释为欧拉角或固定角,而非24种独立表示。
2025-08-12 10:31:59
1270
原创 行列式(Determinant)的几何意义
1保持定向,-1反转定向。|det| = 1,所以 det 只能是±1。旋转 = 保定向的正交变换 → det = +1。反射(或含反射的变换)= 反转定向的正交变换 → det = -1。因此,通过计算一个3x3正交矩阵的行列式,我们可以立即判断它代表的是纯旋转(det=+1)还是包含反射的操作(det=-1)。这是区分这两种基本几何变换的最直接、最可靠的代数方法。
2025-08-11 21:40:26
1706
原创 Zotero修改英文文献的“等”为“et al”的解决方法
直接到zotero中文社区,下载大佬已经修改好的模板,里面有很多大学的参考CSL 样式。
2025-02-18 17:05:00
1043
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅