欢迎光临
我们一直在努力

stm32概述

1.stm32常用外设

  first :GPIO 控制高低电平  读取引脚的电平/电压

   secend : 通信接口  

2.volatile

动用外部神秘力量

没关系,我用更简单的方式来解释!

 什么是 volatile?

想象你有一个**记事本**,上面记着家里灯的开关状态(0表示关,1表示开)。

### 没有volatile的情况(被优化了) int light_on = 0;  // 灯关着

// 你写了个程序检查灯是否开了 while (light_on == 0) {     // 等待开灯… } ```

**问题:**  – 编译器看到 `light_on` 在循环里没被修改过,觉得你太傻了 – 自作聪明地把代码改成了: if (light_on == 0) {     while (1) { }  // 永远循环!再也不检查了 } ``` – 结果:你去开灯,程序却永远不知道灯已经开了!

### 有volatile的情况(告诉编译器别自作聪明) ```c volatile int light_on = 0;  // 告诉编译器:这变量随时可能变化

while (light_on == 0) {     // 每次循环都重新检查light_on的值 } ```

## 生活中的比喻

### 场景:等快递 **没有volatile:** – 你问老婆:"快递到了吗?" – 老婆看了一眼说:"没到" – 然后你就坐在那里,再也没问过(以为不会变化) – 结果快递到了你也不知道

**有volatile:** – 你不停地问:"到了吗?到了吗?" – 每次都会重新去看快递状态

## 三个最常用的场景

### 1. 硬件按钮检测 volatile int button_pressed = 0;

// 当按钮被按下(中断里执行) void on_button_press() {     button_pressed = 1;  // 标记按钮被按了 }

int main() {     while (1) {         if (button_pressed) {             printf("按钮被按下了!\\n");             button_pressed = 0;         }     } } ```

### 2. 传感器数据读取 ```c // 温度传感器(硬件自动更新数据) volatile int temperature = 25;

void check_temperature() {     // 每次都去读真实温度,不用缓存的值     if (temperature > 30) {         printf("太热了!\\n");     } } ```

### 3. 多任务共享数据 ```c volatile int message_received = 0;

// 任务1:发送消息 void task1() {     send_message();     message_received = 1;  // 标记消息已发送 }

// 任务2:检查消息 void task2() {     if (message_received) {         process_message();         message_received = 0;     } } ```

## 简单记法

**用volatile就告诉编译器:** – "这个变量可能会被外部改变" – "不要自作主张帮我优化" – "每次都去内存里读真实的值"

**不用纠结太多**,记住: – 如果变量会被**中断**修改 → 加volatile – 如果变量对应**硬件寄存器** → 加volatile – 如果变量被**多个任务**共享 → 可能需要volatile

简单理解就是:**当变量的值可能在意想不到的时候被改变,就用volatile!**

应用  

常见的延时函数

错误写法

void delay(int count) {
while (count–) {
// 空循环
}
}

// 调用
delay(1000000); // 想延时一会儿

目录

1.stm32常用外设

  first :GPIO 控制高低电平  读取引脚的电平/电压

   secend : 通信接口  

2.volatile

应用  

常见的延时函数


问题: 编译器看到 count– 啥也没干,可能直接把这个循环优化没了!

我看了一下 关键在于 while(count–){         这里面是空的   }

建议使用

赞(0)
未经允许不得转载:171主机测评 » stm32概述
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址