博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
GPIO
阅读量:4974 次
发布时间:2019-06-12

本文共 3473 字,大约阅读时间需要 11 分钟。

关键字:初始化  所有寄存器  所有函数

初始化项目,(根据初始化结构体GPIO_InitTypeDef):模式、开漏或推挽、pin脚、上拉下拉、速度,设置4个配置寄存器值

GPIO_InitTypeDef GPIO_LED;

GPIO_LED.GPIO_Mode=GPIO_Mode_OUT;
GPIO_LED.GPIO_OType=GPIO_OType_OD;//
GPIO_LED.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
GPIO_LED.GPIO_PuPd=GPIO_PuPd_NOPULL;//
GPIO_LED.GPIO_Speed=GPIO_Low_Speed;

涉及寄存器,每组GPIOx,16pin:4个32位配置寄存器,每个PIN角2位,不进行设置均有复位值,对应为复位状态

                GPIOx_MODER:模式寄存器,模式包括---输入模式(复位)、通用输出模式、复用功能模式、模拟模式

                GPIOx_OTYPER:输出类型寄存器,类型包括---推挽输出(复位)、开漏输出

                GPIOx_OSPEEDR:输出速度寄存器,速度包括---低速、中速、高速、最高速,不同GPIO组复位值不一样

                 GPIOx_PUPDR:端口上拉/下拉寄存器,---无上拉或下拉、上拉、下拉、保留,不同GPIO组复位值不一样

                2个32位数据寄存器,每个PIN脚1位

                 GPIOx_IDR:端口数据输入寄存器,高16位保留,使用低16位

                 GPIOx_ODR:端口数据输出寄存器,高16位保留,使用低16位

                1个32位置位/复位寄存器,

                GPIOx_BSRR:高16位负责16个pin脚复位,写0不对输出数据寄存器 GPIOx_ODR进行任何操作,写1对GPIOx_ODR相应位复位;低16位同理,但功能是置位

                1 个 32 位锁定寄存器,(不常用)

                GPIOx_LCKR:每个锁定位冻结一个特定的配置寄存器(控制寄存器和复用功能寄存器)。功能感觉不常用,用到再查。

                2 个 32 位复用功能选择寄存器

                GPIOx_AFRL:低位复用功能寄存器,低8个PIN脚复用功能配置,每个PIN脚4位,复用功能AF0-AF15

                GPIOx_AFRH:高位复用功能寄存器,高8个PIN脚复用功能配置,每个PIN脚4位,复用功能AF0-AF15

所有GPIO函数

/* Function used to set the GPIO configuration to the default reset state ****/

1.void GPIO_DeInit(GPIO_TypeDef* GPIOx);不常用

功能:通过使能失能AHB1总线时钟设置配置寄存器为默认值,此时各个PIN脚为复位状态,当GPIO_Init设置为复位状态时,则GPIO_Init可以被次函数替代,否则不能用此函数。

参数:GPIOx GPIOA~GPIOE,其他系列更多或更少端口组

涉及寄存器:RCC->RCC->AHB1ENR 时钟使能失能寄存器

 

 

/* Initialization and Configuration functions *********************************/

2.void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);常用,配合GPIO_InitTypeDef结构体使用

功能:设置配置寄存器为特定值,各个PIN脚状态自定义。

参数:GPIOx GPIOA~GPIOE,其他系列更多或更少端口组

    GPIO_InitStruct  GPIO_InitTypeDef结构体类型的指针地址

涉及寄存器:GPIOx_MODER、GPIOx_OTYPER、GPIOx_OSPEEDR、GPIOx_PUPDR即上述的4个32位配置寄存器

3.void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);不常用

功能:设置GPIO_InitTypeDef结构体为默认值,并不涉及实际模式设置

参数:GPIO_InitStruct  GPIO_InitTypeDef结构体类型的指针地址

涉及寄存器:不涉及

4.void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:锁定位冻结一个特定的配置寄存器(控制寄存器和复用功能寄存器)

参数:GPIOx GPIOA~GPIOE,其他系列更多或更少端口组

   GPIO_Pin GPIO_Pin GPIO_Pin_0~GPIO_Pin_15 或者GPIO_Pin_All或者任意几个脚相或

涉及寄存器:GPIOx_LCKR

 

 

 

/* GPIO Read and Write functions **********************************************/此部分见函数名即可理解,不分析

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:

参数:

涉及寄存器:GPIOx_IDR

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

功能:

参数:

涉及寄存器:GPIOx_IDR

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:

参数:

涉及寄存器:GPIOx_ODR

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

功能:

参数:

涉及寄存器:GPIOx_ODR

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:

参数:

涉及寄存器:GPIOx_BSRR

void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:

参数:

涉及寄存器:GPIOx_BSRR

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);

功能:但不知道reset还是set,可以直接用次函数写0或写1

参数:BitVal: Bit_RESET或0,Bit_SET或1

涉及寄存器:GPIOx_BSRR

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

功能:

参数:

涉及寄存器:GPIOx_ODR

void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:特定脚数据翻转,使用位异或GPIOx->ODR ^= GPIO_Pin; 实现,原理是任何数(0,1)和0相异或保持不变,和1相异或翻转

参数:

涉及寄存器:GPIOx->ODR

/* GPIO Alternate functions configuration function ****************************/

void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);

功能:

参数:

涉及寄存器:

 

 

 

 

 

 

 

 

 

 

 

 

                

 

转载于:https://www.cnblogs.com/ycpkbql/p/7684814.html

你可能感兴趣的文章
UINavigationController的视图层理关系
查看>>
html阴影效果怎么做,css 内阴影怎么做
查看>>
BZOJ1026: [SCOI2009]windy数
查看>>
样板操作数
查看>>
组件:slot插槽
查看>>
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
php PDO (转载)
查看>>
wordpress自动截取文章摘要代码
查看>>
[置顶] 一名优秀的程序设计师是如何管理知识的?
查看>>
highcharts 图表实例
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
宏定义
查看>>
笔记:git基本操作
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>