【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解

这篇具有很好参考价值的文章主要介绍了【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这句话声明一个结构体,名字是GPIO_InitStructure,结构体原型由GPIO_InitTypeDef 确定,在stm32中用来初始化GPIO。设置完GPIO_InitStructure里面的内容后然后在GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_InitStruct)里面调用。

但为什么GPIOx不需要取地址,但是GPIO_InitStructure为什么要用“&”取地址呢?

GPIO.c源文件:

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
{
  uint32_t currentmode = 0x00, currentpin = 0x00, pinpos = 0x00, pos = 0x00;
  uint32_t tmpreg = 0x00, pinmask = 0x00;
  /* Check the parameters */
  assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
  assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
  assert_param(IS_GPIO_PIN(GPIO_InitStruct->GPIO_Pin));  

后面省略

根据头文件,形参1 定义GPIOx为GPIO_TypeDef* 型为指针变量,只能是有效的指针和地址,形参2 定义GPIO_InitStruct为GPIO_InitTypeDef* 型也为指针变量,也只能是有效的指针和地址.

但当初始化设定GPIO口时,在STM32103x.h头文件中,已经定义了输入形参1的定义,所以形参1在初始化函数里不需要取地址符号,因为操作GPIOA等就是指针。

#define GPIOA               ((GPIO_TypeDef *) GPIOA_BASE)
#define GPIOB               ((GPIO_TypeDef *) GPIOB_BASE)
#define GPIOC               ((GPIO_TypeDef *) GPIOC_BASE)
#define GPIOD               ((GPIO_TypeDef *) GPIOD_BASE)
#define GPIOE               ((GPIO_TypeDef *) GPIOE_BASE)
#define GPIOF               ((GPIO_TypeDef *) GPIOF_BASE)
#define GPIOG               ((GPIO_TypeDef *) GPIOG_BASE

而当定义GPIO的初始化设置类型时,形参2 比如定义为 GPIO_InitTypeDef  GPIO_InitStructure,定义GPIO_InitStructure为GPIO_InitTypeDef 结构体类型,而不是GPIO_InitTypeDef* 。形参是指针类型,只能是指针和地址,而实参是GPIO_InitTypeDef 结构体类型,所以需要对实参进行取地址操作。所以要写成GPIO_Init(GPIOx, &GPIO_InitStructure)。文章来源地址https://www.toymoban.com/news/detail-415525.html

到了这里,关于【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stm32 - GPIO

    所有GPIO都挂在APB2总线上 寄存器:内核通过APB2总线对寄存器进行读写,实现电平的读写 GPIO引脚的每一位对应寄存器中的某一位 GPIO中的驱动器是增加信号驱动能力的,用于增大驱动能力 读取端口的高低电平或电压,ADC电压采集 输入电路引脚: 保护二极管 VDD/VSS用于电压限伏

    2024年01月17日
    浏览(29)
  • STM32 GPIO

    · 可配置为8种输入输出模式 · 引脚电平:0V~3.3V,部分引脚可容忍5V(FT) · 输出模式下可控制端口输出高低电平,用以驱动LED、控制蜂鸣器、模拟通信协议输出时序等 · 输入模式下可读取端口的高低电平或电压,用于读取按键输入、外接模块电平信号输入、ADC电压采集、模拟

    2024年02月21日
    浏览(28)
  • STM32-GPIO解析

            (一)定义: GPIO是MCU对外进行数据交互的通用IO接口,在MCU内部其可配置与其它片上外设或MCU内核(CPU)连接完成引脚上电压信号的读写。 GPIO端口在MCU上分为多个组来共同完成IO引脚读写(如GPIOA...),并且每个GPIO组掌控的IO引脚可以单独配置         (二)框图分析

    2024年02月19日
    浏览(28)
  • STM32_GPIO

    1.1GPIO特点 1,不同型号,IO口数量可能不一样,可通过选型手册快速查询 2,快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可以到50Mhz) 3,每个IO口都可以做中断 4,支持8种工作模式 1.2GPIO电气特性 1.STM32工作电压: 2 V ≤ VDD ≤ 3.6 2.GPIO识别电压范围: COMS端口:

    2024年01月17日
    浏览(24)
  • STM32 GPIO复习

    General Purpose Input Output,即通用输入输出端口,简称GPIO。 负责采集外部器件的信息或控制外部器件工作,即输入输出。 不同型号,IO口数量可能不一样,可通过选型手册快速查询。 能快速翻转,每次翻转最快只需要两个时钟周期(F1最高速度可到50MHz)。 每个IO口可以做中断

    2024年02月11日
    浏览(28)
  • STM32-GPIO

    (1)GPIO(General-Purpose input/output):通用输入输出端口的简称。是 外设 与 微控制器 (STM32等单片机)通信的通道,俗称 常用引脚。 (2)引脚电平:0V~3.3V,部分引脚可容忍5V。 (3)输出模式下可控制端口输出高低电平,以驱动LED ,控制蜂鸣器,模拟通信协议输出时序等。

    2024年03月27日
    浏览(29)
  • STM32--GPIO

    GPIO(General Purpose Input Output)是通用输入/输出口的简称 。它是一种可以 通过软件控制的端口扩展器 ,常见于各种嵌入式系统和单片机中。GPIO具有以下特点和优势: 低功耗:GPIO使用的电流较小,能够在嵌入式系统中实现低功耗的控制和监视功能。 小封装:GPIO芯片通常采用

    2024年02月13日
    浏览(29)
  • STM32 GPIO口

    划线上方为输入部分,下方为输出部分。 首先看输入部分,I/O引脚接入两个保护二极管是对电压进行限幅. VDD为3.3V,VSS为0V。 当输入电压大于3.3V,上面二极管导通,输入电压产生的电流直接;流入VDD而不流入内部电路。 当输入电压小于0V,下面二极管导通,输入电压产生的

    2024年02月19日
    浏览(25)
  • STM32 GPIO篇

    ·GPIO(General Purpose Input Output)通用输入输出口 ·可配置为8种输入输出模式 ·引脚电平: 0v~3.3v,部分引脚可容忍5v ·输出模式下可控制端口输出高低电平,用以驱动LED,控制蜂鸣器,模拟通信协议输出时序等 ·输入模式下可读取端口的高低电平或电压,用于读取按键输入,外

    2024年04月12日
    浏览(27)
  • 【【STM32之GPIO】】

    学完了正点原子自带的视频课之后感觉仍然一知半解现在更新一下来自其他版本的STM32学习 GPIO 就是 General Purpose Input Output 中文名叫通用输入输出口 可配置8种输入输出模式 引脚电平 0V~3.3V 部分引脚可容忍5V 输出模式下可控制端口输出高低电平,用以驱动LED,控制蜂鸣器,模

    2024年02月12日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包