自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 收藏
  • 关注

原创 【STM32 串口完全指南】从轮询到中断再到 DMA,一步步教你搞定串口收发!

串口(UART/USART)是嵌入式开发中最常用的通信接口,不管是调试打印、传感器数据读取,还是上位机指令交互,都离不开它。很多新手刚接触串口时,会被“轮询/中断/DMA”这三种模式搞懵:到底什么时候用轮询?中断和DMA又有什么区别?这篇文章会从基础到进阶,带你吃透STM32串口的三种工作模式,每个模式都会讲清原理、CubeMX配置、带注释的示例代码,以及测试验证方法,看完就能直接用到你的项目里!本文基于STM32 HAL库编写,适用于STM32F1/F4/H7全系列芯片,可直接复制代码使用。

2026-05-06 15:36:01 363

原创 从零写一个LED驱动

本文系统阐述了嵌入式LED驱动设计的演进过程。从直接操作GPIO引脚开始,逐步优化为宏定义、带参宏定义和函数封装等单LED控制方法。随后引入参数结构体和数组管理多个LED,通过编号索引实现统一操作接口。这种设计将硬件参数与操作逻辑分离,形成了面向对象的雏形:LED作为对象实例,驱动提供统一接口。最终实现了硬件无关的上层调用,降低了耦合度,提高了代码复用性。整个过程体现了嵌入式驱动开发的核心思想——通过数据结构和算法封装,将硬件操作抽象为简洁的接口。

2026-04-18 11:06:35 325

原创 【RC / 无人机硬核科普】电调(ESC)全解:分类、参数、接线与避坑指南

本文全面解析了电调(ESC)在RC遥控车、无人机等动力系统中的核心作用。从电调分类(有刷/无刷、分体/四合一)、关键参数(安数、电压适配)到匹配原则(电机-电池-电调三角关系)进行了系统阐述。详细介绍了电调接线方法(BEC供电、信号控制)、参数设置(油门校准、启动模式等)以及常见烧毁原因(堵转、过流等)。针对不同应用场景提供了专业选型建议,帮助RC玩家和开发者正确使用电调,避免因参数不匹配或操作不当导致的设备损坏。

2026-04-13 13:58:32 860

原创 航模 / 无人机电池 S 数、C 数到底是什么?一篇看懂电压与放电能力

航模/无人机电池的S数和C数是关键参数。S数代表电池串联节数,决定电压等级(如3S=11.1V),S数越高电压越大、动力越强,但需匹配设备耐压。C数表示放电倍率,决定瞬间爆发力,计算公式为容量×C数=最大电流。高C数适合暴力飞行但更贵更重,新手应根据设备电压和飞行风格选择合适参数,不必盲目追求高C数。mAh容量则影响续航时间。理解S数(电压)、C数(放电能力)和mAh(容量)的关系,就能正确选购电池避免损坏设备。

2026-04-11 17:41:57 435

原创 智能电池类型 + 串数 完整科普

本文系统介绍了5种锂电池化学体系(LiHv、LiPo、LiIon、LiFe、LiXX)及其核心参数、优势与应用场景,重点解析了电池串数(S数)对电压和容量的影响。通过对比不同S数对应的电压值,提供了选型建议与安全操作指南,强调正确匹配电池类型和S数的重要性。文章指出,电池类型决定化学特性,串数决定总电压,两者结合才能完整标识锂电池性能,为无人机、航模等设备选型提供依据,同时强调了平衡充电、防火存放等安全注意事项。

2026-03-28 11:59:57 378

原创 FreeRTOS工程项目实践

任务之间、中断与任务间,可以使用全局变量和队列进行信息传递;消息队列可以方便地阻塞任务,但是时间和空间开销比全局变量大;消息队列在任务内和中断内要使用不同的函数;为节省消息队列开销,可以在保证数据完整性的情况下传递指针;队列大小要依据实际情况选择,太小会丢数据,太大会浪费内存。本质特性:信号量的本质是消息队列,但其中的元素均为空元素,不占用实际存储空间。核心用途:同步:协调任务的执行时机(解决 “什么时候执行” 的问题)互斥:保护共享资源的访问权限(解决 “谁能执行” 的问题)

2026-03-17 22:42:00 454 1

原创 STM32无感无刷电调实现方法

利用高级定时器输出互补PWM 功能CCR/ARR=PWM占空比。

2026-03-10 16:31:31 65

原创 FOC相关

【《从1开始学习FOC》】

2026-03-06 15:31:28 64

原创 硬件串口和虚拟串口有什么区别

我用和。

2026-03-06 11:48:32 345

原创 Keil5调试代码为什么要把代码优化关掉

Keil调试时需关闭代码优化功能,主要原因在于优化会破坏源码与机器码的对应关系,导致调试混乱。优化可能导致单步执行跳行、变量显示异常、断点失效以及函数无法单步进入等问题。调试完成后发布版本时可开启优化(如O2),以减小代码体积并提升运行效率。简言之,调试需要源码与执行过程严格对应,而优化以提高效率为目标,二者冲突,因此调试阶段必须关闭优化功能。

2026-01-25 19:37:47 377

原创 TTSY-学习笔记2

摘要:SPI总线是摩托罗拉开发的同步串行通信接口,具有高速全双工特点,采用主从架构和4线制(SCLK、MOSI、MISO、CS)。其核心参数包括波特率、传输顺序、数据位长度、时钟极性和相位。文章还通过Flash实验和串口通信案例,分析了阻塞延时导致数据丢失的问题,并提出三种解决方案:定时器中断控制LED、非阻塞延时轮询、串口中断接收,强调了解耦实时任务的重要性。最后指出单片机模块普遍支持中断机制,并提及串口中断实验需设置弱函数。

2026-01-24 21:22:19 410 1

原创 不同段位工程师串口设计方案(详细版)

纯新手入门级方案,仅满足“能收到数据”的最低需求,无工程化设计思维:仅初始化串口波特率(如115200bps)、数据位(8位)、停止位(1位)、校验位(无),不开启任何中断、DMA功能:CPU通过“死等”方式轮询串口接收寄存器状态位(如STM32的RXNE位),未收到数据则一直卡在循环里,收到数据后直接读取寄存器,无任何缓冲处理。伪代码示例:while(1) {while(!// 死等数据,CPU完全占用// 读取1字节数据。

2026-01-24 13:10:55 530 1

原创 TTSY-学习笔记1

同一个IO引脚具备多个不同的功能。

2026-01-22 21:47:10 133

原创 为什么在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 695

原创 保姆级解析:C++浮点转定点数代码(机器人控制场景实战)

本文解析的浮点转定点数代码,核心逻辑是“线性映射+归一化+整数映射”,通过3步完成转换:① 计算物理量范围跨度;② 浮点数归一化到0~1;③ 映射到固定位数的整数。这种转换能大幅降低硬件运算开销,是机器人控制、嵌入式开发中“高效数据处理”的常用技巧。

2025-12-22 20:22:30 312

原创 C#计算阶乘&程序改进

这段 C# 代码实现了一个计算阶乘的控制台程序。核心功能是:用户输入一个整数,程序通过递归方法计算其阶乘并输出结果。代码采用三元运算符实现阶乘的递归计算(n! = n*(n-1)!),并处理了0!的特殊情况。程序存在三个潜在问题:输入范围限制(仅支持Int16)、未处理非法输入(如输入字母会崩溃)、阶乘结果超过int范围时可能溢出。改进建议包括:使用long/BigInteger扩大计算范围、用TryParse验证输入、遵循Pascal命名规范等。最后提供了一个优化版本,演示了如何安全读取输入并处理异常情况

2025-08-16 16:44:29 628

原创 Console.ReadLine()用法&功能

本文介绍了C#中Console.ReadLine()方法的基本用法和特性。作为控制台程序的标准输入方法,它会读取用户输入的一行文本并返回字符串类型。文章详细说明了其语法、使用场景、注意事项,特别强调了数字转换的推荐做法(使用int.TryParse避免程序崩溃)。此外还提供了多个实用示例,包括简单交互、多行输入和计算器实现,帮助开发者掌握这一基础但重要的输入方法。核心要点是:该方法始终返回字符串、需手动转换数字类型、必须等待回车输入,是C#入门必备技能。

2025-08-16 16:27:24 642

原创 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 1661

原创 普通字符串(使用转义字符) 和 逐字字符串(verbatim string literal,使用 @ 符号)

C# 提供两种字符串字面量:普通字符串(使用转义字符)和逐字字符串(以 @ 开头)。普通字符串支持 \n、\t 等转义序列,但需对 \ 和 " 进行转义,适合简单文本。逐字字符串原样保留所有字符(除双引号需写为 ""),特别适合文件路径、SQL、JSON等多行文本,可读性更高。C# 11+ 还引入了原始字符串字面量,可更优雅处理多行文本。选择时,路径推荐用逐字字符串,带转义字符的文本宜用普通字符串,复杂多行文本可考虑C#11新特性。

2025-08-14 10:46:47 1006

原创 机器人运动学中的Actuator space, Joint space 和 Cartesian space

机器人学中,执行器空间、关节空间和笛卡尔空间是控制机械系统的三个关键概念。执行器空间直接关联硬件参数(如电机位置),用于底层控制;关节空间描述各关节状态,便于路径规划;笛卡尔空间直观表示末端执行器的位姿,适合任务目标设定。三者通过正向/逆向运动学相互转换:执行器空间需映射至关节空间,关节空间与笛卡尔空间可双向转换。理解这些空间及其关系对机器人系统设计和精确控制至关重要。

2025-08-13 10:57:22 698

原创 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 522

原创 旋转关节 (Revolute Joint) 和棱柱关节 (Prismatic Joint)

特性旋转关节 (Revolute Joint)棱柱关节 (Prismatic Joint)运动类型旋转 (Rotation)平移 (Translation)关节变量θ (角度)d (距离)自由度1 个旋转自由度1 个平移自由度常见应用肩、肘、腕关节伸缩臂、线性执行器大多数工业机械臂(如 SCARA、六轴机器人)主要由旋转关节组成,因为它们能提供较大的工作空间和灵活性。而一些特定应用(如笛卡尔坐标机器人、某些并联机器人)会使用棱柱关节来实现精确的直线运动。

2025-08-13 10:22:24 1379

原创 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 1225

原创 行列式(Determinant)的几何意义

1保持定向,-1反转定向。|det| = 1,所以 det 只能是±1。旋转 = 保定向的正交变换 → det = +1。反射(或含反射的变换)= 反转定向的正交变换 → det = -1。因此,通过计算一个3x3正交矩阵的行列式,我们可以立即判断它代表的是纯旋转(det=+1)还是包含反射的操作(det=-1)。这是区分这两种基本几何变换的最直接、最可靠的代数方法。

2025-08-11 21:40:26 1619

原创 Zotero修改英文文献的“等”为“et al”的解决方法

直接到zotero中文社区,下载大佬已经修改好的模板,里面有很多大学的参考CSL 样式。

2025-02-18 17:05:00 1019

原创 C++运算符重载中,+=的返回类型为什么不可以是void?

如果operator+=返回void,上面的最后一行代码将会产生编译错误,因为你不能对一个void类型的表达式应用+=运算符。此外,这样做也违背了用户的预期,因为对于内置类型来说,复合赋值运算符确实会返回一个左值,即一个可以再次用于赋值或其他操作的对象。对于复合赋值运算符(如+=),通常它们的语义是修改左侧的操作数并返回一个引用给被修改的对象。因此,为了保持一致性、可预测性和功能完整性,复合赋值运算符应当返回一个指向修改后的对象的引用(通常是*this)。

2024-12-20 15:24:36 305

原创 PCF8591基础知识(AD/DA芯片)

PCF8591在板子上对应的是u16芯片。该芯片有4个ADC输入管脚,分别是AIN0~AIN3。AIN0对应的在排针J3上,AIN1对应的是光敏电阻与固定电阻R31的分压数值,AIN2不怎么考,AIN3对应的是旋转电位计的电压值。器件地址:1001 000(R/W非)表示51单片机从PCF8591读数据;表示51单片机向PCF8591写数据;另外,光敏电阻的阻值变化,光线越强,阻值越低;光线越暗,组织越高。对应的电压值,光线越暗,AIN1的电压越低。光线越强,阻值越高。

2024-04-05 11:42:33 744 1

原创 DS1302实时时钟

采用3个IO口进行通讯, RST赋值低电平时,51单片机不可以和DS1302进行通讯。三线制SPI通讯协议。

2024-04-05 11:42:10 219 1

原创 NE555

方波信号发生电路,频率大小可以通过Rb3可调电位器改变,信号输出在J3排针的Signal引脚;NE555仅作方波信号发生,无需单片机对其进行配置,所以考察的是单片机的定时器/计数器应用。通过跳线帽,可以将signal接到单片机的p34引脚;单片机的p34引脚,为定时器/计数器T0的引脚;

2024-04-03 22:32:20 259 1

原创 AT24C02(EEPROM)

一共255个,可写入的地址为从0x00到0xff.两个字节最多存储65535,0xffff,16位。

2024-03-31 21:35:29 462 1

原创 PWM脉宽调制

3、之前课程高电平是P34=1;对LED控制,可以用字节赋值,即led_ctrl=0xff;2、占空比可以调节led灯的亮度。由于led灯是共阳极接法,所以占空比越高,亮度越暗;1、LED调光的频率最好为1Khz,太小的频率会造成灯的闪烁;占空比:高电平所占周期的时间。

2024-03-31 19:35:51 1250 1

原创 超声波测距

声速v=340m/s,得距离D=v*T/2=v*170(m) (D的单位是m,T的单位是s)2、当CX20106A接收到40kHz的方波时,会在第七管脚产生一个低电平,即P11可以读取到低电平。1、编程实现P10输出40Hz的方波;2、P10产生40kHz方波,并开始计时(定时器1);4、关闭定时器,并根据TH1和TL1的值,计算距离。3、P11读取到低电平,结束计时,得到时间T;启动定时器1以后,每过1us,计数器值+1;1、P10管脚产生40kHz的方波;3、等待P11接收到低电平;

2024-03-29 16:41:12 504 1

原创 客观题专题

一、二极管二、逻辑函数化简三、运算放大器

2024-03-26 19:48:04 341

原创 IIC协议

与单总线协议不同,IIC协议有两根线,一根是时钟线,另一根是数据线。SCL----Serial Clock 串行的时钟线。SDA----Serial Data 串行的数据线。--AT24C02 EEPROM芯片。--PCF8591 AD/DA芯片。

2024-03-06 09:08:38 196 1

原创 DS18B20

2.初始化→跳过ROM(0xcc)→读取暂存器→运用两次Read_DS18B20()下面是老师写的,返回值的话,如果需要是小数的形式,就定义为float变量。1.初始化→跳过ROM(0xcc)→转化温度(0x44);DS18B20读取温度的步骤。

2024-03-02 20:05:42 481

原创 矩阵键盘知识

如图所示,当最下角跳帽的1、2连接时,对应的是矩阵键盘。对赋值0,检测低4位哪一位是0,确定按键所在;对赋值0,检测高4位哪一位是0,确定按键所在;根据所得行和列,确定按键所在位置。

2024-02-29 09:33:30 821

原创 独立按键BTN

独立按键位于整个矩阵键盘的最左侧,4、5、6、7.左下角,跳帽选择2、3,选择的是独立按键,起作用。按下对应按键之后,分别和地相连,置0.两个管脚同时和串口服务,用于串口通信以及给单片机下载程序用。通常按键所用的开关都是机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上就稳定的接通,在断开时也不会一下子彻底断开,而是在闭合和断开的瞬间伴随了一连串的抖动,如图所示。

2024-02-26 20:34:46 1840 1

原创 定时器

两款型号可以近似看成一个。T2H、T2L分别和RL_TH2、RL_TL2共用一个地址。

2024-02-17 20:15:24 298 1

原创 发光二极管LED

1、p2=0x80时,Y4C=1,使能端LE=1,有效,打开锁存器74HC573;2、二极管是共阳极接法,所以当锁存器使能端有效,且p0输出为低电平时,对应的二极管才亮。

2024-02-17 20:08:42 346 1

原创 数码管相关

共阳极数码管码表STC_ISP里有关于七段数码管的段赋值,不过是共阴极接法。但是板子上是共阳极接法,所以需要按位取反(~)。https://img-home.csdnimg.cn/images/20231127111739.png

2024-02-03 11:45:28 411 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除