【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解

2023-05-16

这句话声明一个结构体,名字是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)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解 的相关文章

  • 137-基于stm32单片机智能保温杯控制装置Proteus仿真+源程序

    资料编号 137 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DS18B20传感器 电机 制作一个基于stm32单片机智能保温杯控制装置Proteus仿真 2 通过DS18b20传感器检测当前保温杯水的温度 并且
  • 136-基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真+源程序

    资料编号 136 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 蜂鸣器 制作一个基于stm32单片机家庭温湿度防漏水系统设计Proteus仿真 2 通过DHT11传感器检测当前温湿度 并且显示到L
  • 135-基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真+源程序

    资料编号 135 一 功能介绍 1 采用stm32单片机 LCD1602显示屏 独立按键 DHT11传感器 电机 超声波传感器 制作一个基于stm32单片机超声波非接触式感应水龙头控制系统Proteus仿真 2 通过DHT11传感器检测当前
  • 橙色 PI 上的双 RC522

    我的目标是使用带有 Orange PI 的双 RFID RC522 读取器 到目前为止 我只成功完成了一项工作 阅读 google armbian 和 Orange pi 论坛 这是我到目前为止所做的 硬件连接 单RC 522 MOSI g
  • 如何设置虚拟 GPIO 环回

    我目前正在开发一个应该在 Net 中使用 gpio 引脚的程序 我想在虚拟 GPIO 引脚上测试我的程序 但我不知道该怎么做 我想做一个环回 将虚拟 GPIO 1 连接到另一个虚拟 GPIO 2 我已经对串口和 tty0tty 做了类似的事
  • STM32用一个定时器执行多任务写法

    文章目录 main c include stm32f4xx h uint32 t Power check times 电量检测周期 uint32 t RFID Init Check times RFID检测周期 int main Timer
  • 毕业设计 江科大STM32的智能温室控制蓝牙声光报警APP系统设计

    基于STM32的智能温室控制蓝牙声光报警APP系统设计 1 项目简介 1 1 系统构成 1 2 系统功能 2 部分电路设计 2 1 stm32f103c8t6单片机最小系统电路设计 2 2 LCD1602液晶显示电路设计 2 2 风
  • 跟着野火学FreeRTOS:第一段(任务定义,切换以及临界段)

    在裸机系统中 系统的主体就是 C P U CPU CP U 按照预先设定的程序逻辑在 m a i n
  • Raspberry Pi RPi.GPIO 错误并带有威胁回调

    我被 Python 包中的 wait for edge 函数困住了RPi http sourceforge net p raspberry gpio python wiki Inputs 我为 GPIO 下降添加了多个事件检测 只要回调函数
  • Freertos低功耗管理

    空闲任务中的低功耗Tickless处理 在整个系统运行得过程中 其中大部分时间都是在执行空闲任务的 空闲任务之所以执行 因为在系统中的其他任务处于阻塞或者被挂起时才会执行 因此可以将空闲任务的执行时间转换成低功耗模式 在其他任务解除阻塞而准
  • for循环延时时间计算

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 pandas是什么 二 使用步骤 1 引入库 2 读入数据 总结 前言 之前做led点亮的实验 好像是被delay函数影响了 因为delay参数设置的不对
  • 嵌入式开发--STM32G4系列片上FLASH的读写

    这个玩意吧 说起来很简单 就是几行代码的事 但楞是折腾了我大半天时间才搞定 原因后面说 先看代码吧 读操作 读操作很简单 以32位方式读取的时候是这样的 data IO uint32 t 0x0800F000 需要注意的是 当以32位方式读
  • 通过JTAG恢复STM32 MCU磨掉的标记

    我有一块可能带有 STM32 MCU 的板 我想为该板制作定制固件 因为库存板有很多问题 不幸的是 电路板制造商很友善地磨掉了所有标记 有没有办法通过 jtag 获取设备 系列 ID 并将其交叉引用到型号 我能找到的一切都是关于获取芯片的唯
  • 如何检查您的内核是否支持硬件上的 GPIO?

    我的目标是控制 Intel 主板 带 C1037U 处理器的 NM70 芯片组 上 Peppermint 4 Linux 内核版本 3 8 0 中的 GPIO 引脚 如何检查您的内核是否支持硬件上的 GPIO 背景 主板 Intel NM7
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • STM32F0、ST-link v2、OpenOCD 0.9.0:打开失败

    我在用着发射台 http www ti com ww en launchpad about htmlgcc arm none eabi 4 9 2015q2 为 STM32F0 进行编译 现在我想使用该集合中的 arm none eabi
  • HAL_Delay() 陷入无限循环

    我被 HAL Delay 函数困住了 当我调用此函数 HAL Delay 时 控制陷入无限循环 在寻找问题的过程中 我发现了这个 http www openstm32 org forumthread2145 threadId2146 htt
  • 当端点和 PMA 地址均更改时,CubeMX 生成的 USB HID 设备发送错误数据

    我正在调试我正在创建的复合设备的问题 并在新生成的仅 CubeMX 代码中重新创建了该问题 以使其更容易解决 我添加了少量代码main 让我发送 USB HID 鼠标点击 并在按下蓝色按钮时使 LED 闪烁 uint8 t click re
  • 移动数组中的元素

    我需要一点帮助 我想将数组中的元素向上移动一个元素 以便新位置 1 包含位置 1 中的旧值 new 2 包含 old 1 依此类推 旧的最后一个值被丢弃 第一个位置的新值是我每秒给出的新值 我使用大小为 10 的数组 uint32 t TE
  • 使用 BeagleBone Black 内核 >= 3.8 打开/关闭 USB 电源

    我需要 关闭 gt 睡眠几秒钟 gt 打开 beaglebone black 的 USB 电源 能够对连接到 USB 的设备 华为 E220 调制解调器 进行硬件重置 已经尝试过软重置 使用取消绑定 绑定和授权0 1 但软件重置不足以使设备

随机推荐

  • 5G智慧路灯杆 赋能物联网智慧城市

    计讯物联5G智慧路灯杆的高集成度逐步成为物联网时代新型智慧城市建设中市政 交通 安防 环境等信息化接入口 多功能智慧灯杆集智能灯控 视频监控 wifi覆盖 新能源充电桩 安防报警 环境监测 交通管制 led屏 音视频广播等多功能于一体 xf
  • I2C接口及时序

    1 I2C学习要点 1 有2条双向串行线 xff0c 一条数据线SDA xff0c 一条时钟线SCL 如果只做master SCL可以只是输出 SDA在PAD上一定是inout pin xff0c 当然转为数字信号时可以分为两组 inout
  • 智慧水务RTU遥测终端机

    智慧水务RTU遥测终端机 xff0c 支持水文水资源行业规约 xff0c 实现水务项目目标数据采集与无线传输 xff0c 支持图像视频采集传输 xff0c 满足模拟量 开关量信号采集进行阀门开关等远程控制 xff0c 执行上位机命令 xff
  • 环保数采仪污水处理远程监测解决方案

    环保数采仪下污水处理远程监测解决方案 xff0c 实现污水处理 排放全过程远程监控与管理 xff0c 远程实时目标因子监测 工况监控 数据动态显示 异常报警 远程控制 报表制作 趋势分析等操作 xff0c 环保部门平台对接 xff0c 源头
  • 5G DTU终端

    5G DTU终端 5G DTU终端TD210 xff0c 支持三大运营商5G 网络 xff0c 并向下兼容4G 3G 网络制式 xff0c 组网更加便捷 xff0c 5GDTU终端可实现RS232 485 422串口数据转5G TCP IP
  • 多功能智慧杆网关_多功能杆智能网关

    计讯物联多功能智慧杆网关具备数据视频采集 组网 协议转换 控制等多功能 xff0c 连接智慧杆杆体设备传感入网 xff0c 进行前端与后端监控中心的数据交互 xff0c 实现智慧路灯杆远程智能照明控制 智慧安防 视频监控 一键报警 车流量监
  • 计讯物联水利RTU赋能智慧水务,用科技守护供水生命线

    水是城市生存和发展 群众安身立命的必备条件之一 xff0c 城市的发展以及社会经济活动都离不开水 因此 xff0c 随着信息化技术的迅猛发展 xff0c 水务数字化已成为必然趋势 计讯物联依托数字孪生可视化 物联网 大数据 三维地理信息系统
  • 计讯物联环保数采仪TS910在扬尘预警监测解决方案的应用

    方案背景 随着我国经济高速发展和城市化进程的加速 xff0c 城市建设工程规模不断扩大 xff0c 工程施工给居住区 学校 医院等周边环境带来了巨大的影响 xff0c 特别是扬尘污染带来的细颗粒物 xff0c 严重危害到人体健康和大气环境质
  • 喜讯丨计讯物联荣获厦门软件园党群服务中心篮球赛亚军

    蓄势待发迎 篮 上 xff0c 齐心协力谱新篇 12月17日 xff0c 厦门软件园党群服务中心篮球赛完美落幕 计讯物联一路过关斩将 xff0c 荣获厦门软件园党群服务中心篮球赛亚军 决胜雅马哈 xff0c 强势晋级半决赛 随着一声哨响 x
  • Ubuntu 命令行安装chrome

    1 1 下载 Google Chrome 使用Ctrl 43 Alt 43 T快捷键或者点击终端图标 xff0c 打开你的终端 使用wget来下载 Google Chrome deb 软件包 xff1a wget https dl goog
  • unity实现物体沿指定的平滑曲线移动(贝塞尔曲线拟合)

    先上原文链接 xff1a unity 实现物体沿指定的平滑曲线移动 xff08 通过贝塞尔曲线实现 xff09 以梦为马 不负韶华的博客 CSDN博客 unity 贝塞尔曲线移动 输入程序后 xff0c 首先设置Size的值 xff0c 即
  • A*Pathfind Project的使用

    本文主要是对该文章的改进 xff1a Unity学习笔记 易学易会的unity中A星寻路插件 A Pathfind Project的使用 秋瞑小雁客的博客 CSDN博客 unity 寻路插件 上述文章中的代码在运行过程中 xff0c 角色到
  • 如何在Ubuntu上安装Apache Http服务器

    有两种方法可以在Ubuntu上安装Apache Http服务器 xff1a 使用apt命令自动安装 配置和构建源代码 xff0c 然后手动安装 1 自动安装 1 使用 apt cache search 命令搜索Apache软件包 apt c
  • Ubuntu18.04安装ROS系统

    1 Ubuntu与ROS的版本对应 Ubuntu ROS1 016 04LTSKinetic LTS18 04LTSMelodic LTS20 04LTSNoetic LTS 2 安装 本文为Ubuntu18 04版本下的安装 2 1准备工
  • 从Unity导出Obj格式的地形(Terrian)

    1 在Unity中创建C 脚本 using UnityEngine using System Collections using UnityEditor using System IO using UnityEngine SceneMana
  • Unity导出工作台(Console)数据

    首先在Unity中添加C 脚本 xff1a using System Collections using System Collections Generic using UnityEngine using UnityEditor usin
  • 2022研究生数学建模B题思路

    子问题1 xff1a 排样优化问题 要求建立混合整数规划模型 xff0c 在满足生产订单需求和相关约束条件下 xff0c 尽可能减少板材用量 约束 1 在相同栈 stack xff09 里的产品项 item xff09 的宽度 xff08
  • 找到并标记Mesh顶点

    1 在Unity 3D中新建一个物体 本文以Cube为例 2 创建一个C 脚本 命名为MeshTest 3 在脚本中写入程序 在打开的脚本 MeshTest 上编写代码 xff0c 首先获取 MeshFilter 组件 xff0c 然后获取
  • win11 命令 wmic:无效的指令 解决办法

    我想你肯定看到过让你修改环境变量的方法 但是 xff0c 如果你的电脑就根本没有装wmic xff0c 再怎么修改环境变量也是徒劳 我们打开设置 xff1a Win 43 I 点击应用 选择 可选功能 添加可选功能 搜索wmic xff0c
  • 【STM32】GPIO_InitTypeDef GPIO_InitStructure;语句的理解

    这句话声明一个结构体 xff0c 名字是GPIO InitStructure xff0c 结构体原型由GPIO InitTypeDef 确定 xff0c 在stm32中用来初始化GPIO 设置完GPIO InitStructure里面的内容