void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解
((GPIO_TypeDef *) GPIOA_BASE)表示将GPIOA_BASE强制转换为指针类型的结构体, #define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) 表示用(GPIO_TypeDef *) GPIOA_BASE代替GPIOA ,那么现在GPIOA就表示以 GPIOA_BASE为基地址的一个类型为GPIO_TypeDef结构体的一个指针,所以你程序里可以用GPIOA->CRL。
例如:
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
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;//除了定义结构体,它还把寄存器做了一个映射,映射到地址
那代码
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)
和
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOD, ENABLE); //使能PB,PE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; //LED0-->PB.5 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度为50MHz
GPIO_Init(GPIOA, &GPIO_InitStructure); //根据设定参数初始化GPIOB.5
GPIO_SetBits(GPIOA,GPIO_Pin_8); //PB.5 输出高
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //LED1-->PE.5 端口配置, 推挽输出
GPIO_Init(GPIOD, &GPIO_InitStructure); //推挽输出 ,IO口速度为50MHz
GPIO_SetBits(GPIOD,GPIO_Pin_2); //PE.5 输出高
}
中GPIOA就是一个指向结构的指针,也就是首地址。
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)的一些理解相关推荐
- LInux命令行参数
原创: Linux 微知识 在大学里面,老师一般会这样教,定义main 函数应该是这样的: 甚至是这样的: 但是其实在 Linux 下,一个正确的main 函数应该被定义为如下: 大家可以看到,mai ...
- STM32 GPIO_INIT()库函数的程序含义
STM32 GPIO一共有七个寄存器:CRL.CRH.IDR.ODR.BSRR.BRR.LCKR 具体功能不再赘述,正点原子的库函数开发指南以及STM32参考手册中都有详细的讲解,网上也有很多大佬通俗 ...
- GPIO_init()函数初始化详解
目录 1.GPIO_init()函数初始化示例 1.1 GPIO_InitTypeDef 1.2 GPIO_Init(GPIOB, &GPIO_GPIO_InitStructure) 1.3 ...
- STM32F 103C8T6开发板 点亮LED灯
每组IO口含下面7个寄存器.7个寄存器可以控制一组GPIO的16个IO口. GPIOx_CRL:端口配置低寄存器 GPIOx_CRH:端口配置高寄存器 GPIOx_IDR:端口输入寄存器 GPIOx_ ...
- stm32阶段总结笔记一
第一阶段总结笔记,主要对GPIO,串口,时钟,中断,定时器进行总结,方便后续写程序快速查阅,寄存器用来了解库函数具体怎么配置的 文章目录 一.GPIO 寄存器 库函数操作 二.中断 外部中断 寄存器 ...
- 【STM32】GPIO相关函数和类型
00. 目录 文章目录 00. 目录 01. GPIO固件库概述 02. GPIO相关类型 03. GPIO相关宏 04. GPIO相关函数 05. GPIO其它相关 06. 附录 07. 声明 01 ...
- 解读STM32标准库的程序架构 - 以GPIO操作为例
前言 在开发新产品时,想必大家都曾像我一样碰到过一时难以解决的技术难题,在苦恼和无助中,只得求助于互联网,如果在网上突然发现有此问题相关的解决办法,以此解决了困扰了一整天甚至好几天的问题,这时大家的心 ...
- c++ 结构体初始化_STM32入门系列-使用库函数点亮LED,LED初始化函数
要点亮LED,需要完成LED的驱动, 在工程模板上新建一个led.c和led.h文件,将其存放在led文件夹内.这两个文件需要我们自己编写. 通常xxx.c文件用于存放编写的驱动程序,xxx.h文件用 ...
- STM32——GPIO(2)
STM32--GPIO 宗旨:技术的学习是有限的,分享的精神是无限的. /* GPIO_InitTypeDef结构体 */ typedef enum {GPIO_Speed_10MHz = 1, // ...
最新文章
- python编码规范手册-python 编码规范整理
- MVP on Android
- .net随笔-vb.net 剪粘板(1)
- unity 解决乱码_Unity3d中IOS应用出现乱码怎么办?
- 个人学习进度条------第八周
- SAP Commerce Cloud,通过 ycommercewebservices OCC APIs 进行结账的一个技术限制
- fread函数和fwrite函数,read,write
- R7-1 What is a computer? (5 分)
- Maven创建的Web项目无法使用EL表达式
- 基于JAVA+SpringMVC+Mybatis+MYSQL的体育场地预约管理系统
- 工作2年跳槽阿里,面试官会问哪些?(免费领取Java面试题)
- 机器学习-监督学习之分类算法:K近邻法 (K-Nearest Neighbor,KNN)
- html标签的补充—— b,strong标签
- Oracle EBS R12 电子技术参考手册 - eTRM (电子文档)
- endnote修改正文中参考文献标注_Endnote之文献标注
- 【系】微信小程序云开发实战坚果商城-云开发开篇
- 分享一波前端开发也需要知道的关于 Centos、Docker、Nginx、Node、Jenkins的相关知识...
- Scrapy新手入门
- julia换源(更换国内镜像站)
- geotools 计算两个经纬度点之间的距离