STM32的GPIO使用

一、使用流程

1.使用RCC开启GPIO时钟

2.使用GPIO_Init 函数初始化GPIO

3.使用输出或输入函数控制GPIO口

二、RCC的常用函数

函数内容可通过这两个文件进行查看:

RCC常用函数如下:

void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState);
//RCC_AHBPeriph 选择外设
/* For @b STM32_Connectivity_line_devices STM32互联型设备       *     @arg RCC_AHBPeriph_DMA1*     @arg RCC_AHBPeriph_DMA2*     @arg RCC_AHBPeriph_SRAM*     @arg RCC_AHBPeriph_FLITF*     @arg RCC_AHBPeriph_CRC*     @arg RCC_AHBPeriph_OTG_FS    *     @arg RCC_AHBPeriph_ETH_MAC   *     @arg RCC_AHBPeriph_ETH_MAC_Tx*     @arg RCC_AHBPeriph_ETH_MAC_Rx* *   For @b other_STM32_devices, STM32其他设备       *     @arg RCC_AHBPeriph_DMA1*     @arg RCC_AHBPeriph_DMA2*     @arg RCC_AHBPeriph_SRAM*     @arg RCC_AHBPeriph_FLITF*     @arg RCC_AHBPeriph_CRC*     @arg RCC_AHBPeriph_FSMC*     @arg RCC_AHBPeriph_SDIO
*/
//NewState: 这个参数是ENABLE 或者 DISABLEvoid RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
// RCC_APB2Periph 选择外设,可选择外设如下
/* *     @arg RCC_APB2Periph_AFIO, RCC_APB2Periph_GPIOA, RCC_APB2Periph_GPIOB,*          RCC_APB2Periph_GPIOC, RCC_APB2Periph_GPIOD, RCC_APB2Periph_GPIOE,*          RCC_APB2Periph_GPIOF, RCC_APB2Periph_GPIOG, RCC_APB2Periph_ADC1,*          RCC_APB2Periph_ADC2, RCC_APB2Periph_TIM1, RCC_APB2Periph_SPI1,*          RCC_APB2Periph_TIM8, RCC_APB2Periph_USART1, RCC_APB2Periph_ADC3,*          RCC_APB2Periph_TIM15, RCC_APB2Periph_TIM16, RCC_APB2Periph_TIM17,*          RCC_APB2Periph_TIM9, RCC_APB2Periph_TIM10, RCC_APB2Periph_TIM11   
*/void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState);
//RCC_APB1Periph  可选择外设
/*@arg RCC_APB1Periph_TIM2, RCC_APB1Periph_TIM3, RCC_APB1Periph_TIM4,*          RCC_APB1Periph_TIM5, RCC_APB1Periph_TIM6, RCC_APB1Periph_TIM7,*          RCC_APB1Periph_WWDG, RCC_APB1Periph_SPI2, RCC_APB1Periph_SPI3,*          RCC_APB1Periph_USART2, RCC_APB1Periph_USART3, RCC_APB1Periph_USART4, *          RCC_APB1Periph_USART5, RCC_APB1Periph_I2C1, RCC_APB1Periph_I2C2,*          RCC_APB1Periph_USB, RCC_APB1Periph_CAN1, RCC_APB1Periph_BKP,*          RCC_APB1Periph_PWR, RCC_APB1Periph_DAC, RCC_APB1Periph_CEC,*          RCC_APB1Periph_TIM12, RCC_APB1Periph_TIM13, RCC_APB1Periph_TIM14
*/

三、GPIO函数

函数的内容可以通过这两个文件查看:

GPIO常用函数如下:

void GPIO_DeInit(GPIO_TypeDef* GPIOx);
//复位制定的GPIO外设void GPIO_AFIODeInit(void);
//复位AFIO外设void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
//GPIO的初始化函数
/*用结构体参数初始化GPIO口,需要先定义一个结构体变量,再给结构体赋值,再调用函数*/void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
//函数用于把结构体变量赋一个默认值//GPIO的读取函数
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读取GPIO口的输入状态,高电平为1,低电平为0
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//读取GPIO口的输出状态,0表示低电平,1表示高电平
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);//GPIO的写入函数
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

四、main函数

1.LED闪烁的main函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{//GPIO的初始化操作//GPIO_A的时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//定一个GPIO结构体变量GPIO_InitTypeDef GPIO_InitStructure;//制定GPIO的工作模式GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//推挽输出,最常用的工作模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;//外设引脚编号GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;//输出速度50MHz//初始化GPIO口//第一个参数:GPIOx: where x can be (A..G) to select the GPIO peripheral.//第二个参数:GPIO结构体变量GPIO_Init(GPIOC, &GPIO_InitStructure);//操作GPIO外设输入输出while (1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);//置低电平Delay_ms(2000);GPIO_SetBits(GPIOC, GPIO_Pin_13);//置高电平Delay_ms(500);//		GPIO_WriteBit(GPIOC, GPIO_Pin_0, Bit_RESET);//置低电平
//		Delay_ms(500);
//		GPIO_WriteBit(GPIOC, GPIO_Pin_0, Bit_SET);//置高电平
//		Delay_ms(500);
//		
//		GPIO_WriteBit(GPIOC, GPIO_Pin_0, (BitAction)0);
//		Delay_ms(500);
//		GPIO_WriteBit(GPIOC, GPIO_Pin_0, (BitAction)1);
//		Delay_ms(500);}
}

2.LED流水灯的main函数

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	//开启GPIOA的时钟//使用各个外设前必须开启时钟,否则对外设的操作无效/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//GPIO模式,赋值为推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;				//GPIO引脚,赋值为所有引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//GPIO速度,赋值为50MHzGPIO_Init(GPIOA, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数while (1){/*使用GPIO_Write,同时设置GPIOA所有引脚的高低电平,实现LED流水灯*/GPIO_Write(GPIOA, ~0x0001);	//0000 0000 0000 0001,PA0引脚为低电平,其他引脚均为高电平,注意数据有按位取反Delay_ms(100);	GPIO_Write(GPIOA, ~0x0002);	//0000 0000 0000 0010,PA1引脚为低电平,其他引脚均为高电平Delay_ms(100);	GPIO_Write(GPIOA, ~0x0004);	//0000 0000 0000 0100,PA2引脚为低电平,其他引脚均为高电平Delay_ms(100);	GPIO_Write(GPIOA, ~0x0008);	//0000 0000 0000 1000,PA3引脚为低电平,其他引脚均为高电平Delay_ms(100);	GPIO_Write(GPIOA, ~0x0010);	//0000 0000 0001 0000,PA4引脚为低电平,其他引脚均为高电平Delay_ms(100);	GPIO_Write(GPIOA, ~0x0020);	//0000 0000 0010 0000,PA5引脚为低电平,其他引脚均为高电平Delay_ms(100);	GPIO_Write(GPIOA, ~0x0040);	//0000 0000 0100 0000,PA6引脚为低电平,其他引脚均为高电平Delay_ms(100);	GPIO_Write(GPIOA, ~0x0080);	//0000 0000 1000 0000,PA7引脚为低电平,其他引脚均为高电平Delay_ms(100);	}
}

3.蜂鸣器鸣叫

#include "stm32f10x.h"                  // Device header
#include "Delay.h"int main(void)
{/*开启时钟*/RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);	//开启GPIOB的时钟/*GPIO初始化*/GPIO_InitTypeDef GPIO_InitStructure;					//定义结构体变量GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;		//推挽输出模式GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;				//第12号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;		//50MHzGPIO_Init(GPIOB, &GPIO_InitStructure);					//将赋值后的构体变量传递给GPIO_Init函数while (1){GPIO_ResetBits(GPIOB, GPIO_Pin_12);		//引脚设置为低电平,蜂鸣器鸣叫Delay_ms(100);							//延时100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//引脚设置为高电平,蜂鸣器停止Delay_ms(100);							//延时100msGPIO_ResetBits(GPIOB, GPIO_Pin_12);		//引脚设置为低电平,蜂鸣器鸣叫Delay_ms(100);							//延时100msGPIO_SetBits(GPIOB, GPIO_Pin_12);		//引脚设置为高电平,蜂鸣器停止Delay_ms(700);							//延时700ms}
}

参考学习资料:[3-2] LED闪烁&LED流水灯&蜂鸣器_哔哩哔哩_bilibili 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我与Linux的爱恋:yum和vim以及gcc的使用

​ ​ 🔥个人主页:guoguoqiang. 🔥专栏:Linux的学习 文章目录 ​1.Linux软件包管理器yum2.Linux开发工具3.Linux编译器 vimvim的基本概念vim的基本操作vim正常模式命令集vim末行模式命令集vim操作总结批量化注释批量化去注释简…

Windows自动化应用程序已启动/未启动,有进程无进程情况-拽起应用程序

问题分析: 应用程序能够自动登录, 可以打开后自动登录情况 我的处理方案是: 先通过 pywinauto打开应用程序, 然后,关闭前台 然后通过WinAppDriver去再次连接, 把应用置于前台 从而继续后面的元素定位 # 需要启动Hworkfrom pywinauto.application import Application# 启动Appli…

2024国赛数学建模A题B题C题D题E题思路资料模型

开始在本帖实时更新2024国赛数学建模赛题思路代码,文章末尾获取! 持续更新参考思路

写作积累之《三国演义》经典语录、第 1 集 《桃园三结义》(上)

前言 1994 年电视剧《三国演义》,由王扶林执导,中国古典名著巨献,八十四集电视连续剧 它作为一部经典的历史题材影视作品,不仅展现了三国时期的波澜壮阔、英雄辈出,更传递了许多对现代社会和个人成长都具有深远的启示…

Qt多语种开发教程

Qt作为跨平台的开发工具,早已应用到各行各业的软件开发中。 今天讲讲,Qt开发的正序怎么做多语言开发。就是说,你设置中文,就中文显示;设置英语就英文显示,设置繁体就繁体显示,设置发育就显示法语…

中国剩余定理和扩展中国剩余定理(模板)

给你一元线性同余方程组&#xff0c;如下&#xff1a; 其中&#xff0c;当 , , ... , 两两互质的话就是中国剩余定理 &#xff0c; 不互质的话就是扩展中国剩余定理。 给出中国剩余定理的计算过程和扩展中国剩余定理的推理过程&#xff1a; #include<bits/stdc.h> us…

让效率飞升的秘密武器

在当今高度竞争和信息密集的工作环境中&#xff0c;开发者的工作效率不仅仅取决于个人的编程能力&#xff0c;还依赖于所选择的编程工具。无论是智能的代码编辑器、强大的版本控制系统&#xff0c;还是自动化脚本和协作工具&#xff0c;它们都扮演着不可或缺的角色。如何正确选…

【秋招笔试】9.07滴滴秋招第一场改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集…

box64 安装

ARM运行x86程序 docker安装 box64 安装方法 docker run --name a001 -itd --networkhost -v /www/wwwroot/docker/Box64/f:/f ubuntu:22.04 /bin/bash docker exec -it a001 bash cd /home //创建目录qq547176052 mkdir -p qq547176052 cd /home/qq547176052 apt update apt …

WHAT - React 函数与 useMemo vs useCallback

目录 一、介绍useMemo 与 useCallback 的区别示例代码useMemo 示例useCallback 示例 总结 二、当一个函数被作为依赖项useMemo 和 useCallback 的适用情况选择使用 useCallback 或 useMemo总结实际例子 一、介绍 在 React 中&#xff0c;useMemo 和 useCallback 是两个用于性能…

新品上市丨科学级新款制冷相机sM4040A/sM4040B

sM4040B科学级显微制冷相机 特性 sM4040B搭载了 GSENSE4040BSI 3.2 英寸图像传感器&#xff0c;针对传感器固有的热噪声&#xff0c;专门设计了高效制冷模块&#xff0c;使得相机传感器的工作温度比环境温度低达 35-40 度。针对制冷相机常见的低温结雾现象设计了防结雾机制&a…

Notepad++ 下载安装教程

目录 1.下教程 2.安装教程 1.下教程 Downloads | Notepad (notepad-plus-plus.org) 进入下载地址后选择最新版点击连接 点击链接后&#xff0c;向下滑动&#xff0c;下载适合自己电脑版本的安装包 这里大家没有梯子可能打不开页面&#xff0c;可以直接从本文开头下载。 2.安…

阿里Java开发社会招聘面试题及参考答案

写一下修改库存的 SQL 语句 假设有一个商品库存表名为 product_inventory,包含字段 product_id(商品 ID)、quantity(库存数量)。 以下是一个简单的 SQL 语句示例,用于减少库存(假设购买一件商品): UPDATE product_inventory SET quantity = quantity - 1 WHERE produc…

实践reflex:以AI Chat APP为例

reflex demo 手册&#xff1a;Intro 以AI Chat APP为例 Interactive Tutorial: AI Chat App This tutorial will walk you through building an AI chat app with Reflex. This app is fairly complex, but dont worry - well break it down into small steps. You can find…

el-table 封装表格(完整代码-实时更新)

最新更新时间&#xff1a; 2024年9月6号 1. 添加行内编辑、表头搜索 <template><!-- 简单表格、多层表头、页码、没有合并列行 --><div class"maintenPublictable"element-loading-background"rgba(255,255,255,0.5)"><!--cell-sty…

新一代交互模式:LUICUIVUI

随着技术的发展&#xff0c;特别是人工智能和机器学习的进步&#xff0c;交互方式也在不断演变。以下是一些新概念&#xff0c;它们描述了当下和未来可能的交互方式&#xff1a; Conversational UI (CUI)&#xff1a; 以对话为基础的用户界面&#xff0c;用户通过自然语言与系统…

mysql数据库8.0小版本原地升级

mysql数据库8.0小版本原地升级 准备工作升级工作停库使用新版本软件启动数据库更新环境变量重启数据库 升级日志 OS release: CentOS 7.9升级前DB version: MySQL 8.0.30数据库升级安装包&#xff1a;mysql-8.0.36-linux-glibc2.12-x86_64.tar.xzMySQL Shell安装包&#xff1a;…

计算机网络(四) —— 简单Tcp网络程序

目录 一&#xff0c;服务器初始化 1.0 部分文件代码 1.1 关于Tcp协议 1.2 创建和绑定套接字 1.3 监听 二&#xff0c;服务器启动 2.1 获取连接 2.2 提供服务 2.3 客户端启动源文件 Main.cc 二&#xff0c;客户端编写 2.1 关于Tcp客户端 2.2 客户端代码 2.3 效果…

网络学习-eNSP配置多交换机VLAN

实验环境 通过华为eNSP软件实现 1.两台S3700交换机 2.四台电脑PC1&#xff1a;192.168.0.1PC2&#xff1a;192.168.0.2PC3&#xff1a;192.168.0.3PC4&#xff1a;192.168.0.4PC11&#xff1a;192.168.0.11PC22&#xff1a;192.168.0.22PC33&#xff1a;192.168.0.33PC44&…

win12R2安装.NET Framework 3.5

一丶安装原因 因此插件的缺失, 有些软件或系统不支持安装. 二丶安装步骤 1丶下载.NET Framework 3.5 点击插件下载, 提取码: 1995, 下载完成之后解压到想要安装的位置上. 2丶打开 服务器管理器 3丶点击: 管理 -> 添加角色和功能 4丶点击下一步到服务器角色, 选择web服…