资讯动态

STM32 从 0 到 1 做智能家居(三):硬件接线与拨码开关

发布时间:2026/10/27 2:03:28 来源:尧图企业网站定制
文章目录一、接线前先立三条规矩二、电源与共地最容易被跳过的一节2.1 这个项目其实有三个电源域2.2 为什么必须共地2.3 建议加两颗电容三、引脚总表照抄即可四、逐个模块接线4.1 DHT11PB14.2 ENS160I2C34.3 风扇与加热片4.4 SG90 舵机PA04.5 HC-06 蓝牙4.6 ESP-12FWiFi五、拨码开关USART2 的二选一5.1 为什么必须用开关5.2 接线方式5.3 三条铁律六、上电前自检清单七、上电后的分步验证八、本章易错点总结九、小结与下一篇系列第三篇。前两篇把项目结构和开发环境搞定了这一篇开始真正碰硬件电源怎么分、每个模块接哪个脚、拨码开关怎么做二选一以及上电前必须检查的清单。这一篇的所有结论都是后面调 MQTT 时能救命的东西。接线错了代码写得再对也没用。一、接线前先立三条规矩我第一个项目烧掉过一块 ENS160原因很简单模块丝印上写着VCC我想当然接了 5V。它其实是 3.3V 器件。从那以后我给自己立了三条规矩建议你也照做永远断电接线。插拔杜邦线时先拔电源尤其是 I2C、串口这类信号线带电插拔可能瞬间打坏 IO。先接电源和地再接信号。电源错了会烧模块信号错了最多不通风险等级完全不同。每接完一个模块立刻做一次通断检查。不要等全部接完再查那时候你根本不知道是哪一根线的问题。再加一条很实用的习惯固定线色。颜色用途红5V橙 / 黄3.3V黑GND绿 / 蓝信号TX、RX、SDA、SCL、PWM线色乱了后面排查时你会盯着一堆一样的杜邦线发呆。二、电源与共地最容易被跳过的一节2.1 这个项目其实有三个电源域电源域给谁供电要求5V核心板、扩展板、加热片、风扇电流要够建议 2A 以上适配器3.3VSTM32 内核、DHT11、ENS160、ESP-12F、HC-06必须稳定ESP 单独一路更好独立 5VSG90 舵机独立电源只共地不共 3.3V最容易出事的是第三个舵机绝对不要从板子的 3.3V 取电。SG90 堵转电流能到 700mA 以上启动瞬间会把 3.3V 拉到 2V 多STM32 直接欠压复位。现象就是舵机一动板子重启很多人会误以为是程序跑飞了。2.2 为什么必须共地共地这三个字听起来像玄学其实很好理解电压是两点之间的水位差。如果两块板子的海平面GND不一样高同样的 3.3V 信号在对方眼里可能就是 1.8V 或者 5V。所以DHT11、ENS160、HC-06、ESP-12F、USB 转 TTL 的 GND全部要和 STM32 的 GND 连在一起舵机用独立 5V但它的 GND 也必须和 STM32 共地不要用一根很细很长的杜邦线当公共地大电流回流时会有压降表现就是时好时坏。2.3 建议加两颗电容如果你用的是自己搭的板子在两个位置各加一颗电容能省掉很多随机故障3.3V 和 GND 之间100µF 电解 0.1µF 陶瓷ESP-12F 的 3.3V 引脚附近再加一颗 100µF。ESP 在发射 WiFi 数据时电流是脉冲式的电源稍弱就会掉压重启。日志里看到反复打印ready十有八九是这个问题。三、引脚总表照抄即可把这张表打印出来放在手边。接线时以表为准不要凭记忆。功能引脚外设 / 模式备注调试串口 TXPA9USART1_TX (AF7)115200接 USB 转 TTL 的RX调试串口 RXPA10USART1_RX (AF7)接 USB 转 TTL 的TX蓝牙/WiFi TXPA2USART2_TX (AF7)经拨码开关选模块蓝牙/WiFi RXPA3USART2_RX (AF7)经拨码开关选模块语音模块预留PC6 / PC7USART6 (AF8)本项目未启用风扇PA6TIM3_CH1 PWM1kHzCCR 0~1000加热片PA7TIM3_CH2 PWM1kHzCCR 0~1000窗帘电机预留PB0TIM3_CH3 PWM本项目改用舵机舵机窗帘PA0TIM5_CH1 PWM50HzCCR 500~2000DHT11 数据PB1GPIO 开漏 / 输入切换建议 4.7k~10k 上拉ENS160 SCLPA8I2C3_SCL (AF4, 开漏)100kHzENS160 SDAPC9I2C3_SDA (AF4, 开漏)100kHz光照 ADC预留PC0ADC1_IN10本项目未启用KEY1PC2EXTI2下降沿上拉手动风扇KEY2PC3EXTI3下降沿上拉进/出手动模式KEY3PA1EXTI1下降沿上拉非手动自动手动窗帘KEY4PB10EXTI15_10下降沿上拉非手动远程/协议手动加热蓝牙复位PC1GPIO 输出上电置高调试 LEDPC13GPIO 输出串口发送完成翻转DHT11 LEDPA4GPIO 输出自动模式状态指示ENS160 LEDPB2GPIO 输出备用LED4PA5GPIO 输出备用关于AF7、AF4这是复用功能编号同一个引脚可以当普通 IO也可以交给串口/I2C 用。编号选错外设就是不出波形。这部分在 CubeMX 里点选即可不要手写。四、逐个模块接线4.1 DHT11PB1模块引脚接到VCC3.3V模块支持 3.3~5.5VDATAPB1GNDGND要点DATA 建议外接4.7k~10k 上拉到 3.3V。很多模块自带模块上没有就必须加否则读出来全是0xFF或校验和错误。线尽量短控制在 20cm 以内。线一长边沿变缓40µs 的采样点就采错位了。两次读取间隔至少 1 秒。DHT11 手册明确要求读太快会返回旧数据或直接失败。本项目代码里用DHT11_RETRY1、间隔 2 秒就是为了守这条。上电后等 1 秒再读让传感器稳定。4.2 ENS160I2C3模块引脚接到VCC3.3V绝对不能接 5VGNDGNDSCLPA8SDAPC9ADDR见下面说明要点地址由 ADDR 引脚决定ADDR 接低是0x52接高是0x53。本项目代码按7 位地址 0x53写HAL 内部左移后是0xA6。如果你的模块 ADDR 是悬空的读出来的地址可能时对时错。最稳的做法把 ADDR 明确接到 3.3V用 0x53或 GND用 0x52然后代码里同步改地址。I2C 是开漏总线必须有上拉电阻模块一般自带 4.7k 到 3.3V。没有上拉HAL_I2C_Mem_Read会一直返回超时扫描也扫不到任何设备。SCL/SDA 不要接反也不要和 5V 器件混在同一组 I2C 上。上电后 ENS160 需要预热前几分钟数据会偏高属正常现象。4.3 风扇与加热片信号接到风扇 PWMPA6扩展板 MOS 驱动输入加热 PWMPA7扩展板 MOS 驱动输入要点不要用 IO 直接驱动电机或加热片电流完全不够还会烧 IO。扩展板上已经有 MOS 管PA6/PA7 只负责给控制信号。风扇是感性负载驱动端最好有续流二极管否则断电瞬间的反电动势会打 MOS 管。加热片是纯阻性负载电流大供电线要粗不要用细杜邦线。加热片工作时会发烫不要贴着塑料外壳或杜邦线。风扇、加热的电源和 STM32 必须共地否则 PWM 信号没有参考电平表现为有时候转有时候不转。4.4 SG90 舵机PA0线色接到橙信号PA0红电源独立 5V棕地GND与 STM32 共地要点控制信号是50Hz PWM高电平 500~2000µs。本项目用 500µs 表示拉开、2000µs 表示关闭。超出 500~2000µs 的范围舵机会不响应甚至堵转。代码里如果算出负数或超过 2000先检查限幅。换独立电源时只把 GND 和板子连起来不要把 5V 接到板子的 5V 上除非你确认板子能承受反向灌流。舵机上电瞬间会抖一下这是正常的自检动作不代表程序有问题。舵机抖动、走到一半回弹基本都是供电不足在舵机电源附近并一颗470µF 以上电解电容会明显改善。不要用手硬拧舵机臂容易扫齿。4.5 HC-06 蓝牙模块引脚接到VCC5V 或 3.3V看模块丝印两种版本都有GNDGNDTXDPA3MCU 的 RXRXDPA2MCU 的 TX要点交叉接模块的 TX 接单片机的 RX模块的 RX 接单片机的 TX。接成 TX-TX 的典型现象是能发不能收串口日志里recv:永远是空的。默认波特率是9600 8N1不是 115200。这一点几乎每个人都踩过。手机配对密码一般是1234或0000。模块上的 LED快闪 未连接常亮 已连接。调试时先看灯比看代码快。HC-06 是经典蓝牙iPhone 连不上安卓需要支持 SPP 的串口助手 App。4.6 ESP-12FWiFi引脚接到说明3.3V3.3V≥500mA不要用 USB 转 TTL 的 3.3VGNDGND必须共地EN / CH_PD3.3V悬空不启动RST3.3V低电平复位GPIO03.3V拉低会进下载模式不能正常跑 ATGPIO15GND悬空可能启动失败TXDPA3交叉接RXDPA2交叉接要点ENCH_PD必须拉高这是新手第一大坑。悬空时模块电流极小串口一个字都没有看起来像模块坏了。裸模块的 GPIO15 必须接 GNDGPIO0 和 GPIO2 保持高电平才能从 Flash 正常启动 AT 固件。带底板NodeMCU 那种的模块一般已经处理好。供电必须 ≥500mA。用电脑 USB 转 TTL 的 3.3V 供电现象是日志里反复出现ready模块不停重启。ESP 刚上电时会先以74880波特率打印一段启动日志然后才切到115200的 AT 模式。所以刚上电看到乱码是正常的不要以为是波特率配错了。ESP 和蓝牙不能同时接在 PA2/PA3必须用拨码开关二选一。五、拨码开关USART2 的二选一5.1 为什么必须用开关STM32 只有一组 USART2PA2/PA3却要接两个模块。如果不做切换两个模块的 TX 同时接到 PA3会互相驱动、电平对打现象不是完全不工作而是随机乱码、时通时不通这种问题最难查。所以必须用双刀双掷2P2T拨码开关把 PA2、PA3 同时切过去。5.2 接线方式┌── A 侧PA2 ↔ HC-06 RXD PA3 ↔ HC-06 TXD PA2 ── 公共端 1 ┤ └── B 侧PA2 ↔ ESP RXD PA3 ↔ ESP TXD ┌── A 侧同上 PA3 ── 公共端 2 ┤ └── B 侧同上也就是说开关的两个公共端分别接 PA2、PA3开关的A 侧接蓝牙的 RXD、TXD开关的B 侧接 ESP 的 RXD、TXD开关拨到哪一侧USART2 就接到哪个模块。5.3 三条铁律必须同时切 PA2 和 PA3。只切一根线另一根还连着两个模块照样会打架。这就是为什么用双刀而不是两个独立的单刀开关随便拨。软件读不到开关状态。所以拨到哪一侧人必须记住并且和软件里的协议选择保持一致。切换前先断电。至少也要保证当前没有数据在收发否则切换瞬间可能出现电平冲突。想用拨码开关软件操作波特率蓝牙蓝牙侧A远程模式默认NET_BT9600WiFi / MQTTWiFi 侧B远程模式下再按一次 KEY4115200后面 MQTT 初始化全 FAIL 时第一个要查的就是这个开关。软件里选的是 MQTT硬件却还在蓝牙侧日志看起来就像ESP 完全没反应。六、上电前自检清单建议把这一节截图存手机每次改完线都过一遍。检查项怎么查合格标准3.3V 与 GND 是否短路万用表电阻档 / 二极管档不导通电容充电时短暂响一下正常5V 与 GND 是否短路同上不导通所有 GND 是否连通万用表通断档逐个模块量全部导通3.3V 实际电压上电后万用表量3.2V ~ 3.4V5V 实际电压上电后量4.8V ~ 5.2V串口是否交叉目视 通断档MCU TX(PA9) → 模块 RXESP 的 EN万用表量3.3VESP 的 GPIO15万用表量0V裸模块舵机供电目视独立 5V且 GND 共地拨码开关位置目视与软件要用的协议一致杜邦线是否虚接轻轻拉一下、通断档量不松动、导通模块供电电压逐个量 VCC 对 GNDENS160 / DHT11 都是 3.3V推荐的上电顺序断电接好所有线只给核心板上电量 3.3V / 5V断电再插传感器和通信模块再上电逐个量模块 VCC最后才烧程序。这个顺序看起来麻烦但能保证烧了模块这种事不会发生在你身上。七、上电后的分步验证接完线不要直接烧完整程序按这三步走第一步只验证电源上电摸一下稳压芯片和 ESP明显发烫就立刻断电。发烫通常意味着短路或接反。第二步验证调试串口烧一个只打印hello的程序确认 USB 转 TTL 能收到。这一步过了说明 PA9/PA10 和共地都没问题。第三步逐个接模块先接 DHT11看串口能不能读到温湿度再接 ENS160看 I2C 能不能读到 ID最后接 ESP / 蓝牙看串口有没有数据。一次只加一个模块出问题时你立刻知道是谁。全接完再测一旦不通你面对的是 6 个可疑对象。八、本章易错点总结现象真正原因处理串口能发不能收recv:一直为空TX/RX 接成 TX-TX、RX-RX交叉接MCU TX → 模块 RXESP 串口一个字都没有EN/CH_PD 悬空把 EN 接到 3.3V裸 ESP 启动失败、日志乱码GPIO15 悬空、GPIO0 被拉低GPIO15 接 GNDGPIO0/GPIO2 保持高ESP 日志反复打印ready供电电流不足模块反复重启独立稳定 3.3V≥500mA加 100µF 电容蓝牙和 WiFi 都接上后随机乱码两个 TX 同时驱动 PA3用 2P2T 拨码开关二选一且断电切换拨码开关拨了但还是不通只切了 PA2 或 PA3 其中一根必须双刀同时切两根舵机一动板子就复位舵机从板子 3.3V 取电启动电流拉垮电源舵机独立 5V并共地舵机抖动、回弹、不定位供电不足或没共地加大电容、检查 GND、确认 500~2000µsENS160 完全读不到I2C 没有上拉或 SCL/SDA 接反加上拉电阻核对 PA8SCL、PC9SDAENS160 地址对不上ADDR 悬空导致地址在 0x52/0x53 之间漂移ADDR 明确接高或接低代码同步改地址ENS160 上电就坏VCC 接了 5V只能接 3.3VDHT11 读数全是0xFF或校验错误没上拉、线太长、读得太频繁加上拉、缩短线、间隔 ≥1s风扇/加热有时候转有时候不转大电流设备没有和 MCU 共地电源地、信号地全部连在一起插拔杜邦线时火花、模块损坏带电插拔一律断电接线换了根杜邦线就好了杜邦线内部断芯 / 接触不良用万用表通断档逐根检查九、小结与下一篇这一篇做完硬件部分就有了一个可靠的起点三个电源域分清舵机独立供电但共地每个模块的引脚、上拉、地址、交叉接法都固定下来USART2 用 2P2T 拨码开关做二选一硬件和软件必须一致上电前有清单上电后分步验证一次只加一个模块。下一篇开始写代码用 CubeMX 从零建工程配置时钟树到 100MHz把 GPIO、TIM3/TIM5、USART1/2、I2C3 全部配好并解释每个参数为什么这么填。如果这篇文章对你有帮助欢迎点赞收藏。系列更新中下一篇见。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑