STM32低功耗模式

一、低功耗模式介绍

STM32 的低功耗模式有 3 种:
1)睡眠模式(CM3 内核停止,外设仍然运行)
2)停止模式(所有时钟都停止)
3)待机模式(1.8V 内核电源关闭)

在这三种低功耗模式中,最低功耗的是待机模式,在此模式下,最低只需要 2uA 左右的电
流。停机模式是次低功耗的,其典型的电流消耗在 20uA 左右。最后就是睡眠模式了。

二、待机模式

        待机模式可实现 STM32的最低功耗。该模式是在 CM3 深睡眠模式时关闭电压调节器。整个 1.8V 供电区域被断电。PLL、HSI 和 HSE 振荡器也被断电。SRAM 和寄存器内容丢失。仅备份的寄存器和待机电路维持供电。

        从待机模式唤醒后的代码执行等同于复位后的执行(采样启动模式引脚,读取复位向量等)。电源控制/状态寄存器(PWR_CSR)将会指示内核由待机状态退出。在进入待机模式后,除了复位引脚以及被设置为防侵入或校准输出时的 TAMPER 引脚和被使能的唤醒引脚(WK_UP 脚),其他的 IO 引脚都将处于高阻态。

三、代码

### 如何从LCD1602显示屏读取数据 对于LCD1602而言,其主要功能在于显示而非作为输入设备来提供数据反馈。然而,在特定情况下确实可以通过设置R/W引脚的状态来进行读操作。当R/W被拉高至逻辑1时,表示准备从LCD模块读回状态或数据;而要实现这一点还需要配置其他几个重要的信号线。 #### 配置RS和EN引脚用于读操作 - **RS (Register Select)**: 当此引脚设为低电平时,意味着即将发生的任何传输都将涉及命令而不是字符数据。如果目的是查询当前的忙标志或是获取地址计数器的内容,则应保持该引脚处于低位。 - **EN (Enable)**: 此引脚决定了何时采样并处理来自微控制器的数据总线上面的信息。为了启动一次有效的读周期,先将EN置零再迅速切换成高电平一段时间之后再次回到低电平位置。这个过程被称为脉冲触发[^1]。 ```c void LCD_ReadBusyFlag(void){ RS=0; R_W=1; // 设置为读模式 EN=0; while(1){ EN=1; _delay_ms(5); // 延迟等待 if(D7==0) break;// 如果忙碌标记清除则退出循环 EN=0; } } ``` 上述代码展示了如何检测繁忙旗标以确保在尝试读取之前屏幕已经准备好接受新的请求。一旦确认不再忙碌就可以继续下一步骤了。 #### 实际读取数据的过程 实际执行读取动作前必须先调用`LCD_ReadBusyFlag()`函数验证显示器是否空闲。接着把想要访问的具体内存单元加载到内部指针里去(比如通过发送适当的位置设定指令)。最后一步就是真正意义上的“读”,这涉及到改变某些硬件连线以及编写相应的软件逻辑: ```c unsigned char LCD_ReadData(void){ unsigned char data; RS = 1; // 选择数据寄存器 R_W = 1; // 设定为读方式 EN = 0; // 初始化使能端口 // 发送使能脉冲开始读取 EN = 1; _delay_us(1); EN = 0; // 获取返回的数据值 for(int i=0;i<8;i++){ if(PIN_D[i]) { data |= (1 << i); } else { data &= ~(1 << i); } } return data; } ``` 这段程序片段实现了完整的单次读取流程,其中包含了必要的延时考虑以便让外部电路稳定下来从而获得准确的结果。值得注意的是这里假设了一个名为PIN_D[]数组用来模拟真实的I/O接口情况,具体实现会依赖于所使用的开发板及其对应的库文件定义[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值