stm32单片机个人学习笔记3(GPIO输出)

news/2025/1/15 22:01:27/

前言

本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。

STM32入门教程-2023版 细致讲解 中文字幕_哔哩哔哩_bilibili

一、GPIO简介

二、GPIO基本结构

 三、GPIO位结构

施密特触发器的原理 

红线是输入电平,蓝线是整流后的电平,绿线是上限和下限

当波形越过上限或下限时,电平才会发生改变,假如只在下限周围上下浮动是电平是不会发生变化的 

位设置/清除寄存器的使用原理 :如果要在某位上置1,而其它位保持不变,就在位设置寄存器中,给这对应位置1,其它位置0,这样这个位就会被置为1,其它位不变,省去了C语言&=和|=复杂繁琐的操作;置0则在位清除寄存器置1即可,其它置0的保持不变。

推挽:两个MOS管均起作用,输出给1时,P-MOS导通,N-MOS截止,输出高电平;输出给0时,P-MOS截止,N-MOS导通,输出低电平,此时高低电平均有驱动能力。

开漏:P-MOS管不起作用,只有N-MOS管有用, 输出给1时,N-MOS截止,输出高电平;输出给0时,N-MOS导通,输出低电平,此时高电平没有驱动能力,只有低电平有驱动能力,主要应用于总线挂载多个设备是防止多个设备的互相干扰或者可以在IO口配置一个上拉电阻,输出0时,N-MOS导通,输出低电平,而输出1时,N-MOS截止,IO口的上拉电阻可以将IO口拉至5V来驱动电路。

关闭:当引脚配置为输入模式时,两个MOS均关闭,不起输出作用。

四、GPIO模式

 只输入,输出开关是断开的,而输出的时候,输入也是可以进来的,除了模拟输入会关闭数字输入的功能,其它七个模式输入都是有效的。

五、硬件电路

上面两个图是低电平导通,高电平截止

下面两个图是高电平导通,低电平截止 

六、实例一(LED闪烁)

1. 接线图

2. 代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{//启动时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//初始化GPIO口GPIO_InitTypeDef GPIO_InitStructure;					GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);while (1){//写入数据,输出GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_RESET);Delay_ms(500);GPIO_WriteBit(GPIOA, GPIO_Pin_0, Bit_SET);Delay_ms(500);}
}

七、实例二(LED流水灯)

1.接线图

2.代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);while (1){GPIO_Write(GPIOA, ~0x0001);		//0000 0000 0000 0001Delay_ms(50);GPIO_Write(GPIOA, ~0x0002);		//0000 0000 0000 0010Delay_ms(50);GPIO_Write(GPIOA, ~0x0004);		//0000 0000 0000 0100Delay_ms(50);GPIO_Write(GPIOA, ~0x0008);		//0000 0000 0000 1000Delay_ms(50);GPIO_Write(GPIOA, ~0x0010);		//0000 0000 0001 0000Delay_ms(50);GPIO_Write(GPIOA, ~0x0020);		//0000 0000 0010 0000Delay_ms(50);GPIO_Write(GPIOA, ~0x0040);		//0000 0000 0100 0000Delay_ms(50);GPIO_Write(GPIOA, ~0x0080);		//0000 0000 1000 0000Delay_ms(50);}
}

八、实例三(蜂鸣器)

1.接线图

2.代码

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOB, &GPIO_InitStructure);while (1){GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);Delay_ms(100);GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);Delay_ms(100);GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_RESET);Delay_ms(100);GPIO_WriteBit(GPIOB, GPIO_Pin_12, Bit_SET);Delay_ms(700);}
}

 其为有源蜂鸣器,给低电平就会响


http://www.ppmy.cn/news/1525898.html

相关文章

a√斗地主之顺子

题目描述 在斗地主扑克牌游戏中,扑克牌由小到大的顺序为:3,4,5.6,7.8,9,10,J,Q,K,A,2,玩家可以出的扑克牌阵型有:单张、对子、顺子、飞机、炸弹等。 其中顺子的出牌规则为:由至少5张由小到大连续递增的扑克牌组成,且不能包含2。 例如:(3.4.…

【目标检测数据集】车辆分类数据集1880张7类VOC+YOLO(含摩托车、救护车、消防车、警车、警用摩托车、轿车、大车)

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1883 标注数量(xml文件个数):1883 标注数量(txt文件个数):1883 标注…

智能知识库企业微信助手,更智能、体验更好!

本文由 ChatMoney团队出品 为了增强企业内部知识的传递和共享效率,最近花了两周时间测试Chatmoney知识库 企微客服助手模式,测试效果让我很惊喜! 对话引用知识库内容,Chatmoney也会从逻辑上补全输出结果,智能知识库企微客服助手方…

VMware Fusion虚拟机Mac版 安装Ubuntu操作系统教程

Mac分享吧 文章目录 下载镜像地址:[www.macfxb.cn](http://www.macfxb.cn)一、Ubuntu安装完成,软件打开效果二、Mac中安装Ubuntu虚拟机1️⃣:下载镜像2️⃣:创建虚拟机3️⃣:虚拟机设置4️⃣:虚拟机安装5️…

cesium+vue3实体entity学习

官方文档链接:Cesium中文api文档 | Index - Cesium Documentation 官方示例链接:Cesium Sandcastle vue for cesium:A Vue 3 based component library of CesiumJS for developers | Vue for Cesium (zouyaoji.top) package.js: {"name": "demo&q…

闲云野记:24915

一、前言 本次回顾3个知识点:进程地址空间、JavaScript项目的影响优化、Vue 3 的应用路由。 二、进程地址空间 进程内核数据结构(task_struct)代码(只读的)和数据 ;进程具有独立性:多进程之间…

Android 蓝牙三方和动态权限三方

记录一下最近用到的简单的框架 蓝牙 FastBle:Android BLE通信库的介绍与高级用法 - 简书 https://github.com/Jasonchenlijian/FastBle 动态权限: GitHub - googlesamples/easypermissions: Simplify Android M system permissions 位置权限举例,arrayOf中多个…

【题解】【枚举】——First Step (ファーストステップ)

【题解】【枚举】——First Step ファーストステップ First Step (ファーストステップ)题目背景题目描述输入格式输出格式输入输出样例输入 #1输出 #1 提示 1.思路解析2.AC代码 First Step (ファーストステップ) 原题在洛谷上 题目背景 我们 Aqours,要第一次举办…