你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

物联网之STM32开发二(GPIO口操作)

[复制链接]
STMCU 发布时间:2020-9-27 11:19
STM32—GPIO操作(基于STM32F051开发板)

1_meitu_1.jpg


内容概述:

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

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

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

初识人机交互——按键



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

内容概述:

GPIO接口简介

GPIO功能复用

GPIO寄存器介绍

GPIO接口简介:

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



2_meitu_2.jpg



3_meitu_3.jpg



4_meitu_4.jpg



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(端口模式寄存器):


5_meitu_5.jpg



                                              6_meitu_6.jpg



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

偏移地址: 0x00   

复位值:  

●  0x2800 0000 端口 A  

●  0x0000 0000 其他口

GPIO寄存器OTYPER(端口输出类型寄存器):




7_meitu_7.jpg


                                  8_meitu_8.jpg



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


偏移地址: 0x04  

复位值: 0x0000 0000

GPIO工作原理框图:



9_meitu_9.jpg



GPIO寄存器OSPEEDR(输出速度寄存器):





10_meitu_10.jpg




                                                 11_meitu_11.jpg



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

偏移地址: 0x08      

复位值: 0x0000 0000

GPIO寄存器PUPDR(上拉 / 下拉寄存器):


12_meitu_12.jpg



                                                   13_meitu_13.jpg



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

偏移地址: 0x0C      

复位值:   

● 0x2400 0000 端口 A   

● 0x0000 0000 其它端口


GPIO寄存器IDR(输入数据寄存器):


14_meitu_14.jpg


                                     15_meitu_15.jpg



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

偏移地址: 0x10      复位值: 0x0000 XXXX (X 表明不定 )

GPIO寄存器ODR(输出数据寄存器):


16_meitu_16.jpg



                                       17_meitu_17.jpg


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

偏移地址: 0x14      复位值: 0x0000 0000

GPIO寄存器BSRR(置位 / 复位寄存器):



18_meitu_18.jpg


                                              19_meitu_19.jpg



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

偏移地址: 0x18      复位值: 0x0000 0000

GPIO寄存器AFRL(复用功能低位寄存器):


20_meitu_20.jpg



                                        21_meitu_21.jpg


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

偏移地址: 0x20       复位值: 0x0000 0000


GPIO寄存器AFRH(复用功能高位寄存器):


22_meitu_22.jpg



                                  23_meitu_23.jpg


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

偏移地址: 0x24       复位值: 0x0000 0000


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

内容概要:

硬件原理图分析

编程步骤分析

编程实例操作

硬件原理图分析:


24_meitu_24.jpg


使能GPIO的时钟:


25_meitu_25.jpg


26_meitu_26.jpg



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

偏移地址 : 0x14   

复位值 : 0x0000 0014   

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

编程步骤分析:


  1. 开启GPIOB的时钟
  2. RCC->AHBENR  |=  1<<18;            

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

  7. 控制LED
  8. GPIOB->BSRR = (1<<16)|(1<<17)|(1<<18);     //复位PB0, PB1, PB2 既点亮LED
  9. GPIOB->BSRR = (1<<0)|(1<<1)|(1<<2);    //置位PB0, PB1, PB2 既熄灭LED
复制代码


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

内容概要:

硬件原理图分析

CubeMX配置

编程实例操作

硬件原理图分析:


27_meitu_27.jpg


CubeMX的配置:



28_meitu_28.jpg



29_meitu_29.jpg


初始化关键代码分析:


  1. 开启GPIOB的时钟
  2. RCC->AHBENR  |=  1<<18;            

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

  7. 控制LED
  8. GPIOB->BSRR = (1<<16)|(1<<17)|(1<<18);     //复位PB0, PB1, PB2 既点亮LED
  9. GPIOB->BSRR = (1<<0)|(1<<1)|(1<<2);    //置位PB0, PB1, PB2 既熄灭LED
复制代码

控制LED关键代码分析:



  1. 复位PB0, PB1, PB2 既点亮LED
  2. HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_RESET);

  3. 置位PB0, PB1, PB2 既熄灭LED
  4. HAL_GPIO_WritePin(GPIOB,  GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2, GPIO_PIN_SET);
复制代码

初识人机交互——按键

内容概要:

硬件原理图分析

CubeMX配置

编程实例操作

硬件原理图分析:

30_meitu_30.jpg


CubeMX的配置:

31_meitu_31.jpg


32_meitu_32.jpg


STM32F0硬件:

33_meitu_33.jpg

编程实例操作:按下按键灯的状态会进行翻转



  1. ​while (1)
  2.   {
  3.                 while(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)); //判断按键是否按下
  4.                 HAL_Delay(20);  //延时消抖
  5.                 while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8));  //再次判断按键是否还是按下状态
  6.                 HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2); //使灯翻转(亮灭)
  7.                 while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8));  //判断按键是否抬起
  8.                 HAL_Delay(20);   //延时消抖
  9.   }
复制代码





收藏 评论1 发布时间:2020-9-27 11:19

举报

1个回答
陌路夕颜 回答时间:2020-9-27 17:00:52
写的很详细,很清晰

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版