LV.23 D3 STM32 GPIO口操作平台介绍 学习笔记

一、GPIO的基本概念及寄存器介绍

1.1 GPIO接口简介

        通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。

 

GPIO引脚如果是输入模式,就可以感知这条线路的高低电平变化,从而判断按键是按下还是抬起

GPIO引脚如果是输出模式,就可以向这条线路发送高低电平,从而使LED灯点亮或熄灭。

1.2 GPIO功能复用

 注:查看 《 STM32F0数据手册》

1.3 GPIO寄存器介绍

STM32F051-GPIO常用寄存器  

        4个32位配置寄存器        

        GPIOx_MODER,  GPIOx_OTYPER,  GPIOx_OSPEEDR     GPIOx_PUPDR  

        2个32位数据寄存器      

        GPIOx_IDR 、GPIOx_ODR

        1 个32 位置位 / 复位寄存器      

        GPIOx_BSRR

        2 个 32 位复用功能配置寄存器      

        GPIOx_AFRH 、GPIOx_AFRL

注:每一组GPIO端口都有一套上述的寄存器去配置它自己的功能 

GPIO寄存器MODER 

 

GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..D,F)    

偏移地址: 0x00    

复位值:  

●  0x2800 0000 端口 A  

●  0x0000 0000 其他口

GPIO寄存器OTYPER

 

GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..D,F)  

偏移地址: 0x04  

复位值: 0x0000 0000

设置为推挽输出时,P-MOS和N-MOS都可以工作,就可以输出高低电平。

设置为开漏输出时,只有N-MOS工作,只能输出低电平 

GPIO寄存器OSPEEDR

 

GPIO 口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..D,F)      

偏移地址: 0x08      

复位值: 0x0000 0000

GPIO寄存器PUPDR

 

如果配置为上拉,默认情况下就输出高电平,如果配置为下拉,默认情况下就输出低电平。 

GPIO 口上拉 / 下拉寄存器 (GPIOx_PUPDR) (x = A..D,F)      

偏移地址: 0x0C      

复位值:     ● 0x2400 0000 端口 A     ● 0x0000 0000 其它端口

GPIO寄存器IDR

GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..D,F)      

偏移地址: 0x10      

复位值: 0x0000 XXXX (X 表明不定 )

GPIO寄存器ODR

 

GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..D,F)      

偏移地址: 0x14      

复位值: 0x0000 0000

GPIO寄存器BSRR

 

GPIO 端口置位 / 复位寄存器 (GPIOx_BSRR) (x = A..D,F)      

偏移地址: 0x18      

复位值: 0x0000 0000

GPIO寄存器AFRL

 

GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A..B)      

偏移地址: 0x20      

复位值: 0x0000 0000

GPIO寄存器AFRH

 

GPIO 复用功能低位寄存器 (GPIOx_AFRH) (x = A..B)      

偏移地址: 0x24      

复位值: 0x0000 0000

二、照亮电子世界的那盏灯——LED寄存器版

2.1 硬件原理图分析

使能GPIO的时钟

AHB 外部时钟使能寄存器 (RCC_AHBENR)    

偏移地址 : 0x14    

复位值 : 0x0000 0014    

访问:无等待周期,字,半字和字节访问

2.2 编程步骤分析

开启GPIOB的时钟

RCC->AHBENR  |=  1<<18;            


配置PB0 PB1 PB2接口

GPIOB->MODER |= (1<<0)|(1<<2)|(1<<4);    //设置PB0, PB1, PB2为通用输出模式
GPIOB->OTYPER = 0x0;                     //设置PB0, PB1, PB2为通用推挽输出
GPIOB->OSPEEDR = 0x0;                    //设置输出速度为低速


控制LED;       

GPIOB->BSRR = (1<<16)|(1<<17)|(1<<18);     //复位PB0, PB1, PB2 既点亮LED
GPIOB->BSRR = (1<<0)|(1<<1)|(1<<2);        //置位PB0, PB1, PB2 既熄灭LED

2.3 编程实例操作

1、先写一个初始化函数 

 2、在main函数中调用初始化函数

3、控制LED灯

4、连接开发板,点击编译,再点击下载。按下开发板上的复位键,即可看到LED灯闪烁。

三、照亮电子世界的那盏灯——LED库函数版

3.1 硬件原理图分析

 

3.2 CubeMX配置

 

3.3 初始化关键代码分析

 GPIOB初始化

void MX_GPIO_Init(void)
{
  	GPIO_InitTypeDef GPIO_InitStruct;

	__HAL_RCC_GPIOB_CLK_ENABLE();                                  //使能GPIOB的时钟
	
	 GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;       //初始化对象为0, 1, 2号管脚
 	 GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;                   //模式为推挽输出
 	 GPIO_InitStruct.Pull = GPIO_NOPULL;                           //没有上拉
 	 GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;                  //低速
	  HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);                      //配置好后开始初始化
}

  复位PB0, PB1, PB2 既点亮LED

HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);

  置位PB0, PB1, PB2 既熄灭LED

HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_SET);

3.4编程实例操作

1、把相应的管脚选择为GPIO_Output功能

 

 2、点击GPIO图标后,可以进行更详细的配置

 

 

 3、点击导出,再点击Open Project打开工程,再在main函数中调用HAL_GPIO_WritePin函数

四、初识人机交互——按键

4.1 硬件原理图分析

五向键的五个按键默认是接地的, 是低电平状态,按下后,会产生高电平

从图中可以看出,五向键连接到核心板的PA8 

4.2CubeMX配置

 

本次实验使用五向键 

4.3编程实例操作

要求:按下按键灯的状态会进行翻转 

1、把PB0、PB1、PB2管脚设置为输出,PA8管脚设置为输入

 

 2、打开工程文件,在main.c文件的main函数中输入:

 while (1)
  {
		if(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8) == GPIO_PIN_SET)
		{
			while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8) == GPIO_PIN_SET);		//等待按键抬起
			
			HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2);	//翻转LED灯
		}

3、编译、下载到开发板

五、作业

 编程实现STM32流水灯

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/392132.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

文件上传漏洞--Upload-labs--Pass02--Content-Type绕过

一、什么是 Content-Type 我们在上传文件时利用 Burpsuite 进行抓包&#xff0c;如下图所示&#xff1a; 上传文件后台的源代码可能会对 Content-Type 进行规定&#xff0c;设置白名单 或 黑名单&#xff0c;这时就要利用Content-Type绕过上传含有恶意代码的 php文件。 二、代…

2023年中国数据智能管理峰会(DAMS上海站2023):核心内容与学习收获(附大会核心PPT下载)

随着数字经济的飞速发展&#xff0c;数据已经渗透到现代社会的每一个角落&#xff0c;成为驱动企业创新、提升治理能力、促进经济发展的关键要素。在这样的背景下&#xff0c;2023年中国数据智能管理峰会&#xff08;DAMS上海站2023&#xff09;应运而生&#xff0c;汇聚了众多…

解锁Spring Boot中的设计模式—03.委派模式:探索【委派模式】的奥秘与应用实践!

委派模式 文章目录 委派模式1.简述**应用场景****优缺点****业务场景示例** 2.类图3.具体实现3.1.自定义注解3.2.定义抽象委派接口3.3.定义具体执行者3.4.定义委派者(统一管理委派任务)3.5.定义委派者管理类 4.测试4.1.controller层4.2.测试不同场景4.2.1.测试生产部门计算费用…

排序前言冒泡排序

目录 排序应用 常见的排序算法 BubbleSort冒泡排序 整体思路 图解分析 ​ 代码实现 每趟 写法1 写法2 代码NO1 代码NO2优化 时间复杂度 排序概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递…

python in Vscode

背景 对于后端的语言选择&#xff1a; python&#xff0c;java&#xff0c;JavaScript备选。 选择Python 原因&#xff1a;可能是非IT专业的人中&#xff0c;会Python的人比较多。 目的 之前使用的IDE是VSCODE&#xff0c;在WSL的环境下使用。现在需要在在WSL的VSCODE下使…

【开源】SpringBoot框架开发创意工坊双创管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 管理员端2.2 Web 端2.3 移动端 三、系统展示四、核心代码4.1 查询项目4.2 移动端新增团队4.3 查询讲座4.4 讲座收藏4.5 小程序登录 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的创意工坊双创管理…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之NavRouter组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之NavRouter组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、NavRouter组件 导航组件&#xff0c;默认提供点击响应处理&#xff0c;不需要…

MySQL数据库⑪_C/C++连接MySQL_发送请求

目录 1. 下载库文件 2. 使用库 3. 链接MySQL函数 4. C/C链接示例 5. 发送SQL请求 6. 获取查询结果 本篇完。 1. 下载库文件 要使用C/C连接MySQL&#xff0c;需要使用MySQL官网提供的库。 进入MySQL官网选择适合自己平台的mysql connect库&#xff0c;然后点击下载就行…

相机图像质量研究(27)常见问题总结:补光灯以及遮光罩对成像的影响--遮光罩

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

视频生成模型作为世界模拟器

我们探索了在视频数据上大规模训练生成模型。具体来说&#xff0c;我们联合训练文本条件扩散模型&#xff0c;处理不同持续时间、分辨率和宽高比的视频和图像。我们利用一种在时空补丁上操作视频和图像潜码的transformer架构。我们最大的模型&#xff0c;Sora&#xff0c;能够生…

【初始RabbitMQ】了解和安装RabbitMQ

RabbitMQ的概念 RabbitMQ是一个消息中间件&#xff1a;他可以接受并转发消息。例如你可以把它当做一个快递站点&#xff0c;当你要发送一个包 裹时&#xff0c;你把你的包裹放到快递站&#xff0c;快递员最终会把你的快递送到收件人那里&#xff0c;按照这种逻辑 RabbitMQ 是 …

数据的力量:构筑现代大型网站之数据库基础与应用

目录 数据库基础知识--前言 大型网站架构特点 DBA数据库管理员 什么是数据? 数据存储 什么是数据库 数据表的概念 为什么需要mysql这样的数据库管理工具&#xff1f;★ DBMS 收费数据库与免费数据库 运维和数据库 开发与运维的不同阶段 数据库类别 数据库具体应用…

【Linux】进程信号的保存 | 自定义捕捉

文章目录 三、信号的阻塞&#xff08;信号的保存&#xff09;1. 信号相关其他常见概念2. 在内核中的表示3. sigset_t类型4. 信号集操作函数函数列表注意事项 5. 读取/修改block位图 - sigprocmask6. 读取pending位图 - sigpending 四、信号捕捉1. 信号捕捉的初步认识自定义捕捉…

安卓AndroidStdio控制台乱码解决

安卓AndroidStdio控制台乱码解决 情况&#xff1a; 在AndroidStudio中新建了一个Java Module&#xff0c;但是点击 Run ‘app’之后&#xff0c;Build Output 控制台输出的中文都是乱码&#xff0c;都是问号一样的字符 第一个解决方案 File Encodings 改为UTF-8&#xff1f; …

鸿蒙语言ArkTS(更好的生产力与性能)

ArkTS是鸿蒙生态的应用开发语言 ArkTS提供了声明式UI范式、状态管理支持等相应的能力&#xff0c;让开发者可以以更简洁、更自然的方式开发应用。 同时&#xff0c;它在保持TypeScript&#xff08;简称TS&#xff09;基本语法风格的基础上&#xff0c;进一步通过规范强化静态检…

5G——小区搜索流程

小区搜索流程 小区搜索目标&#xff1a;读取到SIB1. 小区搜索流程概述&#xff1a;SIB1在PDSCH信道承载&#xff0c;承载SIB1的信道在哪个位置由PDCCH告诉&#xff0c;而PDCCH的基本信息由MIB告诉&#xff0c;MIB信息由广播信道PBCH广播出去&#xff0c;物理信道解调需要解调…

Codeforces Round 926 (Div. 2) C. Sasha and the Casino (Java)

Codeforces Round 926 (Div. 2) CC. Sasha and the Casino (Java) 比赛链接&#xff1a;Codeforces Round 926 (Div. 2) C题传送门&#xff1a;C. Sasha and the Casino 题目&#xff1a;C. Sasha and the Casino **Example ** input 2 1 7 2 1 1 2 3 15 3 3 6 4 4 5 5 4 7…

EXCEL中不错的xlookup函数

excel中一般要经常用vlookup函数&#xff0c;但其实经常麻烦要正序&#xff0c;从左边到右边&#xff0c;还要数列&#xff0c;挺麻烦的&#xff0c;xlookup的函数还不错&#xff0c;有个不错的一套视频介绍,B站的&#xff0c;地址是&#xff1a;XLOOKUP函数基础用法&#xff0…

BIG DATA —— 大数据时代

大数据时代 [英] 维克托 迈尔 — 舍恩伯格 肯尼斯 库克耶 ◎ 著 盛杨燕 周涛◎译 《大数据时代》是国外大数据研究的先河之作&#xff0c;本书作者维克托迈尔舍恩伯格被誉为“大数据商业应用第一人”&#xff0c;他在书中前瞻性地指出&#xff0c;大数据带来的信息…

2024.2.17日总结(小程序开发)

父子组件之间的通信 父子组件之间通信的3种方式 属性绑定 用于父组件向子组件的指定属性设置数据&#xff0c;仅能设置JSON 兼容的数据属性绑定用于实现父向子传值&#xff0c;而且只能传递普通类型的数据&#xff0c;无法将方法传递给子组件 事件绑定 用于子组件向父组件…