登录社区云,与社区用户共同成长
邀请您加入社区
有效值为 "on"(开)、"off"(关)和 "keep"(保持)。如果 LED 已经处于开启或关闭状态,并且 default-state 属性设置为相同的值,则不应产生导致 LED 瞬间关闭(或开启)的毛刺(glitch)。混杂设备(Misc Device)通常用于那些主设备号(Major Number)统一为 10,但拥有不同次设备号(Minor Number)的小型、简单的硬件驱动。例如:如
结合智能化工具学习教材,尤其针对晦涩内容,可通过针对性交互实现高效突破。以Arduino Mega 2560为例,利用其4路硬件串口、54个数字引脚与16路模拟输入等丰富资源,可构建多设备协同实验环境。通过智能编程工具(如IDE、仿真软件)实时调试代码、可视化信号波形,将抽象原理具象化。例如,用Serial1/2/3并行连接蓝牙、GPS、WiFi模块,避免冲突,提升系统级理解。智能化工具辅助下,复
本实验基于STM32MP157A开发板,实现LED驱动的两个版本:寄存器直控(led.c)与自动创建设备文件(mdevled.c)。前者手动通过mknod建立设备文件,后者使用alloc_chrdev_region、cdev_add、class_create和device_create实现自动注册。两版均通过BSRR寄存器控制PZ5引脚,写入1亮灯、0灭灯。测试程序ledApp统一接口,验证驱动功
本实验以STM32MP157A开发板为例,详解GPIO寄存器控制原理。GPIO是外设操作的基础,其输入/输出、复用等功能均由寄存器配置决定。通过分析七组核心寄存器(MODER、OTYPER、OSPEEDR、PUPDR、IDR、ODR、BSRR),掌握引脚模式设置与电平控制方法。结合原理图,明确三颗绿色LED连接于GPIOZ的PZ5/PZ6/PZ7,采用高电平点亮(正逻辑)。实验确立“读写内存地址即
通过内核文档可以知道,SysTick 定时器有两个时钟源:一个是内部时钟 FCLK,也就是 MCU 的自由运行时钟,在 STM32F407ZET6 中为 168MHz;在 MCU 时钟系统中,外部晶振常作为高速外部时钟(HSE)输入,而负载电容直接决定晶振能否稳定起振以及实际振荡频率。实际调试时,建议使用频率计观测晶振输出频率:若实测频率偏正,可适当增大负载电容;若偏负,则适当减小负载电容,最终以
有机发光二极管OLED硬件电路:4针脚的右边两个针脚提供电源,剩下两个是I2C通信引脚,这里会使用GPIO口模拟I2C通信,因此可以接任意GPIO口。7针脚也同理,两个供电,其余是SPI通信引脚,如果是GPIO口模拟SPI通信,则可以接任意GPIOEXIT外部中断EXIT可以检测指定的GPIO口的电平变化,当指定的GPIO口发生电平变化时,EXIT立即向NVIC发送中断申请,经过NVIC裁定后即可
本文系统讲解I2C协议原理与STM32实战应用,涵盖物理层特性、时序结构、应答机制及读写流程。对比硬件与软件模拟I2C优劣,结合AT24C02 EEPROM实例,详述初始化、读写操作及主函数测试。重点解析常见问题如总线卡死、ACK丢失,并提供逻辑分析仪调试方法,助力开发者高效掌握I2C通信技术。
本文系统讲解STM32 ADC数据采集全流程,涵盖基础原理、硬件结构、CubeMX配置及HAL库实现。重点介绍单次/连续转换、DMA多通道循环采集(支持3通道交错数据处理),并通过电压换算、中值滤波等方法提升精度与稳定性,适用于温度、电压等模拟信号的高可靠采集。
本文基于Wokwi仿真平台,系统梳理了从Arduino MEGA到ESP32的嵌入式开发入门路径。通过“理论—仿真—实物”三步法,以blink_mega、led_bar_pot_mega等项目打基础,掌握数字/模拟I/O与串口通信;进阶至DHT、MQ2传感器应用;再转向ESP32的WiFi、MQTT及WS2812灯带控制,实现IoT与复杂时序编程;最终结合步进电机与舵机项目,深入理解电气控制逻辑。
本项目合集系统讲解ESP32与舵机的多模式控制,涵盖从单舵机基础控制到无线同步、卡尔曼滤波云台及Python头部追踪等高级应用。通过I2C、ESP-NOW、串口通信及PCA9685扩展驱动,结合MPU6050姿态传感器与MediaPipe计算机视觉,实现精准、低延迟的舵机控制。内容包含硬件连接、核心代码、平滑滤波与死区优化,适用于嵌入式学习与智能交互项目开发。
本文详解STM32通用定时器TIM2~5的核心功能,对比基础定时器,突出其支持向上/向下/中央对齐计数、4个独立通道、多种时钟源及输入输出能力。重点解析输出比较机制,阐述PWM频率(由ARR/PSC决定)与占空比(由CCR决定)的计算关系,并通过“7步配置法”实现精准波形输出。强调“软件可调占空比”特性:仅需修改CCR,无需停机,硬件自动生效。深入剖析“时基、比较、DMA、中断”四模块协同机制,结
本文围绕 PWM(脉冲宽度调制)展开,从概念理解、主要参数到定时器输出比较模块的 PWM 产生机制,再到实验硬件(舵机与电机)的选型与电压考量,系统梳理了 PWM 在嵌入式控制中的核心原理与典型应用。文章以通用定时器为重点,讲解输出比较通路、输出模式控制器及 PWM 模式 1 的工作机制,并简要介绍高级定时器的死区生成电路;最后通过舵机与电机两个实验,对比“控制”与“驱动”两类模块的差异,帮助读者
本文通过STM32CubeMX配置时钟树,利用外部8MHz晶振经PLL倍频至72MHz系统时钟,实现对LED闪烁速度的控制。采用CPU_Delay()软件延时函数,其执行时间受主频影响,从而直观展示时钟配置对系统行为的影响。结合GPIO初始化与寄存器操作,详细解析了时钟使能、分频配置及硬件寄存器映射机制,强调外设需开启时钟方可工作,并指出软件延时的局限性。最终实现PF8引脚输出方波,验证时钟树配置
ESP Mini App Platform 0.4.9 Beta 已经把系统界面、WebAssembly 运行环境、应用包、权限与私有数据、在线目录和系统更新连成一条使用路径。本文介绍这次发布交付了什么、系统与应用如何分层、首次安装与 OTA 的区别,以及目前仅直接支持 ESP-Mosaico/ESP32-S31 的硬件边界。本文是版本发布说明,不是烧录命令教程。
芯片看不见、听不到,也不直接知道前方有什么。地面的明暗要经过什么才算变成程序能比较的数字,同一块灰度模块又为什么有时给结论、有时把差别也留下?
本文基于ESP32-S3实现Wi-Fi与MQTT通信,构建物联网远程控制闭环。ESP32连接Wi-Fi并自动重连,同时作为MQTT发布者与订阅者,向esp32/test发布“hello esp32”,订阅esp32/led主题。接收“on”指令时点亮GPIO4连接的LED,其余内容则熄灭。系统通过broker.emqx.io:1883完成数据流转,验证了从设备联网、消息通信到远程控制的完整链路,实
系统以STM32F103单片机为核心控制器,通过集成按键模块、XL01心率检测模块、DS18B20体温检测模块、OLED液晶显示模块、电机调速模块以及HC06蓝牙通信模块,实现了对跑步机的智能化控制。HC06蓝牙通信模块:实现跑步机与手机APP之间的通信,通过蓝牙将监测到的数据传输到手机上,同时接收手机端发送的指令,实现远程控制和数据传输。电机调速模块:控制跑步机电机的转速,根据用户设定的速度调整
1.光敏电阻传感器2.热敏电阻传感器3.对射式红外传感器4.反射式红外传感器他们通过传感器原件(光敏电阻/热敏电阻/红外接收管)的电阻会随着外界影响而变化,通过与定值电阻分压即可得到模拟电压输出,再通过电压比较器进行二值化即可得到数字电压输出模拟电压输出就是图中的1,通过N1和R1进行电阻分压输出模拟信号(两个分压可以类比上拉下拉电阻)。数字输出就是图中的2,通过对AO二值化输出(运算放大器当比较
GPIO(General Purpose Input/Output,通用输入输出)是微控制器、单片机以及树莓派等开发板上普遍提供的一类可编程引脚。我们可以通过软件把这些引脚配置为输入或输出,用来读取外部信号,或者控制外部设备。简单来说,GPIO就是一块开发板与外界硬件“打交道”的通道:既能感知外部世界发生的变化(输入),也能对外部世界产生影响(输出)。
本文系统介绍STM32与传感器通信的常见方式(GPIO、I2C、SPI、单总线),并对比典型传感器(如DS18B20、SHT30、MPU6050)的选型参数。以DS18B20为例,提供基于HAL库的完整驱动代码,涵盖复位、读写时序及温度采集逻辑,帮助开发者快速实现传感器数据采集,适用于温湿度监测、姿态解算等嵌入式项目。
而从A到C8T6使用的是一个串口接口,从C8T6到B也是一个串口接口,所以需要借助于C8T6这个媒介,B设备运行状态也可以通过串口传回给C8T6,C8T6将处理好的信息给上位机去显示,这相当于拥有两个串口。在上位机中如果连接的是串口1,上位机发送数据,然后在代码中,将上位机发送的数据用数据保存起来,然后在串口1执行任务函数中,调用发送数据的函数,函数的第一个参数更改为串口3,这样就可以将数据发送到
如果想让I2C输出1或者高电平,只需要让N-MOS管断开,SDA就会上拉到VDD,输出高电平。如果想让I2C输出1或者高电平,只需要让N-MOS管闭合,SDA就会下接入VSS,输出低电平。在I2C复用GPIO的时候,使用开漏模式的时候,N-MOS管默认处于断开状态,它是一种串行、同步、半双工、两线制的通信总线,一根总线上可以挂多个设备。但是开漏模式下面,外部有电阻,防止可以外部的VDD和内部的GE
操作STM32的GPIO的三个步骤:1.使用RCC开启GPIO时钟。2.使用GPIO_Init函数初始化GPIO3.使用输入或输出函数控制GPIO总共用到RCC与GPIO两个外设。
CAN总线不是万能方案——它需要每个帧不超过8字节(CAN FD可到64字节),不适合传视频或文件。但在实时性、可靠性、抗干扰性要求高的工业控制场景里,它仍然是性价比最高的选择。掌握三个要点就能覆盖80%的工程需求:一是波特率采样点设在75%~87.5%,二是总线两端必须挂120Ω终端电阻,三是用HAL库时先开回环模式验证软件再切正常模式。把这三点做到位,CAN总线调试基本不会卡太久。关于CAN总
本系统以STM32为核心,集成ST-03S语音识别、ATGM336H GPS定位和ML307R 4G通信三大升级模块,实现了独居老人紧急呼救的完整解决方案。相比原版方案,GPS模块的加入使报警信息从“发生了什么”升级为“在哪里发生了什么”,家属收到求救后可直接导航前往,显著提升了救援效率。双模触发机制:ST-03S离线语音识别+一键按键,覆盖主动呼救场景,无需网络即可识别自动检测能力:跌倒检测和生
本文详解STM32驱动OLED屏幕的完整流程,基于STM32F103C8T6与SSD1306芯片,通过I2C协议实现。内容涵盖硬件接线、I2C初始化、命令/数据传输、屏幕初始化及显示字符、字符串与图形。提供标准库与HAL库双版本代码,支持0.96寸OLED显示,可直接移植使用,适合嵌入式开发入门与项目实战。
二值信号量 vs 计数信号量:二值只有 0/1,适合 "中断 → 任务" 事件同步;计数信号量可累计 N 次事件。信号量 vs 队列:信号量只通知不带数据;队列拷贝传递数据,可缓存多条。中断上下文规则:禁止osDelay、禁止普通,只能用xxxFromISR家族,配合。是一次性的:每收满指定字节数就自动关闭 RXNE 中断,必须在回调 / 任务里重新调用才能继续收。句柄命名规则:CubeMX 生成
STM32C5以Cortex-M33内核、144MHz主频及丰富外设(如FDCAN、USB、CORDIC)刷新入门级MCU性能标杆,性价比突出。配套CubeMX2采用HAL2/LL驱动与CMake工程结构,代码组织更清晰但需适应新流程,虽无直接MDK5支持,但通过KeilStudio等路径仍可兼容。对老用户而言,迁移成本存在,但学习价值仍在。未来三年内,F103仍具教学意义,而C5有望成为新一代入
系统采用STM32单片机作为主控制器,通过DHT11传感器、红外传感器、DS1302时钟芯片实现药盒存储环境温湿度、药品余量、实时时间的数据采集,采集数据均可通过OLED12864液晶实时显示。用户可通过按键模块设置定时吃药时间和药品保质期时间,当到达设定的吃药时间时,蜂鸣器进行报警提示同时LED灯亮起,系统通过GSM模块向用户手机端发送短信提示用户及时吃药。当用户吃完药后,按下按键LED灯熄灭。
兼容芯片识别:遇到“device mismatch”且配置无误时,大概率是买到了国产兼容芯片(如中科芯、航顺等)。取消Pack里的Enable勾选是最直接的解决方案。希望这篇踩坑记录能帮你少走弯路!
本系统以STM32F103C8T6为主控,MAX30102采集心率血氧数据,OLED实时显示测量信息。按键可设置心率、血氧上下限并保存至FLASH,指标超出范围时触发蜂鸣器与LED声光报警。设备通过HC-05蓝牙连接手机APP,可上传实时心率血氧数据,也能在APP端直接修改各项监测阈值。
本文为教学接线与设计预期,尚无实物测量记录;使用 STM32F030F4P6 TSSOP20;芯片接上三点三伏,为什么电源脚旁还要放电容?芯片工作时会突然多取电流;长走线有阻抗,脚边电压可能瞬时变化。去耦电容不是另一块电池,它帮忙稳住短时变化;小熊从远处水站拿水,长管像供电走线;它把一个小水杯放在工位旁。芯片突然要水时,小熊先举需求旗,小杯就近倒出一点;水站再经长管把杯补满。小杯对应电容,旗对应瞬
一种控制方式是通过输出寄存器来设置(普通的IO),另一种是通过片上外设进行控制。两种控制方式通过数据选择器接到了输出控制部分。如果只想要对输出寄存器的某一位进行设置,因为寄存器控制16个端口。并且只能进行整体操作,就只能用位于位或操作较为繁琐。而位设置/位清除寄存器可以直接对想要操作的端口置1或清0.如果想对某一位进行置1操作,在位设置寄存器的对应位置写1.想对某一位进行清0操作,在位清除寄存器的
本文详解STM32基础定时器TIM6/TIM7的原理与寄存器配置,将其类比为“闹钟”:通过时钟源与计数器量化时间,设定自动重装载寄存器(ARR)定义超时时间,当计数器溢出(CNT=ARR+1)时触发中断或事件。核心机制包括影子寄存器保障参数更新的原子性、预分频器调节分辨率、以及溢出后自动重装与清零。文章还系统梳理了时钟路径、初始化流程及关键寄存器作用,强调硬件定时器相比软件延时在精准性、并发性与C
堆:手动申请和释放,
本文基于STM32F103C8T6开发板,实现串口与RS485通信功能。通过配置USART1和RS485接口,完成数据收发及Modbus协议解析,支持数据回传、状态检测与定时上报。系统集成按键、传感器及组号/设备号读取功能,结合CAN通信实现设备心跳与初始化,具备良好的实时性与稳定性,适用于工业控制场景的多节点通信测试。
针对 STM32 HAL 库 GPIO,本文追踪`HAL_GPIO_Init`底层源码,解析 CRL、CRH 寄存器工作方式,区分配置值与掩码模板,深度剖析`MODIFY_REG`宏的工作机制,理清多比特寄存器域 “读‑改‑写” 的设计思想,破除把 HAL 库当作黑盒的开发习惯,为本系列后续外设源码学习打好基础。
本文介绍使用 Zig 原生工具链开发 STM32 嵌入式应用的完整流程。通过克隆 ZigEmbeddedGroup/stmicro-stm32 仓库,无需安装 ARM GCC,即可编译官方示例(如 blink),生成 .elf 与 .bin 固件,并通过 ST-Link 或 OpenOCD 烧录。支持自定义工程构建,利用 build.zig 配置目标架构、链接脚本、启动文件及优化选项。调试可结合
本文详解Zig在STM32/GD32等Cortex-M MCU上的嵌入式开发,强调build.zig与芯片包、链接脚本、启动文件协同决定底层依赖。通过目标三元组(如freestanding)、linkLibC()开关、addAssemblyFile和setLinkerScript等配置,可精准控制是否使用C库、启动文件及内存布局。推荐纯裸机方案:不启用linkLibC(),手动管理启动文件与链接脚
本项目以 ESP32-S3 为主控、以 60GHz 毫米波雷达为核心,完整实现了一台非接触式睡眠监护仪。设备能够在不接触人体、不采集影像的前提下,监测呼吸、心率、清醒/浅睡/深睡时长、睡眠评分、翻身与离床等 17 项参数;同时集成了 SGP30 空气质量检测、"环境光+人体存在"双条件自动起夜灯、离线语音控制、OLED 本地显示与 AP 网页配网等功能,并通过 MQTT 接入华为云,配合 Qt 上
本文分享一套面向STM32新手的外设简易封装库,涵盖GPIO、串口、输入捕获、编码器、ADC、DMA等常用功能,通过函数封装实现“填参数+调用”即可完成配置,无需关注寄存器细节,有效提升开发效率与代码可读性。配套工程代码已上传夸克网盘,支持快速上手,助力构建个人嵌入式开发工具箱。
参见下图的DMA1请求映像。,这里以大容量型号STM32F103Z8T6为例,2个DMA控制器有12个通道(DMA1有7个通道,DMA2有5个通道),每个通道专门用来管理来自于一个或多个外设对存储器访问的请求。DMA具有12个独立可编程的通道,其中 DMA1有7个通道,DMA2有5个通道,每个通道对应不同的外设的DMA请求。如果外设要想通过DMA来传输数据,必须先给DMA控制器发送DMA请求,DM
其中boot的起始地址为:0x8000000,大小为0x20000 (128KB),app地址为:0x8002000,大小为0xE000,(56KB),会覆盖,但实际运行是没有问题的,最终排查之后,得出结论,虽然boot分配大小为128KB,但实。二、分析一下,void JumpToApp(void)函数,首先定义一个跳转函数,这里的掩码为:0x2FFE0000,对于STM32F407,其SRAM
Start工程分组中的startup_stm32f10x_md.s是启动文件,作用调用SystemInit(初始化CPU,配置好闪存接口和时钟),然后调用mian函数将程序交给main函数。工程里建立对应的Start,User,Library同名称分组,然后将工程文件夹内的文件夹添加到工程分组中。并且Start里也设置了其他中断,达到触发条件时会执行,这些中断函数在User中的stm32f10x-
官方并没有披露,推测是在控制地址总线的时候他的读写方向不一致,就把读写两个不同的方向看成两个不同的寄存器了。在参考手册内部有USART内部的图,但是过于复杂,先看简化的图,搞懂基本原理。这个数据寄存器有两个,一个是TDR一个是RDR那他们为什么指向同一块物理地址?要等TXE决定了能不能把数据是否为空,TC决定了数据是否发完。CPU是怎么控制USART的?——控制USART内部的寄存器。万一发送移位