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

stm32 学习笔记:GPIO输出

一、GPIO简介

       引脚电平 0-3.3V,部分可容忍5V,对输出而言最大只能输出3.3V,

       只要可以用高低电平来控制的地方,都可以用GPIO来完成,如果控制的功率比较大的设备,只需加入驱动电路即可

        GPIO 通用输入输出口,可配置为 8种 输入输出模式。

  • 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等。而如果控制的是功率比较大的设备,只需要再添加驱动电路即可。

  • 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入(GPIO甚至还能配置成模拟信号输入的模式,配合内部的ADC外设就能直接读取模拟电压了)、ADC电压采集、模拟通信协议接收数据等。

二、GPIO基本结构

  所有的 GPIO 都是挂载在 ABP2 总线结构上的
  每个 GPIOX 外设有 16 个引脚,编号从 0~15,比如GPIOA 的第0引脚称为 PAO
  每个 GPIO 模块内,主要包含了寄存器和驱动器这些东西,内核可以通过 APB2 总线对寄存器进行读写。
  stm32 是32位单片机,所以寄存器是32位,GPIO模块的寄存器只有低 16 对应IO 引脚
  其中的驱动器是用来增加信号的驱动能力,比如电灯操作

三、 (重要)GPIO 位结构电路

四、GPIO模式

五、外设GPIO配置

六、LED和蜂鸣器模块

七、外设硬件电路

     GPIO在推挽输出模式下,高低电平均有较强的驱动能力,但在单片机里,一般用第一种,因为使用高电平弱驱动 ,低电平强驱动的规则

 

八、LED闪烁电路接线:

 九、主要程序:

1、第一步:使用RCC初始化GPIO时钟

2、第二步:使用GPIO_Init函数初始化GPIO 

3、第三步设置高低电平 

1、点亮一个灯(低电平亮)(LED连接PA0口) 

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
int main(void)
{RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使用RCC初始化GPIO时钟//使用GPIO_Init函数初始化GPIOGPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   //点灯通用推挽输出GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;          //用的是GPIOA外设的0号引脚GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  //50兆hz的速度//用结构体的函数初始化GPIO口GPIO_Init(GPIOA,&GPIO_InitStructure);              //第二个参数为指向结构体的指针,故传地址GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);while(1){GPIO_ResetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_SetBits(GPIOA,GPIO_Pin_0);Delay_ms(500);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_RESET);//加两个延时函数Delay_ms(500);//毫秒延时函数(参数500)GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);//熄灭LEDDelay_ms(500);//毫秒延时函数(参数500)GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)0);Delay_ms(500);//毫秒延时函数(参数500)//加两个延时函数GPIO_WriteBit(GPIOA,GPIO_Pin_0,(BitAction)1);Delay_ms(500);}
}

2、流水灯(低电平亮)(LED连接PA0~PA6)

#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);GPIO_WriteBit(GPIOA,GPIO_Pin_0,Bit_SET);while(1){GPIO_Write(GPIOA,~0x0001); //0000 0000 0000 0001Delay_ms(500);GPIO_Write(GPIOA,~0x0002); //0000 0000 0000 0010Delay_ms(500);GPIO_Write(GPIOA,~0x0004); //0000 0000 0000 0100Delay_ms(500);GPIO_Write(GPIOA,~0x0008); //0000 0000 0000 1000Delay_ms(500);GPIO_Write(GPIOA,~0x0010); //0000 0000 0001 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0020); //0000 0000 0010 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0040); //0000 0000 0100 0000Delay_ms(500);GPIO_Write(GPIOA,~0x0080); //0000 0000 1000 0000Delay_ms(500);}
}

3、蜂鸣器(低电平的时候响)(蜂鸣器接口为PB12

#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_ResetBits(GPIOB,GPIO_Pin_12); Delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_12); Delay_ms(100);GPIO_ResetBits(GPIOB,GPIO_Pin_12); Delay_ms(100);GPIO_SetBits(GPIOB,GPIO_Pin_12); Delay_ms(700);}
}

十、下面是程序详解 :来自于博主的笔记:

http://www.lryc.cn/news/157226.html

相关文章:

  • css换行
  • 面试算法-常用数据结构
  • 【动态规划刷题 10】等差数列划分 最长湍流子数组
  • redis 配置与优化
  • 数据结构例题代码及其讲解-递归与树
  • Jenkins | 流水线构建使用expect免密交互时卡住,直接退出
  • git修改默认分支
  • Android Studio开发入门教程:如何更改APP的图标?
  • MATLAB/Python的编程教程: 匹配滤波器的实现
  • java八股文面试[数据库]——JOIN优化
  • Java语法中一些需要注意的点(仅用于个人学习)
  • golang 线程 定时器 --chatGPT
  • java 编程 7个简单的调优技巧
  • 03-Dockerfile
  • 【AI】机器学习——朴素贝叶斯
  • 数学建模:模糊综合评价分析
  • 智能小车—PWM方式实现小车调速和转向
  • Getx其他高级API
  • npm/yarn link 测试包时报错 Warning: Invalid hook call. Hooks can only be called ...
  • 「网页开发|前端开发|Vue」06 公共组件与嵌套路由:让每一个页面都平等地拥有导航栏
  • leetcode687. 最长同值路径(java)
  • MySQL的常用术语
  • 机器学习的特征工程
  • python3 修改nacos的yaml配置
  • YOLOv8 : 数据组织
  • golang如何生成zip压缩文件
  • AntDesign技术指南:构建优雅的前端界面
  • 机器人任务挖掘与智能超级自动化技术解析
  • C#通过ModbusTcp协议读写西门子PLC中的浮点数
  • 19-springcloud(中)