- 博客(68)
- 资源 (2)
- 收藏
- 关注
原创 倒立摆训练秘籍:理解训练参数
本文以“学生练习倒立摆”类比神经网络训练,详解PPO算法配置:每轮16步采集经验,150轮迭代,每50轮存档;策略网络(Actor-Critic)含两层32神经元,激活函数为ELU;算法采用PPO机制,通过clip_param=0.2控制更新幅度,自适应学习率,结合gamma=0.99与lam=0.95平衡即时与长期收益,确保稳定学习。所有规则由人为设定,模型仅更新权重参数。
2026-09-28 11:11:44
330
原创 BOOT 跳转 APP vs CubeIDE 调试 APP 执行路径对比
文章摘要(149字) BOOT跳转APP与CubeIDE调试APP执行路径差异的核心在于系统初始状态不同。CubeIDE调试时会强制暂停BOOT,保留其已配置的144MHz时钟和FLASH等待周期,直接跳转APP导致HSE重复开启失败;而BOOT正常跳转会通过HAL_RCC_Reset将系统复位至64MHz HSI状态,APP得以完整初始化。关键差异在于:调试模式跳过RCC复位导致APP时钟初始化冲突,而标准跳转流程提供干净的硬件状态。修复方案需确保BOOT跳转前彻底复位RCC,APP则无需特殊处理HSE状
2026-07-27 15:02:23
234
原创 射频芯片学习-ExpressLRS 对频流程分析
ELRS对频与重连机制详解 对频流程核心 触发条件:TX通过Lua脚本或RX通过上电检测/按钮触发绑定模式,双方强制切换至50Hz SF8速率(CRC=0)确保兼容性。 UID交换:TX通过MSP包循环发送MasterUID(25次),RX接收后写入EEPROM并生成相同FHSS跳频序列(基于UID的伪随机)。 退出绑定:TX发送完成后自动恢复用户速率;RX检测到UID更新后退出,开始速率扫描。 已配对设备重连机制 TX先上电:持续全频段跳频(含Sync信道),每600ms发送SYNC包(含FHSS位置/包
2026-07-07 13:49:52
281
原创 射频芯片学习-ExpressLRS 射频芯片配置完整分析
ExpressLRS射频芯片配置与跳频策略分析摘要 ExpressLRS支持SX127x(900MHz/433MHz)、SX1280(2.4GHz)、LR1121(双频)三种射频芯片平台,通过LoRa/FLRC/GFSK调制实现高效通信。其核心设计特点包括: LoRa参数优化:采用最大带宽(500kHz/800kHz)和隐式包头节省开销,自定义轻量级CRC替代硬件CRC,SX1280使用LI编码增强抗干扰能力; 跳频策略:基于伪随机序列(种子源自绑定UID)实现频道均等分布,Sync包周期性同步收发端跳频指
2026-07-03 18:38:44
281
原创 射频芯片学习-Lora包参配置
LoRa 调制的数学本质是 chirp 信号 —— 频率随时间线性增加(up-chirp)或减少(down-chirp)。IQ 反转意味着把 I 路和 Q 路互换,等效于翻转 chirp 方向。有自己的 CRC 在应用层再算一遍,但物理层 CRC 仍然建议开着 — 提前丢弃坏包。BW 越大 → 符号越短 → 数据越快 → 但灵敏度略降。CR = 4/(4+N),N 越大冗余越多。不一致 = 物理层直接丢弃,连 CRC 校验都到不了。不一致 = 物理层完全无法解调,表现为接收方什么也收不到。
2026-07-03 14:58:54
262
原创 射频芯片学习-PA = Power Amplifier(功率放大器)
摘要:LR20xx射频芯片内置双路功率放大器(PA),LFPA支持Sub-GHz频段(400-950MHz),HFPA支持2.4GHz频段。通过配置PA参数(如工作模式、占空比、电流片数)可显著提升发射功率,从默认0dBm(1mW)增至22dBm(160mW)。其中LFPA推荐使用FSM自动管理模式,占空比和电流片数均设为7以获得最大功率。最终输出功率由PA硬件配置和发射参数共同决定,需配合调整。该设计通过分级控制实现功率灵活可调,兼顾能效与传输距离需求。
2026-07-03 14:08:55
275
原创 射频芯片学习-dBm概念
【摘要】dBm是用于表示信号强度和接收灵敏度的单位,以1mW为基准(0dBm)。信号强度为正dBm表示功率大于1mW(发射端常见),负dBm表示小于1mW(接收端常见)。接收机灵敏度均为负值,因其处理的信号极其微弱(如-100dBm=10⁻¹⁰mW)。数值比较遵循数轴逻辑:-1dBm>-100dBm(信号更强),1dBm<100dBm(功率更大)。灵敏度负值越小(如-110dBm)表示接收能力越强。实际应用中,WiFi信号强度在-30~-50dBm为极强,-95dBm以下则易断连。需注意区分:发射功率(正值
2026-07-03 13:50:30
273
原创 STM32H7 双FDCAN收发 使用双FIFO 配置
本文记录了同时使用FDCAN1和FDCAN2进行数据收发时遇到的问题及解决方法。关键发现是两个CAN外设共用同一块RAM,因此必须正确设置RAM偏移量(ramoffset)以避免数据丢失。文章详细展示了两个CAN通道的初始化配置代码,包括过滤器设置、中断使能等关键步骤,并特别强调了对FIFO0和FIFO1的不同处理方式。最终通过正确配置过滤器索引(FDCAN_FILTER_TO_RXFIFO0/FDCAN_FILTER_TO_RXFIFO1)和中断回调函数,成功实现了双CAN通道的正常收发功能。文中还包含了
2026-05-07 10:49:44
106
原创 嵌入式_每日一坑
文章摘要:开发调试过程中发现STM32 G431芯片的看门狗与flash擦除存在冲突问题。虽然配置了200ms喂狗周期,但在flash擦除时仍会复位。调试发现,由于flash擦除时系统时钟停滞,打印的22ms擦除时间不准确,实际耗时约500ms导致看门狗超时。更严重的是,这种复位不会触发看门狗中断,也不会置位复位标志位,使得问题难以排查。最终通过示波器配合GPIO测量才确认是看门狗复位导致的系统重启。
2026-04-10 11:19:19
81
原创 TinyUSB H743 CubeIDE 配置 双CDC虚拟串口
本文介绍了使用TinyUSB库在STM32H743上配置双虚拟串口的实现方法。主要内容包括:1)通过CubeIDE配置USBFS设备时钟为48MHz并启用中断;2)移植TinyUSB源码,禁用STM32内置USB中间件;3)修改配置文件tusb_config.h并实现中断处理函数;4)最终成功在PC端识别出双虚拟串口。文章还总结了TinyUSB的基本使用流程:移植源码、修改配置、实现初始化和循环代码。该方案为开发者了解TinyUSB提供了实践参考。
2026-04-09 10:30:59
356
原创 因为优化等级出现的 莫名其妙的bug
文章摘要:在使用-Oz最小体积优化时,编译器会优化掉全局结构体的全0初始化值,导致变量获取的是RAM上电时的脏值。通过宏定义的结构体变量在展开后,编译器可能因识别混乱而跳过Flash到RAM的初始化赋值。解决方法是在运行时手动调用Clear()函数进行清零,因为运行时指令不会被优化器删除。最终结论是,在-Oz优化下,全局结构体的{0}初始化不可靠,必须在运行时手动清零才能确保100%可靠。
2026-04-01 14:13:13
340
原创 STM32CubeIDE工程cm_backtrace调试
使用cm_backtrace调试时遇到的一些问题:1、无有效输出信息解决:使用STM32CubeIDE自带的addr2line工具,然后后面加08006E59 提示地址。
2025-12-09 14:42:49
423
原创 STM32ADC模式和DMA设置
本文解析了ADC和DMA模块的关键配置区别:1)ADC的扫描模式决定单次转换单/多通道;2)连续转换模式实现自动循环转换,不间歇模式需外部触发分组转换;3)DMA连续请求控制数据获取方式;4)DMA的Normal模式仅完成单次传输,Circular模式循环应对ADC请求,但需保证持续的数据源和请求信号。这些配置虽名称相似但功能各异,需要仔细区分理解。核心在于掌握各模块的工作机制及相互配合关系。
2025-10-01 15:06:55
396
原创 Odrive 双电机代码改单电机
摘要:修改board.cpp和board.h硬件配置,主要调整包括:1) 将轴数量改为1(#define AXIS_COUNT(1));2) 删除冗余的DRV8301驱动、温度、电机和编码器配置;3) 调整GPIO引脚分配,如将B4 ENC0_A改为B5以避免冲突;4) 配置单轴系统相关参数,包括定时器、电流传感器、编码器接口等;5) 特别注意DRV8301驱动的SPI时序正确性。这些修改简化了硬件配置,适配单轴控制需求。
2025-09-14 17:03:54
323
原创 先楫HPM6E8Y PWMV2外设输出PWM
本文总结了PWMv2模块调试的关键要点:1)模块含28个影子寄存器,支持4个独立子模块,每个需单独配置时间基准;2)PWM输出由两个比较值控制,可精确定制波形;3)配置流程包括初始化引脚、绑定时钟源和比较器到影子寄存器等步骤。文中提供了详细的代码实现示例,并强调正确分配比较值和寄存器的重要性。最后指出,开发时应以数据手册为准,避免凭猜测编程。
2025-09-12 10:55:21
509
原创 LORA模块的通讯速率(915Mhz)以及通道数量规划
摘要:LoRa通信的数据速率由公式R=(BW×SF×CR)/(2^SF)决定,其中BW为带宽,SF为扩频因子(6-12),CR为编码率。计算表明,带宽与速率正相关(带宽翻倍则速率近似翻倍),而SF与速率负相关(SF每增1速率约减半)。915MHz频段下,125kHz+SF12组合适用于远距离低速传输(366bps),500kHz+SF6适合近距离高速传输(46.9kbps)。该频段理论上可提供2548个正交通道(带宽×SF×子频道组合),支持大规模设备并发通信。实际速率会因协议开销略低于理论值。
2025-08-15 20:11:40
1521
原创 NUC970 Uboot中开启设备树支持(NAND)
拿到Uboot工程,先make clean、make defconfig;之后make menuconfig。
2024-01-29 08:55:22
790
原创 AD717X 驱动框架,连续读双通道ADC数据;AD7172等
验证方案时用到了AD7172芯片,24位AD,分辨率是真的高,无敌。但是前级放大电路不给力,所以放弃这版方案了。为了更好的移植性,以及复用代码。先写框架,然后通过注册函数的方式实例化对象,通过对象调用设备(简单说就是结构体,函数指针)。如果你使用的是STM32 HAL库,基本上不需要改变。、和MCU相关的文件、移植只需要重写这个文件】.....手册是中文的自己看吧,配合代码不难。PS:整体代码是根据ADI给的代码改写的。【AD7172的寄存器定义文件】
2023-07-29 09:28:43
4438
5
原创 NUC972 Linux学习 NAND FLASH 制作系统
如果一直挂载不上的同学可以试试把这个功能取消,然后到上面两个方式中去配置。2.1、分区可以从以下几个地方开始:Kernel->arch->arm->boot->dts中找到板卡的设备树。其中三个分区,分别为mtdblock0,mtdblock1,mtdblock2。2.2、uboot->include->config中找到板卡的.h文件。刚刚学习挂载.dtb设备树文件,一直没有更新rootfs所以导致报错,重新编译下载rootfs解决。2、如果没有上述的log输出,就是说根本没有进行分区,分区失败了。
2023-06-01 14:00:46
1610
1
原创 AT32F437VM SPI驱动AT7456E OSD芯片
上篇文章讲了BF固件中关于OSD的代码部分,今天来看一下硬件部分。使用AT的芯片配置SPI和OSD芯片通讯。
2022-11-23 10:14:05
2594
原创 spi个人笔记
spi是全双工通讯,收发同时进行。这句话怎么理解?如上图所示:主机产生一组时钟信号,并通过mosi输出8位数据。这个时候,虽然从机没有返回数据(持续低电平),但是因为是 收发同步,所以此时主机已经采集了此次的miso数据。就是说,无论你的目的是发送还是接受,每产生一组时钟信号,就会发送一组数据同时接受一组数据。时钟信号由主机产生,从机回复数据需要通过主机发送数据产生的时钟信号。所以,如上图所示,共两组数据。从机回复数据时,可以通过主机随便发一个无效的数据过来。st
2022-11-22 22:53:46
2022
原创 浅析Betaflight中的OSD叠加程序【MAX7456&AT7456】
前言:想要对OSD下手已经不是头一次了,前几次都浅尝辄止。一个是能力不够,BetaFlight的代码体系太庞大了,看不懂也摘不出来。这次要做一款带osd功能的接收机(用在遥控车上),所以又来打飞控程序主意。参考代码:betaflight V4.2.10OSD叠加芯片:AT7456E 【可以在立创商城中搜索PDF的文档】Betaflight中有关于常用飞控型号的图片,经过查看可以知道大多数飞控使用的OSD芯片为AT7456E。解析过程:按照目录结构可以找到关于OSD功能..
2022-11-22 15:32:34
8084
2
原创 LVGL入门 常用的几个命令(个人笔记)
前言:学习LVGL的过程中,常常知道有这个命令,也知道大概怎么用。但总想不起来命令叫什么,在整个库中找也显得麻烦,搞得每次写程序还要翻之前的Demo所以在这里将学习过程中用到的命令 存放在这里,方便再使用的时候方便的找到命令名字。
2022-10-27 15:15:06
4186
原创 将STM32 Flash的一部分虚拟为大容量存储设备 USB_Device
因为103VET6的flash块大小为2K,所以要判断blk_addr在那个Flash块中,然后将整个Flash块读出来重新写入。如下图所示:将APP2所用的区域作为 大容量存储设备使用的内存,其中就包括升级需要的bin文件。写入:buf为要写入数据的指针、blk_addr为要写入的块的index、blk_len为要写入几个块(一般为1)大容量存储设备 起始地址为0x0804B000, 在固件之前的内容为FAT系统的其他数据。和bin文件是一样的。
2022-10-25 11:18:20
2514
1
原创 使用python serial 库发送16进制数据
如果data为字符串 要通过bytes.fromhex(data) 转换为ascii码 发送。# 可以直接将10进制的数组 或者 16进制数组给串口发送。这个函数实际传入的data类型可以很多种。注意下面问题即可发送。
2022-09-23 16:28:38
3162
原创 PYQT Pushbutton 右键菜单
演示为pushbutton添加右键菜单。buttontest.py 文件。mybutton.py 文件。
2022-09-21 13:02:41
953
原创 C语言常用的注册手段----个人笔记
【动作单元】*n = 【动作】 【动作】*n = 【动作组】接下来我们要将 gClear11111,gClear22222两个【动作】,或者更多【动作】组合成一个【动作组】。为了方便快速调整/新建【动作组】,可以新建一个结构体,结构体存放这些【动作】。为了方便快速新建【动作】,可以新建一个结构体,结构体里面存放这些【动作单元】为了快速组合【动作单元】为【动作】,我们再建立一个结构体。有一系列的【动作】需要排列,成为【动作组】。
2022-09-06 13:43:00
547
原创 PT100 or PT1000 温度计算公式(有代码)生成数组
要在程序中使用查表的方法来计算温度。所以就需要一个温度和阻值的对照表格。在网上搜了一下没有可以直接复制的,干脆自己写一个以后万一用得到。直接插代码:【适用范围:温度>0】 因为公式是温度>0时的公式。可以简单对照一下别人给的表格,都是一样的。...
2022-08-27 09:22:07
10673
原创 关于对飞控芯片(STM32)DFU模式升级的认识
【举报再看养成习惯,噢 不对,点赞再看 养成习惯。感谢支持】首先:飞控只是一个开发板,大家都可以开发!开发就要把自己的程序下载进去,所以我们来看一下在没有Jlink帮助,只使用飞控上的USB口升级飞控固件的办法。当前市面上主流飞控都是DFU升级,我之前做过的项目中也有使用dfu升级固件的,但都是使用Dfuse demo工具升级的【如下图所示】。升级使用的文件后缀也是.dfu。所以我就好奇,为什么bf软件使用DFU的方式升级,使用的却是hex文件?没想...
2022-02-10 19:15:39
3407
原创 关于STM32 DFU模式【飞控升级】
飞控大多数都用的STM32的芯片。我个人在生活中做过的开发任务的下载方式:通过SWD(Jlink)下载、ISP、DFU升级。但是任务中经常使用的是DfuSe Demo这个工具。先让设备进DFU然后通过软件Choose一个dfu文件就可以升级了。==========================分割线==================================但是刚刚看BF程序的时候,突然想起来BF软件给飞控升级用的也是DFU模式。但是官网上给出的升级文件却是HEX格式的。.
2021-12-01 17:46:29
4708
原创 瑞萨RX72M E2Studio开发笔记2 输出PWM
上一篇文章记录了 创建工程以及控制IO。接下来试一下输出指定频率以及占空比的PWM。官网下载E2Studio IDE。使用瑞萨E2 Lite仿真器进行开发。RSK+RX72M评估版。这里接着上次的工程继续,不重新建立工程。==============================分割线=============================== 首先增加PWM的组件:下一步之后:选择PWM mode 2。 然后选择合适的时钟,点击完成首先...
2021-10-22 16:23:46
2309
2
原创 瑞萨RX72M E2Studio开发笔记 GPIO输入输出
官网下载E2Studio IDE。使用瑞萨E2 Lite仿真器进行开发。RSK+RX72M评估版。新建项目选择新建工程的模板:选择要使用的芯片:下一步之后勾选:Smart Configurator,然后点击完成。============================完成项目创建=============================新增组件 :PORT 可控制引脚按照图中所示 添加组件之后 ,选择要使用的...
2021-10-21 12:34:01
2758
原创 ROS学习笔记1
个人学习笔记:当做备忘录来用的。非教程常用命令:// 使用madir创建文件 -p 可以同时创建子文件夹ubantu18@ubuntu:~/Desktop/Learn_ROS$ mkdir -p helloWorld/src// 进入刚刚创建的工作目录 在scr上层文件夹中,初始化工作空间ubantu18@ubuntu:~/Desktop/Learn_ROS/helloWorld$ catkin_make// 在src文件夹下 输入下面命令, 创建ROS包并添加依赖。/
2021-09-12 15:08:21
172
原创 STM32 SPI+DMA驱动WS2812
【举报再看养成习惯,噢 不对,点赞再看养成习惯。感谢支持】开头不多叨叨,直接进入主题:WS2812的驱动原理:首先明白高低电平的表示方法:低电平(0 code): 0.35us的高电平+0.8us的低电平高电平(1 code):0.7us的高电平+0.6us的低电平之前有一期使用PWM+DMA 使用Dshot协议驱动电调的文章,里面表示高低电平也是这种方式。==========================================================
2021-09-07 15:21:02
14384
4
TMC4671 驱动中文手册,机器翻译的(介意勿下),比纯英文好理解
2025-01-18
AD7172连续读取代码,方便移植、根据官方代码改来的 非常适合STM32HAL库,使用简单
2023-07-29
用STM32内部Flash 虚拟成U盘、然后进行IAP升级
2022-10-27
STM32F103VE DFU 移植、cubemx + MDK环境
2022-10-22
EtherCAT Slave Stack Code Tool 512.zip
2021-11-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅