发布时间:2026/8/21 6:18:43
STM32Day1学习 Day1学习知识点总结底层基础掌握 RCC 时钟总线作用学会开启 GPIO 端口时钟分清 GPIO 推挽输出、上拉输入两种常用模式以及配套读写 API 使用规范。外设实操完成 LED、有源蜂鸣器、独立按键、光电传感器硬件接线与驱动编写掌握共阳极器件电平逻辑、按键软件消抖方法。工程规范学习模块化开发思路外设拆分独立.c/.h 驱动文件main 函数仅保留业务逻辑实现代码复用与便捷维护。今日完整学习总览基础层前置点灯内容STM32 工程搭建、面包板硬件接线规范RCC 时钟总线原理、GPIO 引脚核心配置逻辑GPIO推挽输出实战共阳极 LED 点灯、周期闪灯拓展层新增外设模块GPIO 输出拓展有源蜂鸣器驱动PB0 推挽输出GPIO 输入两类实战独立按键PB1 上拉输入、软件消抖、光电遮挡传感器PB2 上拉输入区分 GPIO 全部输入 / 输出模式理清单片机输出控制外设、读取外部信号两套底层逻辑工程标准化拆分外设独立.c/.h驱动main 只写业务逻辑实现代码复用、易维护标准化毫秒级软件延时适配消抖、降 CPU 扫描负载场景二、全部硬件电路汇总统一引脚分配LED 指示灯基础点灯硬件共阳极接法LED 长脚接 3.3V短脚串限流电阻接PA0电平逻辑PA0 输出低电平→灯亮PA0 高电平→灯灭有源蜂鸣器硬件正极串 1k 电阻接PB0负极接 GND自带振荡电路电平逻辑PB0 低电平→蜂鸣器响PB0 高电平→静音模式推挽输出 Out_PP独立机械按键硬件一端PB1、一端 GND开启芯片内部上拉电阻 IPU电平逻辑松开 引脚高电平 1按下 引脚低电平 0必须软件消抖光电遮挡传感器模块供电VCC 接 3.3V、GND 共地信号 OUT 接PB2电平逻辑无遮挡 高电平 1有遮挡 低电平 0上拉输入 IPU无需消抖三、核心底层原理整合RCCGPIO 输入输出RCC 外设时钟所有实验通用前置RCC 是 STM32 外设总开关所有 GPIO 挂载在 APB2 总线使用前必须开启对应端口时钟AHB高速 DMA、SD 卡初学不用APB2GPIOA/GPIOB/GPIOC、ADC、TIM1、USART1本节课全部外设APB1普通定时器、I2C、USART2/3后续学习核心规则时钟整组开启无法单独开启某一个引脚仅初始化过的引脚生效其余默认浮空输入。开启函数示例GPIO 两大类型完整区分重点整合1Output 输出模式单片机向外输出 0/1控制 LED、蜂鸣器输出核心 APIGPIO_ResetBits(GPIOx,GPIO_Pin_x)输出低电平0GPIO_SetBits(GPIOx,GPIO_Pin_x)输出高电平12Input 输入模式单片机被动读取外部按键 / 传感器电平输入读取 API四、三大完整实操实验逻辑实验 1基础 LED 闪灯前置入门开启 GPIOA 时钟PA0 初始化为 50MHz 推挽输出上电默认高电平灯灭循环拉低 PA0 亮灯→延时→拉高 PA0 灭灯→延时往复实验 2按键控制蜂鸣器开启 GPIOB 时钟PB0 输出、PB1 上拉输入循环读取 PB1 电平读到 0按键按下拉低 PB0蜂鸣器鸣叫读到 1按键松开执行光电传感器判断逻辑机械按键增加delay_ms(10)消抖消除电平抖动误触发实验 3光电传感器自动报警PB2 配置上拉输入循环读取传感器电平有遮挡返回 0蜂鸣器鸣叫无遮挡返回 1蜂鸣器关闭主循环增加 50ms 延时降低扫描频率减少 CPU 占用五、模块化工程分层结构核心工程化思想摒弃全部代码写在 main.c 的写法外设驱动与业务逻辑分离文件划分如下main.c仅外设初始化调用 while (1) 业务判断逻辑无底层引脚配置led.c led.hLED 点灯驱动封装初始化、亮灯、灭灯接口beep.c beep.h蜂鸣器驱动封装初始化、开 / 关蜂鸣key.c key.h按键驱动封装初始化、带消抖按键读取函数sensor.c sensor.h光电传感器驱动封装初始化、遮挡状态读取delay.c delay.h统一毫秒级软件延时函数全工程复用模块化优势修改硬件引脚仅改动对应外设.c不影响其他模块代码主函数逻辑极简可读性强后期拓展外设无需重构整套驱动文件可直接复制到其他 STM32 工程复用七、今日整合知识点总结大白话RCC 是电源开关GPIO 是引脚精细控制器必须先开时钟再配置引脚否则所有 IO 失效。GPIO 分输出、输入两类输出是单片机控制外部器件LED、蜂鸣器主推挽输出输入是单片机读取外部信号按键、传感器优先上拉输入。共阳极 LED、有源蜂鸣器电平逻辑统一低电平工作高电平关闭。机械按键存在电平抖动必须加 10ms 软件延时消抖传感器无机械结构无需消抖。工程必须模块化拆分外设单独.c/.hmain 只做逻辑判断方便维护、移植。输出函数SetBits/ResetBits只能控制外设输入读取只能用GPIO_ReadInputDataBit两类 API 不可混用。所有 PB 引脚外设共用 GPIOB 时钟PA0 LED 单独开启 GPIOA 时钟多端口工程需用|同时开启多路时钟。八、整合后完整易错点清单代码笔误蜂鸣器操作引脚全部是 GPIOB原文误写 GPIOA 会导致蜂鸣器无响应。忘记开启对应端口时钟LED 不开 GPIOA、蜂鸣 / 按键 / 传感器不开 GPIOB引脚完全无输出 / 读取。按键配置浮空输入无上下拉电阻手靠近引脚电平乱跳按键频繁误触发。输入输出 API 混用用ReadInputDataBit控制蜂鸣器、用SetBits读取按键电平编译无报错但功能完全失效。所有业务逻辑堆在 main.c后期添加流水灯、串口等外设时代码臃肿修改困难。主循环无延时高频读取传感器 / 按键CPU 满载占用程序卡顿。上电不初始化外设默认电平LED、蜂鸣器上电瞬间误触发初始化时统一置高电平关闭外设。| c// 同时开启PA、PB端口时钟LED用PA0蜂鸣/按键/传感器用PBRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB, ENABLE); || — |输出模式特点适用场景本节课使用推挽输出 Out_PP高低电平驱动能力都强LED、蜂鸣器、普通 IO 控制全部输出外设开漏输出 Out_OD仅能主动拉低拉高依赖外部上拉I2C 通信初学不使用无输入模式特点适用场景本节课使用浮空输入 IN_FLOATING无上下拉电平极易受干扰高速模拟信号按键禁用无上拉输入 IPU内部自带上拉默认高电平抗干扰强独立按键、光电传感器信号脚PB1 按键、PB2 传感器下拉输入 IPD内部自带下拉默认低电平特殊按键电路无c// 返回值1高电平0低电平uint8_tGPIO_ReadInputDataBit(GPIOx,GPIO_Pin_x);c#ifndef__DELAY_H#define__DELAY_Hvoiddelay_ms(uint32_tt);#endifc#includedelay.hvoiddelay_ms(uint32_tt){uint32_ti,j;for(it;i0;i--)for(j7200;j0;j--);}c#ifndef__LED_H#define__LED_HvoidLED_Init(void);voidLED_On(void);voidLED_Off(void);#endifc#includeled.h#includestm32f10x.hvoidLED_Init(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_StructInit(GPIO_InitStruct);GPIO_InitStruct.GPIO_PinGPIO_Pin_0;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOA,GPIO_InitStruct);GPIO_SetBits(GPIOA,GPIO_Pin_0);//上电默认灭灯}voidLED_On(void){GPIO_ResetBits(GPIOA,GPIO_Pin_0);}voidLED_Off(void){GPIO_SetBits(GPIOA,GPIO_Pin_0);}c#ifndef__BEEP_H#define__BEEP_HvoidBEEP_Init(void);voidBEEP_On(void);voidBEEP_Off(void);#endifc#includebeep.h#includestm32f10x.hvoidBEEP_Init(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_StructInit(GPIO_InitStruct);GPIO_InitStruct.GPIO_PinGPIO_Pin_0;GPIO_InitStruct.GPIO_ModeGPIO_Mode_Out_PP;GPIO_InitStruct.GPIO_SpeedGPIO_Speed_50MHz;GPIO_Init(GPIOB,GPIO_InitStruct);GPIO_SetBits(GPIOB,GPIO_Pin_0);//上电默认关闭蜂鸣器}voidBEEP_On(void){GPIO_ResetBits(GPIOB,GPIO_Pin_0);}voidBEEP_Off(void){GPIO_SetBits(GPIOB,GPIOB,GPIO_Pin_0);}c#ifndef__KEY_H#define__KEY_HvoidKEY_Init(void);uint8_tKEY_Read(void);//返回1松开0按下#endifc#includekey.h#includestm32f10x.h#includedelay.hvoidKEY_Init(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_StructInit(GPIO_InitStruct);GPIO_InitStruct.GPIO_PinGPIO_Pin_1;GPIO_InitStruct.GPIO_ModeGPIO_Mode_IPU;//上拉输入GPIO_Init(GPIOB,GPIO_InitStruct);}uint8_tKEY_Read(void){if(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)0){delay_ms(10);//消抖延时while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_1)0);//等待松开delay_ms(10);return0;}return1;}c#ifndef__SENSOR_H#define__SENSOR_HvoidSENSOR_Init(void);uint8_tSENSOR_Read(void);//0有遮挡1无遮挡#endifc#includesensor.h#includestm32f10x.hvoidSENSOR_Init(void){GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_StructInit(GPIO_InitStruct);GPIO_InitStruct.GPIO_PinGPIO_Pin_2;GPIO_InitStruct.GPIO_ModeGPIO_Mode_IPU;GPIO_Init(GPIOB,GPIO_InitStruct);}uint8_tSENSOR_Read(void){returnGPIO_ReadInputDataBit(GPIOB,GPIOB,GPIO_Pin_2);}c#includestm32f10x.h#includeled.h#includebeep.h#includekey.h#includesensor.h#includedelay.hintmain(void){//全部外设初始化仅调用封装好的驱动函数LED_Init();BEEP_Init();KEY_Init();SENSOR_Init();while(1){//功能1基础LED周期闪烁LED_On();delay_ms(500);LED_Off();delay_ms(500);//功能2按键优先控制蜂鸣器if(KEY_Read()0){BEEP_On();}else{//功能3无按键按下时光电传感器自动报警if(SENSOR_Read()0)BEEP_On();elseBEEP_Off();}delay_ms(50);}}

相关新闻

2026/8/21 6:18:43

光有大脑没用:大模型这五年是怎么长出身体的

文章目录 光有大脑没用:大模型这五年是怎么长出身体的先把话说透:大模型给了什么,没给什么第一代壳:IDE 插件,模型当输入法(2021)第二代壳:网页聊天框,模型第一次当主角&…

2026/8/21 7:18:46

KNN算法实现手写数字识别:从原理到实践完整指南

这次我们来看一个经典的机器学习入门项目:基于 KNN 算法的手写数字识别。对于很多刚接触机器学习的朋友来说,MNIST 数据集和 KNN 算法往往是第一个实战案例。这个项目的重点不在于算法有多复杂,而在于它能否清晰地展示从数据加载、模型训练到…

2026/8/21 7:18:46

东京GSD本社招聘解析:双轨制雇佣与顶级福利

1. 项目概述:东京GSD本社招聘解析最近在整理东京地区的优质职场机会时,GSD本社的招聘信息引起了我的注意。这家公司以"正社员与个人事业主双轨制"为特色,在福利待遇方面号称行业顶级水平。作为在东京职场摸爬滚打多年的从业者&…

2026/8/21 7:18:46

非拟线性偏好下的拍卖机制设计:兼顾公平与效率的算法实践

1. 项目概述:当拍卖遇上“非钱”的偏好拍卖,一个听起来充满金钱气息的词汇,通常我们想到的是拍卖师落槌、买家举牌、价高者得的场景。在这个经典模型里,大家有一个心照不宣的假设:所有竞拍者都是“理性经济人”&#x…

2026/8/21 7:18:46

AI率太高应该从哪儿改?按报告定位才能真正降低论文AI痕迹。

AI率太高应该从哪儿改?按报告定位才能真正降低论文AI痕迹。 你可能正遇到这种情况:检测处理结果中摘要、综述和结论标记程度不同,你却一直从第一页顺序换词。真正的问题不是“有没有一键按钮”,而是没有把查重、AIGC检测、文本改写…

2026/8/21 7:13:46

从固定流程到反思型智能体:构建可控信息抽取系统的架构与实践

1. 项目概述:从固定流程到反思型智能体的跨越最近在做一个信息抽取的项目,感触很深。过去我们做信息抽取,无论是用规则、模板还是传统的机器学习模型,本质上都是在构建一个“固定流程”。你定义好实体类型、关系模式,模…

2026/8/20 10:17:13

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/20 20:11:18

工业传感器与变送器详解:序章 从物理世界到工业数据

序章 从物理世界到工业数据 ——重新认识工业传感器与变送器 工业自动化系统正变得日益复杂。今天的工业现场早已不是简单的控制回路,而是由多层技术共同构成的立体体系:PLC、DCS、SCADA、MES、工业互联网、边缘计算与人工智能。控制系统可以执行复杂算法,工业网络可以实现…

2026/8/21 0:03:13

Linux命令-uucico(UUCP传输程序)

Linux命令-uucico(UUCP传输程序) 🔰简介UUCP 体系简介 📖语法⚙️选项配置文件 💡示例示例 1:基本传输操作示例 2:主模式与从模式示例 3:调试与故障排查示例 4:UUCP 配置…

2026/8/21 0:03:13

Linux命令-uupick(UUCP文件接收工具)

Linux命令-uupick(UUCP文件接收工具)🔰简介uupick 在 UUCP 传输链中的位置📖语法⚙️选项交互命令💡示例示例 1:基本接收操作示例 2:仅处理来自特定系统的文件示例 3:完整 UUCP 文件…

2026/8/20 8:35:23

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/20 9:15:29

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/21 0:31:27

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…