历史上的今天
今天是:2024年09月25日(星期三)
2019年09月25日 | 物联网之STM32开发二(GPIO口操作)
2019-09-25 来源:eefocus
STM32—GPIO操作(基于STM32F051开发板)

内容概述:
GPIO的基本概念及寄存器介绍
照亮电子世界的那盏灯——LED寄存器版
照亮电子世界的那盏灯——LED库函数版
初识人机交互——按键
GPIO的基本概念及寄存器介绍:
内容概述:
GPIO接口简介
GPIO功能复用
GPIO寄存器介绍
GPIO接口简介:
通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。


GPIO功能复用:《 STM32F0数据手册》可以方便查看(P29-P30)
手册下载链接:https://pan.baidu.com/s/1FTYOR_MuwWyWnZSVDXoPzg 密码:mg63

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
GPIO工作原理框图:

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寄存器版
内容概要:
硬件原理图分析
编程步骤分析
编程实例操作
硬件原理图分析:

使能GPIO的时钟:


AHB 外部时钟使能寄存器 (RCC_AHBENR)
偏移地址 : 0x14
复位值 : 0x0000 0014
访问:无等待周期,字,半字和字节访问
编程步骤分析:
开启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
照亮电子世界的那盏灯——LED库函数版
内容概要:
硬件原理图分析
CubeMX配置
编程实例操作
硬件原理图分析:

CubeMX的配置:


初始化关键代码分析:
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); //配置好后开始初始化
}
控制LED关键代码分析:
复位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);
初识人机交互——按键
内容概要:
硬件原理图分析
CubeMX配置
编程实例操作
硬件原理图分析:

CubeMX的配置:


STM32F0硬件:

编程实例操作:按下按键灯的状态会进行翻转
while (1)
{
while(!HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)); //判断按键是否按下
HAL_Delay(20); //延时消抖
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)); //再次判断按键是否还是按下状态
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2); //使灯翻转(亮灭)
while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_8)); //判断按键是否抬起
HAL_Delay(20); //延时消抖
}
史海拾趣
|
新手提问,请勿取笑,呵呵。 S3C2410在管脚复用的时候有这样一段代码: //set GPG1 as EINT9 for CS8900A value = INREG32(&pOalPortRegs->GPGCON); OUTREG32(&pOalPortRegs->GPGCON,(value & ~(3… 查看全部问答> |
|
产品最初正常工作,内核和应用程序都好的。过了一段时间后启动异常。 步骤是开机Bootloader启动,启动时加载了LOGO界面填充了液晶的显示缓冲区,后来就停在这里了。 我可以按照原来的方式烧内核,更换了画面也可以显示。 重烧了BOOTLOADER后也没 ...… 查看全部问答> |
|
在应用程序里如何查询某个USB连在哪一个USB controller上 在具有多个USB controller和多个USB设备的情况下, 如何查询这些USB设备连接在哪个USB controller上。 设备管理器中,如果选择“依连接排序设备”,就可以看到所 有设备的Device Tree,VC里有什么API或者什么方法可以获得 类似的信息吗? 请高 ...… 查看全部问答> |
|
看看有没有问题,第一次玩STM32,没有什么经验,硬件是按照st-link制作的,做了一些修改(st-link本来也是一块开发板)。准备自己做JTAG下载工具或者调试工具,呵呵,如果搞的定的话。PCB还没铺地,其他都OK了。发现一个错误,应该BOOT1接地,BO ...… 查看全部问答> |
|
μC/OS-II实时性能测试指标 衡量嵌入式实时操作系统的好坏一般主要参考以下主要性能指标参数: 任务切换时间、中断响应时间、任务响应时间、任务创建/删除时间、交替信号量时间、取得/释放信号量时间、交替消息队列传输时间等。本文仅对前2个 ...… 查看全部问答> |




