登录社区云,与社区用户共同成长
邀请您加入社区
本文介绍了星闪开发环境的搭建流程。首先需要安装魔改版VSCode的HiSparkStudio IDE,从Gitee获取SDK并注意存放路径。创建工程时需根据芯片型号选择对应选项。编译例程时需配置Python 3.11.4环境并安装必要库,以LED灯例程演示了Kconfig配置方法。最后介绍了固件烧录步骤,包括串口驱动安装、参数设置和烧录操作。整个过程涵盖了从环境配置到程序烧录的完整开发流程,成功烧
SDL3— 提供图形窗口、事件处理(鼠标/键盘)能力,模拟嵌入式 LCD 显示屏FreeRTOS— 实时操作系统内核,在一个独立的 Windows 线程中启动调度器,运行 RTOS 任务LVGL— 轻量级嵌入式 GUI 库,通过 SDL3 渲染显示Nimmake— Python 编写的构建工具,自动化管理编译、链接与依赖通过这种方式,你可以在没有硬件开发板的情况下,在 PC 上直接开发、调试和验证
本文基于STM32F407ZGT6芯片,配置时钟至168MHz,使用HAL库生成初始化代码。设计双向链表结构用于任务管理,实现链表初始化与节点插入功能。在此基础上,构建轻量级实时操作系统内核:定义任务控制块(TCB),静态创建任务并初始化堆栈,通过伪造中断现场(设置PC、LR、xPSR等寄存器值)实现任务切换。关键在于利用PendSV异常完成上下文切换,确保任务调度的可靠性与高效性。
STM32开发常用组合为STM32CubeMX与Keil5。CubeMX作为图形化配置工具,可自动生成HAL库初始化代码,实现引脚分配、时钟配置等底层设置;Keil5则用于编写业务逻辑、编译调试及烧录程序。二者分工明确:前者“画配置、打地基”,后者“写代码、盖房子”。该组合降低开发门槛,提升效率,广泛应用于教学、竞赛(如RoboMaster)及产品开发。安装教程详见飞书文档,涵盖环境搭建至校验全流
本文总结了嵌入式软件开发的核心技术栈,涵盖9个方面:开发基础、MCU开发、外设开发、毫米波雷达开发、传感器、外部芯片开发、RTOS、Linux、Qt和LVGL、通讯协议、物联网、DSP及FatFS文件系统。
本节介绍Claude Code扩展的安装方法与基本使用方式。在实际STM32工程开发中,开发者往往需要同时查看文件、编辑代码、运行构建命令并检查修改差异。将Claude Code集成到VS Code中可以将AI交互与工程开发整合在同一界面,减少在终端和编辑器之间的切换。
本文系统阐述了SRAM内存布局(.data、.bss、heap、stack等)与FreeRTOS任务创建流程,解析了五种堆管理机制特性。结合STM32平台,通过串口实现动态内存分配与按键事件处理,演示了pvPortMalloc/vPortFree的使用及多任务协同机制,验证了FreeRTOS在嵌入式系统中对内存与外设的高效管理能力。
遇到“软复位无效、只有断电才能恢复”的现象,第一时间怀疑 I2C/SPI 外设器件——它们有独立供电,不受 MCU 复位影响。阿波罗板子的 LCD RST 走 PCF8574 是个经典坑,其他开发板可能不同。不是所有 I2C 器件都支持连续读。24C02 EEPROM 支持,AP3216C 不支持。遇到0xFF连续一片,先怀疑连续读。0xFF是 SDA 上拉后的空闲电平,说明从机松手了。多个独立事
这一篇想聊聊我积累英文单词的起点:最开始是硬啃 STM32F407 编程手册,一边查寄存器、一边记下那些反复出现的芯片和外设词汇;后来进入工作,又陆续遇到协议报文、硬件术语、调试工具等杂七杂八的英文。从手册到工作,词汇量就是这样一点点攒起来的,所以这篇会按「手册积累」和「工作积累」两部分来整理,后续也会持续更新。
本文以STM32F103裸机工程为例,详解CMake全流程:通过cmake -Bbuild -G Ninja配置阶段生成build.ninja,再用cmake --build build构建,最终产出.elf、.hex、.bin和.map文件。核心在于顶层创建空目标,各子目录通过target_sources和target_include_directories挂载代码与头文件,工具链文件(如cor
本文聚焦STM32F103上TinyML模型的静态部署,通过Edge Impulse生成C++模型包,解决Semihosting卡死、DSP Heap不足、TFLite依赖过重及HardFault等问题,实现模型在有限SRAM/Flash下的稳定运行。强调从“模型可跑”到“嵌入式可靠部署”的工程思维转变,完成端侧推理关键一步,为后续实时手势识别奠定基础。
本文记录STM32 TinyML手势识别项目从V1到V2的模型迭代:基于300维三轴加速度数据,通过Edge Impulse进行频域特征提取,优化特征处理时间由11ms降至2ms,显著提升特征聚类效果。尽管当前验证集准确率达100%,但强调其不等于泛化能力,需警惕过拟合。本篇核心在于建立可对比的baseline,明确特征工程对端侧性能的关键影响,为后续模型部署与数据扩充奠定基础。
volatileuint16_t0x60000000volatileuint16_t0x60080000,否则没有 CMake。路径全部纯英文,不能有中文和空格。FMC 的 Memory type 要选 LCD Interface,不是 SRAM。FreeRTOS 的时基要改成 TIM6,把 SysTick 让给 RTOS。正点原子的不能直接用,会和 CubeMX 和 FreeRTOS 打架。LC
本文以 ESP32-C3 向 160×80 屏幕传输 RGB565 图像为例,完整讲解 25.6KB 帧大小计算、CDX1 帧头、512 字节分块写入、CRC32 校验、接收状态机与 OK FRAME 应答,并给出串口占用、尺寸错误和 CRC 失败的排查方法。
本文用 ESP32-C3 SuperMini、0.96 英寸 ST7735S 和 Python 实现一个 160×80 Codex 桌面终端,覆盖接线、PlatformIO 配置、RGB565 转换、CRC32 帧协议、512 字节分块、中文分页、自动选串口、单元测试及实机验证。
硬件故障排查案例ESP32-C3COM232026-09-15。
【代码】树莓派Pico的pio例子。
本文记录了RT-Thread系统在加入新函数后出现无法启动的hard fault问题的排查过程。现象表现为加入新函数后系统崩溃,报错信息显示bus fault。通过逐步排查发现并非数组越界或栈溢出导致,最终定位到链接脚本的问题。详细调试过程包括检查代码、验证栈溢出假设、分析链接脚本的内存布局以及跟踪系统启动流程。特别关注了RT-Thread的栈管理机制,通过添加调试打印获取实时栈信息来辅助分析。结
实际是因为在path里设置了该C文件的头文件路径导致可以引用header但没有C文件实际定义,最后在项目中加入该C文件就好了。编译时即使引入header,函数依旧提示undefined symbol,并且不能跳转到错误位置,但出错函数可以跳转。
运用esp32点亮一颗LED灯并实现跑马灯效果
硬件I2C学习记录
DSP (Diagnostic Service Processing)子模块:DSP子模块处理实际的诊断服务(分别为子服务)请求。DSD子模块负责检查传入诊断请求的有效性(诊断会话/安全访问级别/应用程序权限的验证),并跟踪服务请求执行的进度。DSL子模块负责保证诊断请求和响应的数据流,监督和保证诊断协议的定时,管理诊断状态(特别是诊断会话和安全)。提示:诊断模块是一个独立的模块,是在pdur模块
【代码】arduino之 OneButton 库。
一种RTOS的总线框架机制,基于消息队列来实现。
基于Proteus仿真stm32—流水灯—最易上手教程
Raspberry Pi Pico 是开发板中的现代王红(“网红”,改王红吧、发文助手说不正规),网上涉及它的内容非常多,原始材料可到RaspberryPI站点上看,从入门到精通应有尽有,完全开源,不用操心某些站点又是入会又是收费的下载点儿资料。开发软件主要是MicroPython和C/C++,板上有个BOOTSEL钮,把它按住了然后插上micro-usb线,Windows 就增加虚拟串口,国内本
树莓派Pico移植官方FreeRTOS操作系统,并调用SMP功能。
最近在debug在线调试中遇到了一个问题,就是在watch窗口中添加了一个变量或者数组,数组不能展开,value显示cannot evaluate。但是有些时候数组能展开,而且能显示值。 进一步查阅资料知道了产生几个问题的原因。 (对于如何添加变量那些可以参考我最后贴上的文章)目录一.显示cannot evaluate的问题方案1(对局部变量):方案2(对静态变量):二.数组不能展开的问题1.输入
U-boot移植uboot实际上就是一个裸机程序,但它是用来引导linux内核启动的,就像电脑上的bios。本文只要是记录利用NXP官方的uboot进行改造,适配正点原子IMX6ULL阿尔法开发板的过程涉及到的文件(可能不全)/home/swiler/uboot_official/uboot-imx-rel_imx_4.1.15_2.1.0_ga_alientek/configs/mx6ull_1
之前一直对stm32的上电后的system tick timer时钟配置存疑,为什么定时时间不随频率改变总能保持1ms,cude生成的两个函数HAL_Init()、SystemClock_Config()具体做了什么。趁着空闲把困惑已久又不起眼的问题解答了。首先分析main中第一个调用的函数HAL_Init():HAL_StatusTypeDef HAL_Init(void){/* Configu
【C语言const关键字详解】本文全面解析const关键字的底层原理和实战应用。const是编译期只读约束,不同于#define的真正常量。核心用法包括:修饰变量(创建只读变量)、指针(区分const int和intconst)、函数参数(保护实参不被修改)及返回值。面试常考点涉及const与#define的区别、指针修饰的三种写法差异,以及如何(但不建议)通过指针绕过const限制。常见误区包括
CCR Capture/Compare Register 捕获/比较寄存器,用来和CNT做比较,或者存储捕获到的CNT值。- 比如第一次捕获到上升沿时CCR1=100,第二次捕获到上升沿时CCR1=500,那么周期就是500-100=400个时钟周期。- CNT:从0开始,每来一个定时器时钟就+1,直到达到ARR的值后自动清零,循环往复。- CCR是“静态的参考值”,由你设定,用来和CNT比较或捕
摘要:在使用esp_lvgl_port组件时出现颜色显示错误问题,红色乐鑫logo显示为黄色。通过修改RGB颜色顺序配置为LCD_RGB_ENDIAN_RGB解决颜色错乱问题。同时设置颜色反转功能,并调整X轴偏移量(如34像素)来修正显示不全和花屏问题。偏移量需根据屏幕实际分辨率与驱动芯片支持的最大逻辑分辨率计算得出,如ST7789芯片支持240像素时,172像素宽度的屏幕偏移量应为(240-17
1、工作原理每颗ws2812除了三原色LED外还有一颗控制3个LED亮度的主控芯片,主控芯片+LED*3=ws2812。主控芯片产生3路PWM分别控制3个灯珠,占空比通过内部锁存器来调整。比如第一个锁存器控制G,那么输入0就是设置占空比为0,输入255就是设置占空比为100,此时绿色灯珠最亮,输入128就是设置占空比为50,此时绿灯珠半亮。其他两个灯珠也是这样控制。通过三个字节来分别设置3个灯珠的
3. 应用适配:5°窄视场角适合远距离单点测温场景,如体温测量(MS型号选择“腕温”模式)工业焊接点检测、设备高温部件监测、10米级远距离工业测温等。2. 响应特性:在0°(正前方)时振幅达到峰值(100%),偏离中心角度后信号快速衰减,说明该传感器对正前方目标的测温精度最高,抗环境干扰能力强。1. 视场角范围:从曲线的半高宽(振幅50%处)来看,该型号视场角约为5°(横轴-2.5°至+2.5°区
由于PT100的电阻值变化很小(约0.385Ω/℃),导线本身的电阻(通常为几欧姆)会显著干扰测量结果。在三线制中,两根测量线分别接入电桥的两个相邻桥臂,当导线电阻相等时,其影响会相互抵消,从而确保测量的准确性。相比两线制,三线制能有效补偿导线电阻和接触电阻带来的误差,特别适用于长距离传输或高精度测温场景,虽然增加了布线复杂度,但换来了测量精度的显著提升。pt100的工作原理:当PT100在0摄氏
摘要 该电路展示了Raspberry Pi Pico与74HC595移位寄存器驱动LED条形图的连接方案。电路核心由Pico微控制器通过GPIO引脚(DS_PIN=2, SHCP_PIN=3, STCP_PIN=4)控制74HC595,后者连接10段绿色LED条形图。C程序实现了串行数据发送功能,通过逐位移位方式将8位数据写入74HC595,实现LED模式循环显示。电路包含电源(VCC)和接地(G
可以先看一下上面的文章熟悉一下,代码都是一样的。
本文就做一个STM32智能感应垃圾桶套件模型,采用STM32F103C8T6单片机+舵机+超声波模块+红外模块+语音,实现有物体靠近,垃圾桶自动开启,没有物体靠近,一定时间后自动合上,并实现语音播报以及满溢检测。
QMI8658是一款6轴/9轴惯性测量单元(IMU)传感器,支持±16g加速度计和±2000dps陀螺仪,适用于智能穿戴、VR/AR等应用。文章介绍了如何通过ESP32的I2C接口驱动QMI8658,包括I2C初始化、寄存器读写、传感器初始化以及加速度数据读取的实现方法。重点展示了使用ESP-IDF框架编写I2C驱动程序的过程,包括参数配置、设备安装和读写操作的具体代码实现,为开发基于ESP32和
本文详细介绍了基于新唐NUC980开发板的UBI文件系统构建流程。首先从官网下载5.10内核的Buildroot代码,选择nuvoton_nuc980_eth2uart_defconfig配置进行初始镜像构建。重点说明了修改Buildroot和内核配置的关键步骤,包括启用UBIFS支持、调整mdev挂载设置和修改设备树文件。最后介绍了固件烧录方法及启动参数设置,并附上环境变量配置示例。整个过程在U
在使用STM32F407VET与GY-33模块进行串口通信时,遇到了接收数据乱码的问题。通过串口调试助手发现,无论发送什么数据,接收到的都是中文乱码或不相关的内容。尝试了中断和DMA方式,问题依旧。经过多次调试和更换配置,最终发现问题的根源在于时钟频率的不稳定。将高速时钟从外部晶振切换为内部时钟后,串口通信恢复正常,数据接收准确无误。这一经验表明,在串口通信中,时钟频率的稳定性对数据传输的准确性至
在用Proteus仿真初始化单总线读取dht11时,也就是这里DHT11_Init(),检测不到dht11。可能是单总线协议对us级时序要求十分严格(我用的系统滴答定时器延时的)。也可能我对Proteus不熟悉设置有问题,但是连接实物实验没有问题。实物跟仿真还是有差距的。需要源码的可以在我资源下载。// DHT11初始化检测// 传感器异常提示需要源码的可以在我资源下载。
include "am_mcu_apollo.h"// Apollo MCU 外设寄存器定义和HAL库#include "am_bsp.h"// 板级支持包(引脚定义、LED函数等)#include "am_util.h"// 通用工具函数(如printf重定向)//// 全局变量//// ADC设备句柄,用于操作ADC实例// ADC采样计数信号量(ISR与主程序同步)
SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线。四根通信线:SCK(Serial Clock串行时钟线)、MOSI(Master Output Slave Input主机输出从机输入,有些叫DI即data input)、MISO(Master Input Slave Output主机输入从机输出,有些叫DO即data output)、
rt-thread4.1.1在配置pwm以及在其它外设上是我用的比较顺利的版本,配置过程中基本上没什么报错,并且官方教程也都使用.
红线:电源线黑线:接地线黄线:转速信号线,通过引脚反馈的频率,再根据公式计算得出,这个需要自己去查询官方的手册灰线:转速控制线,通过PWM占空比设置转速。
mcu
——mcu
联系我们(工作时间:8:30-22:00)
400-660-0108 kefu@csdn.net