前言
本教材基于B站江协科技课程整理,适合有C语言基础、刚接触STM32的新手。它梳理了STM32核心知识点,帮助大家把C语言知识应用到STM32开发中,更高效地开启STM32学习之旅。
目录
一、程序现象与硬件功能
-
按键控制 LED
- 连接两个按键与两个 LED,按下左侧按键时对应 LED 点亮,再次按下则熄灭,右侧按键同理,两者操作互不干扰,实现独立控制。
-
光敏传感器控制蜂鸣器
- 光敏电阻传感器模块与蜂鸣器连接,遮挡光线时(光敏电阻阻值增大),蜂鸣器启动;光线充足时(阻值减小),蜂鸣器停止,体现模拟信号与数字信号的转换逻辑。
二、硬件电路与关键问题
-
按键电路与抖动处理
- 按键原理:按下导通、松手断开,常见接法为下拉电阻式(默认高电平,按下接地变低)或上拉电阻式(默认低电平,按下接电源变高)。
- 抖动问题:按下 / 松手瞬间因机械触点振动产生高频抖动(5-10ms),需通过程序延时(软件消抖)过滤,避免单片机误判。
-
传感器模块工作原理
- 分压电路:传感器元件(如光敏电阻)与定值电阻串联分压,通过检测电压变化获取模拟量(如光线强度)。
- 二值化处理:利用电压比较器(如 LM393)将模拟电压转换为数字信号,阈值可通过电位器调节,输出端 DO 用于单片机读取通断状态。
三、C 语言关键知识点
-
数据类型与重命名
- 基本类型:char、int 等在不同平台位数差异(如 51 单片机 int 为 16 位,STM32 中为 32 位),需通过
stdint.h
头文件使用确定位数的类型(如uint8_t
)。 - typedef 与宏定义:
typedef
为变量类型重命名(如typedef unsigned char uint8_t
),宏定义(#define
)用于常量替换(如#define HIGH 1
),增强代码可读性。
- 基本类型:char、int 等在不同平台位数差异(如 51 单片机 int 为 16 位,STM32 中为 32 位),需通过
-
结构体(Struct)
- 用途:组合不同数据类型(如
struct GPIO {uint8_t pin; uint8_t mode;}
),方便函数间传递复杂参数。 - 引用方式:结构体变量名
.成员名
或结构体指针->成员名
(如gpio.pin = 12;
或gpio_ptr->mode = INPUT
)。
- 用途:组合不同数据类型(如
-
枚举(Enum)
- 作用:定义取值受限的整型变量,避免非法赋值(如
enum Week {MON=1, TUE, WED}
,默认递增赋值)。 - 优势:枚举值可作为宏定义使用,增强代码健壮性(如
if (state == ENABLE)
比if (state == 1)
更易理解)。
- 作用:定义取值受限的整型变量,避免非法赋值(如
四、总结与工程应用
- 核心目标:理解外设硬件原理(按键消抖、传感器信号转换)与 C 语言高级特性(结构体、枚举),为 STM32 编程奠定基础。
- 实践建议:通过实际电路调试掌握硬件特性,结合库函数源码学习结构体与枚举的具体应用,逐步理解底层驱动逻辑。