程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

STM32库函数: GPIO部分代码细究1

发布于2021-05-30 19:56     阅读(647)     评论(0)     点赞(17)     收藏(1)


STM32库函数 :GPIO部分代码细究1

一、前言

近来比较空闲,翻看着st的代码,然后做下了今天的笔记,供有需要的人观看,有错误或者说的不对的地方也烦请大神指正,谢谢,哈哈哈。本次暂且只解析GPIO部分的代码。

二、实例代码

解析GPIO部分的代码需要参考ST的数据手册中关于GPIO寄存器相关篇幅。

1、端口清零函数:GPIO_ResetBits

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
{
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_PIN(GPIO_Pin));
  
  GPIOx->BRR = GPIO_Pin;
}

在这里插入图片描述

2、GPIO数据寄存器 结构体

要搞清楚这段代码,及其为啥这么写,需要了解GPIO数据寄存器,下面内容已经贴出。

typedef struct
{
  __IO uint32_t CRL;
  __IO uint32_t CRH;
  __IO uint32_t IDR;
  __IO uint32_t ODR;
  __IO uint32_t BSRR;
  __IO uint32_t BRR;
  __IO uint32_t LCKR;
} GPIO_TypeDef;

在这里插入图片描述

3、GPIO数据寄存器

1、端口配置低寄存器
在这里插入图片描述2、端口配置高寄存器
在这里插入图片描述
3、端口输入数据寄存器

在这里插入图片描述
4、端口输出数据寄存器
在这里插入图片描述5、端口位设置/清除寄存器
在这里插入图片描述
6、端口为清除寄存器
在这里插入图片描述

7、端口位配置锁定寄存器

在这里插入图片描述

4、端口参数及参数检查

 assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
 assert_param(IS_GPIO_PIN(GPIO_Pin));

1、参数GPIOx
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述数据手册 存储器映像

在这里插入图片描述
可以看出,GPIO寄存器地址映像跟 GPIO_TypeDef 的结构体是一致的。
在这里插入图片描述

2、参数GPIO_Pin

在这里插入图片描述

5、GPIOx->BRR = GPIO_Pin

由上可知 向 BRR 寄存器 写“ 1 ” 清零。

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */

原文链接:https://blog.csdn.net/weixin_45633643/article/details/117261535



所属网站分类: 技术文章 > 博客

作者:你看我迷人不

链接:http://www.phpheidong.com/blog/article/86745/2bbc354b93d1cf938bcc/

来源:php黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)