当前位置: 首页 > news >正文

STM32入门教程——GPIO输入

前言

本教材基于B站江协科技课程整理,适合有C语言基础、刚接触STM32的新手。它梳理了STM32核心知识点,帮助大家把C语言知识应用到STM32开发中,更高效地开启STM32学习之旅。

目录

前言

一、程序现象与硬件功能

按键控制 LED

光敏传感器控制蜂鸣器

二、硬件电路与关键问题

按键电路与抖动处理

传感器模块工作原理

三、C 语言关键知识点

数据类型与重命名

结构体(Struct)

枚举(Enum)

四、总结与工程应用


一、程序现象与硬件功能

  1. 按键控制 LED

    • 连接两个按键与两个 LED,按下左侧按键时对应 LED 点亮,再次按下则熄灭,右侧按键同理,两者操作互不干扰,实现独立控制。
  2. 光敏传感器控制蜂鸣器

    • 光敏电阻传感器模块与蜂鸣器连接,遮挡光线时(光敏电阻阻值增大),蜂鸣器启动;光线充足时(阻值减小),蜂鸣器停止,体现模拟信号与数字信号的转换逻辑。

二、硬件电路与关键问题

  1. 按键电路与抖动处理

    • 按键原理:按下导通、松手断开,常见接法为下拉电阻式(默认高电平,按下接地变低)或上拉电阻式(默认低电平,按下接电源变高)。
    • 抖动问题:按下 / 松手瞬间因机械触点振动产生高频抖动(5-10ms),需通过程序延时(软件消抖)过滤,避免单片机误判。
  2. 传感器模块工作原理

    • 分压电路:传感器元件(如光敏电阻)与定值电阻串联分压,通过检测电压变化获取模拟量(如光线强度)。
    • 二值化处理:利用电压比较器(如 LM393)将模拟电压转换为数字信号,阈值可通过电位器调节,输出端 DO 用于单片机读取通断状态。

三、C 语言关键知识点

  1. 数据类型与重命名

    • 基本类型:char、int 等在不同平台位数差异(如 51 单片机 int 为 16 位,STM32 中为 32 位),需通过stdint.h头文件使用确定位数的类型(如uint8_t)。
    • typedef 与宏定义typedef为变量类型重命名(如typedef unsigned char uint8_t),宏定义(#define)用于常量替换(如#define HIGH 1),增强代码可读性。
  2. 结构体(Struct)

    • 用途:组合不同数据类型(如struct GPIO {uint8_t pin; uint8_t mode;}),方便函数间传递复杂参数。
    • 引用方式:结构体变量名.成员名或结构体指针->成员名(如gpio.pin = 12;gpio_ptr->mode = INPUT)。
  3. 枚举(Enum)

    • 作用:定义取值受限的整型变量,避免非法赋值(如enum Week {MON=1, TUE, WED},默认递增赋值)。
    • 优势:枚举值可作为宏定义使用,增强代码健壮性(如if (state == ENABLE)if (state == 1)更易理解)。

四、总结与工程应用

  • 核心目标:理解外设硬件原理(按键消抖、传感器信号转换)与 C 语言高级特性(结构体、枚举),为 STM32 编程奠定基础。
  • 实践建议:通过实际电路调试掌握硬件特性,结合库函数源码学习结构体与枚举的具体应用,逐步理解底层驱动逻辑。
http://www.xdnf.cn/news/770905.html

相关文章:

  • 使用Mathematica观察多形式根的分布随参数的变化
  • mysql数据库实现分库分表,读写分离中间件sharding-sphere
  • 数据库MySQL集群MGR
  • NiceGUI 是一个基于 Python 的现代 Web 应用框架
  • PyTorch——卷积层(3)
  • MapReduce(期末速成版)
  • 检索器组件深入学习与使用技巧 VectorStoreRetriever 检索器
  • android binder(二)应用层编程实例
  • 基于 Android 和 JBox2D 的简单小游戏
  • 【短距离通信】【WiFi】精讲WLAN 驱动结构
  • Android Studio 之基础代码解析
  • wow Warlock shushia [Dreadsteed]
  • 【Java EE初阶 --- 多线程(初阶)】多线程的实现案例
  • 《Effective Python》第六章 推导式和生成器——使用 yield from 组合多个生成器
  • 嵌入式学习笔记 - FreeRTOS关于vApplicationGetIdleTaskMemory
  • AI书签管理工具开发全记录(九):用户端页面集成与展示
  • opencv 可视化函数
  • 苹果电脑深度清理,让老旧Mac重焕新生
  • MySQL 全量 增量备份与恢复
  • 揭秘 NextJS Script 组件
  • HealthBench医疗AI评估基准:技术路径与核心价值深度分析(上)
  • Redis-6.2.9 cluster集群部署和扩容缩容
  • Flask中secret_key设置解析
  • Spring Boot Starter 自动装配原理全解析:从概念到实践
  • 通用优势估计函数(GAE,Generalized Advantage Estimation)详解
  • unity开发棋牌游戏
  • 力扣第452场周赛
  • Matlab绘图
  • odoo17 windows server布署错误分析
  • Spark-TTS: AI语音合成的“变声大师“