
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
这里列出来的是“按键状态机内部状态”。它不是给外部用的,所以放在.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 句柄和

这通常说明你的 STM32 HAL 库版本比较旧,或者当前系列 HAL 没有这个扩展函数。解决思路:优先升级对应芯片的 Cube Firmware Package;检查是否参与编译;如果确实没有这个 API,可以后续单独写一篇“手动 IDLE 中断 + DMA 接收”的版本。本篇先走 HAL 已经封装好的路线。再加入本篇代码就会重复定义。解决方法是合并回调。一个工程里同名 HAL 回调只能定义一次

前面我们一直在用串口看结果。1602A 字符屏你手里的是裸 16 针并口屏,不是背面带 I2C 小板的那种。这一篇就按裸 16 针来做,先不用 I2C。先不显示中文,不做滚动,不做自定义字符,也不读忙标志。先把最小显示链路跑通。









