
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
说明你的工程里没有huart1。可能原因:你配置的是 USART2,所以句柄是huart2;你配置的是 USART3,所以句柄是huart3;CubeMX 没有生成 USART 初始化代码;app_uart.c里没改。解决方法:打开 CubeMX 生成的串口初始化文件或main.c然后把app_uart.c。

你这个现象,程序能运行,说明工程启动和下载大概率没问题。优先不要怀疑标准库文件。建议你先这样查:进入 Debug 后先Run,再Stop/Halt,停住 CPU 后看变量。打开,搜索你要看的变量名。如果你 Watch 里填的是uchar,确认它是不是。如果是,它是类型名,不是变量名,应该填真实变量名。写一个的最小测试变量,确认 Watch 链路是否正常。Clean + Rebuild 后重新进入

这里列出来的是“按键状态机内部状态”。它不是给外部用的,所以放在.c文件里。

前三篇我们已经把几个基础能力跑起来了:LED 能亮、能灭;KEY1、KEY2 能读到按键输入;USARTprintf能把程序状态打印到电脑上。这一篇我们加入定时器 PWM,用三路 PWM 分别控制红、绿、蓝三个 LED。同时把按键处理升级为的写法,让按键「按一次只触发一次」。这一篇的重点不是"把所有功能堆在一起",而是让你看到:PWM 怎么控制 LED 亮度;按键状态机怎么写才稳定;事件(Even

那再把本篇代码直接加进去,就会重复定义。解决方法不是删掉其中一个功能,而是合并回调。/* 调用 ADC DMA 相关处理 */ }一个工程里同名 HAL 回调函数只能定义一次。

你的工程没有打开 I2C1,或者实际用的是 I2C2。解决办法:打开i2c.c;看句柄是hi2c1还是hi2c2;这一篇从 I2C Scanner 往前走了一步,完成了 I2C 寄存器读写。现在你应该知道:扫到地址只是证明设备在线;读寄存器时要分清设备地址、寄存器地址、寄存器值;应用层继续使用 7 位地址;调 STM32 HAL 时,设备地址一般要左移 1 位;适合读寄存器;适合写寄存器;换设备时

说明你的工程里 ADC 句柄不叫hadc1,或者没有开启 ADC1。解决方法:回 CubeMX 确认 ADC1 已开启;看adc.c里实际生成的是hadc1还是别的名字;如果不是hadc1说明你的 PWM 不是 TIM3,或者没有开启 TIM3。解决方法:回 CubeMX 确认 TIM PWM 已配置;看tim.c里实际生成的是htim3htim2还是htim4;

OLED、Settings、Log、Menu 都依赖 I2C/SPI,必须放在总线初始化后。

如果你的 SPI Flash 接在 SPI2 上,在包含超时时间的三个宏:宏默认值含义100ms普通 SPI 收发超时500ms等待页写入完成的最大时间5000ms等待扇区擦除完成的最大时间擦除比写入慢得多(因为要擦的面积大),所以擦除超时给了 5 秒。这些就是 SPI Flash 的"暗号"。芯片收到0x06就知道你接下来要写或擦,收到0x20就知道你要擦一个扇区。要保证代码里的 SPI 句柄和









