嵌入式学习笔记 您所在的位置:网站首页 lockdown是什么 嵌入式学习笔记

嵌入式学习笔记

#嵌入式学习笔记| 来源: 网络整理| 查看: 265

使用寄存器编程操作GPIO 前言GPIO相关的寄存器GPIO 端口模式寄存器 (GPIOx_MODER) (x = A..I)位操作 GPIO 端口输出类型寄存器 (GPIOx_OTYPER) (x = A..I)GPIO 端口输出速度寄存器 (GPIOx_OSPEEDR) (x = A..I/)GPIO 端口上拉/下拉寄存器 (GPIOx_PUPDR) (x = A..I/)GPIO 端口输入数据寄存器 (GPIOx_IDR) (x = A..I)GPIO 端口输出数据寄存器 (GPIOx_ODR) (x = A..I)GPIO 端口置位/复位寄存器 (GPIOx_BSRR) (x = A..I)GPIO 端口配置锁定寄存器 (GPIOx_LCKR) (x = A..I)GPIO 复用功能低位寄存器 (GPIOx_AFRL) (x = A..I)GPIO 复用功能高位寄存器 (GPIOx_AFRH) (x = A..I)小结 使用寄存器编程控制LED灯的亮灭原理图分析MDK代码编程 总结

前言

上一篇重点介绍了STM32 GPIO的输入输出模式,在整个框图中我们发现需要我们使用代码来控制GPIO的模式,本文的重点就是使用寄存器的编程方式,实现对于GPIO口的操作。 在这里首先需要做一个区分,我们常见的STM32的开发方式有两种,也就是寄存器开发与库函数开发。寄存器开发就是直接操作底层的寄存器来实现功能,而库函数,则是使用ST的官方库函数来实现功能,目前常用的库有基础库、HAL库、LL库。此系列都会采用直接操作寄存器的方式来实现功能。

GPIO相关的寄存器

既然是操作寄存器实现功能,就要知道与GPIO相关的寄存器有哪些,根据昨天的GPIO口模式以及框图我们可以大致猜出几个寄存器。 1.输入输出模式选择的寄存器;用来确定GPIO是输入模式还是输出模式; 2.输出类型选择的寄存器;用来选择是推挽还是开漏; 3.输出数据寄存器,暂存MCU输出的数字量; 4.输入数据寄存器,暂存外设输入的数字量; 5.上拉下拉寄存器,设置GPIO的上下拉模式; 没看手册之前,我们根据GPIO的功能以及结构猜测的有上面这五个寄存器,下面我们来看看编程手册关于GPIO的寄存器到底有哪些,又该怎么使用。 官方编程手册关于GPIO的寄存器介绍如下: 在这里插入图片描述 每个通用IO都有十个寄存器与之对应,在中文编程手册的第七章有关于这些寄存器的详细描述。 在这里插入图片描述 接下来我们来一一看一下这些寄存器的具体作用以及配置方式。

GPIO 端口模式寄存器 (GPIOx_MODER) (x = A…I)

端口模式寄存器,就是控制整个端口的模式,通过写入不同的高低电平来区分对应管脚是输入还是输出,(GPIOx_MODER) 这个中间的x就代表从A—I的端口号(x = A…I),也就是说一块STM32最多只有9个端口模式寄存器。 它是一个32位的寄存器,前面我们提当过,STM32的一个端口有0-15共16个管脚,而这个端口模式寄存器又是32位的,这就说明每个管脚的模式控制有 32/16=2位二进制数来实现。如下图所示就是端口模式的寄存器(中文编程手册第七章7.4 节 GPIO 寄存器): 在这里插入图片描述 整个寄存器一共是0-31共32位,其中第0位与第1位下面写着MODER0[1:0],这个MODER0就代表是该端口对应的0号管脚模式控制,其中00表示输入模式(复位状态也是此模式),01表示通用输出模式,10表示复用功能,11表示模拟功能。依次类推,此寄存器的第2位第三位表示该端口的1号管脚的模式控制,剩下的也都是依次类推,直至第30位与31位代表第16号管脚的模式控制。细心的同学肯定已经发现了,这个寄存器实现的功能就是我们根据结构图分析出来的第一个寄存器所需的功能啊,它就解决了GPIO口的模式问题。 举个栗子:假设我们要将GPIOA的10号管脚配置为复用功能模式,这时候我们就需要找到MODER10[1:0],,然后将复用输出模式的10写进这个寄存器。 这里就会产生一个新问题,要怎么将数据写入寄存器呢,首先能够想到的肯定是需要赋值,那么怎么赋值呢,我们来分析一下。

位操作

首先这个寄存器的命名ST公司已经给我们做好了,就在我们之前搭建工程时使用的使用的stm32f4xx.h中,这里给大家截图在下面: 在这里插入图片描述 而且ST公司还利用宏定义给出了每个端口对应结构体的指针名。 在这里插入图片描述 可以看出所有的寄存器都是用的一个结构体给封装起来了,我们要调用赋值的话就可以按照下面的语句来实现操作,这里使用的是结构体指针名->成员名的方式来操作各个寄存器的。 还是以GPIOA端口的10号管脚配置为复用输出为例:

GPIOA ->MODER |= (1 //打开GPIOA端口对应的AHB1时钟 RCC->AHB1ENR |= (1 /*------------------主循环区--------------------------*/ } }

7.点击1全编译,如果出现2所示的0errors0warings,表示代码没问题了, 8.选择下载器:笔者使用的是ST-LINK,操作如下:选择3所示的魔法棒,选择4Debug,选择ST-LINK,然后点击确定。 在这里插入图片描述 9.点击烧录,等待下方进度条为百分百,表示烧录完毕。 在这里插入图片描述 10.点击板子上的复位或者重新上电,小灯已经被点亮。 在这里插入图片描述

总结

至此,关于GPIO的寄存器配置以及一个简单的代码编程已经完成了,后面一篇我们再来尝试配置输入模式的编程过程,本文篇幅也很长,如有不足,希望大家指出,寄存器的详细介绍,大家可以去编程手册查看。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有