5.8W25Q64 实验(下)-嵌入式铁头山羊STM32笔记

实验任务

按钮切换 LED 亮灭,用 W25Q64(上图右下角)保存 LED 的最后一次亮灭状态(亮为 1,暗写 0)。

在断电操作下,重新上电后可以保持 LED 在断电前的亮灭状态(工业中可用作关键参数的保存,在断电后重新加载读取参数,也可以保存 IAP 升级 bin 数据)

目录

1.初始化板载LED

https://www.bilibili.com/video/BV11X4y1j7si?t=157.1&p=32

LED 配置:开漏输出(OD open_drain),接 PC13

上图为初始化板载 LED 具体代码。定义函数声明和函数、开时钟、配引脚和配置、init,放进 main 结束

初始化函数:App_OnBoard_LED_Init

2.初始化按钮

https://www.bilibili.com/video/BV11X4y1j7si?t=281.4&p=32

上图为实验电路图。可以看到按钮的一端接地,一端接 PA0.

上图为按钮初始化具体代码。

按钮结构体成员作用:

|------------------------|------------------------------|
| 成员名 | 核心功能 |
| button_clicked_cb | 按钮点击事件的回调函数(点击后执行) |
| button_long_pressed_cb | 按钮长按事件的回调函数(长按后执行) |
| button_pressed_cb | 按钮按下事件的回调函数(按下瞬间执行) |
| button_released_cb | 按钮松开事件的回调函数(松开瞬间执行) |
| ClickInterval | 点击时间间隔(防误触的时间阈值) |
| GPIOx | 按钮对应的 GPIO 端口(如 GPIOA、GPIOB) |
| GPIO_Pin | 按钮对应的 GPIO 引脚号(如 Pin5、Pin8) |
| LongPressTickInterval | 长按检测时间间隔(轮询长按状态的周期) |
| LongPressTime | 触发长按的最小时长(达到该时长算长按) |

上图为按钮初始化具体操作:

函数声明,

函数初始化(开引脚时钟,结构体配置,init),

函数调用,while 执行 My_Button_Proc(&button);

3.使用按钮切换LED的亮灭

https://www.bilibili.com/video/BV11X4y1j7si?t=515.8&p=32

按键按下回调函数声明自定义:button_clicked_cb

按键按下回调函数具体执行

在按钮初始化中加入自定义的回调函数。

这样的话,如果按键按下,就会触发这个回调函数,然后执行 LED 亮灭的切换

4.保存LED的当前状态

https://www.bilibili.com/video/BV11X4y1j7si?t=694.4&p=32

在回调函数中加入 LED 状态变化后保存进入 W25Q64

上图为具体操作

5.恢复LED的状态

https://www.bilibili.com/video/BV11X4y1j7si?t=806.9&p=32

思路:断电复位后,MCU 程序会重新执行。只需要在初始化时读取存储的值即可。

上图为代码具体实现

总结

主要实现了按键控制 LED 翻转,然后 LED 状态存进 W25Q64。整个实验相对简单,主要理解 FLASH 存储器存储数据的思路,在后面对于工业参数的存取、恢复出厂设置、IAP 升级都有一定应用。

相关推荐
zzm62844 分钟前
位置偏差估计与无偏排序学习——WSDM 2018论文精读笔记
笔记·学习
kdxiaojie1 小时前
Linux 驱动研究 —— SDIO (1)
linux·运维·笔记·学习·sdio
3A Cloud2 小时前
Architecture Diagram Skill 详细介绍
人工智能·笔记·信息可视化
Lzh编程小栈3 小时前
【嵌入式硬核精讲】I2C通信协议万字详解(时序帧格式、同步半双工、重复起始、一对多挂载、寄存器、面试必考)
stm32·单片机·嵌入式硬件·面试
十月的皮皮3 小时前
STM32从零到量产开发:四路继电器工业控制模块开发 -上位机 Program.cs 应用程序入口设计说明
c语言·stm32·单片机·stm32cubemx·hal库
疯狂打码的少年3 小时前
【数据结构】栈:定义、顺序栈与链式栈
数据结构·笔记
LCG元3 小时前
STM32F103+MPU6050互补滤波姿态解算与OLED实时显示实战(附完整工程代码)
stm32·单片机·嵌入式硬件
求知喻3 小时前
FM33L023D外部中断
单片机·嵌入式硬件
小帽子_1234 小时前
STM32+BMS 嵌入式开发:ADC 电压温度采集与总线通信落地教程
stm32·单片机·嵌入式硬件
szxinmai主板定制专家4 小时前
Zynq MPSoC半导体高精度运动控制方案|FPGA硬件插补实现亚微米级伺服实时控制
人工智能·嵌入式硬件·fpga开发·zynq·运动控制·ethercat