资讯动态

初学STM32,我遇到的那些问题

发布时间:2026/8/5 23:45:55 来源:尧图企业网站定制
初学STM32标准库时我遇到过几个“代码和接线都对但硬件死活没反应”的怪问题。排查后发现它们大多不是逻辑错误而是藏在硬件接触、配置细节里的坑。本文记录了其中几个典型案例和我的解决过程1. 电路导通异常明明代码和电路连接跟教程里的一模一样但是编译下载完后硬件那边毫无反应我怀疑电路某些地方接触不良于是把最小系统板用力往下摁发现预期现象出现了类似的LED长脚和短脚杜邦线等也可能出现接触不良的情况。原理硬件存在虚接造成间歇性通路断开2. 复位后USB无法自动重连点亮一个LED代码编译和下载都没问题但是发现重新拔插ST-Link灯才能亮通过ai的解释我知道了是我Keil设置的问题为了方便观察现象我把设置调了调以后就不用频繁拔插USB下载程序直接能观察到现象了原理复位模式不匹配芯片不会自动加载 Flash 程序3. 调用函数时代码写错将点亮LED的功能封装成LED_ON()函数从LED.h文件中复制粘贴到main.c文件中调用没有对.h文件中的函数声明语句进行修改直接编译下载编译器未报错但是LED不亮起初很自信地认为代码没问题是不是电路连接出了问题仔细检查一番问题出在代码上。这里我想说编译器不报错不代表代码是对的写代码时一定要细致。//错误调用voidLED1_ON(void);//正确调用LED1_ON();原理声明语法错误不会触发编译告警但函数无法正常链接4. 头文件未导入在按键控制LED的程序中使用了uint8_t类型但是报错了这表明编译器“不认识”uint8_t需要导入头文件这种情况在C语言的学习中也遇到过有一定经验的话可以很快找到解决方案这里给出两种方案①导入stdint.h头文件。uint8_t不是C语言原生类型这个类型定义在stdint.h里#includestdint.h②若不清楚uint8_t类型具体定义在哪个头文件也可直接导入芯片头文件。原因#include “stm32f10x.h” → 内部链式引入了 core_cm3.h → core_cm3.h 里面自带 #include stdint.h原理uint8_t 不是 C 原生类型在标准头文件定义5. 时钟开启端口和GPIO初始化端口不匹配RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//开启GPIOA时钟GPIO_Init(GPIOB,GPIO_InitStructure);//却初始化GPIOB引脚复制粘贴也要检查啊原理外设必须开启对应端口时钟才能供电工作持续更新中…

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

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

免费获取报价