超经典的STM32学习笔记第一章GPIO口.docx
- 文档编号:25952806
- 上传时间:2023-06-16
- 格式:DOCX
- 页数:18
- 大小:39.44KB
超经典的STM32学习笔记第一章GPIO口.docx
《超经典的STM32学习笔记第一章GPIO口.docx》由会员分享,可在线阅读,更多相关《超经典的STM32学习笔记第一章GPIO口.docx(18页珍藏版)》请在冰豆网上搜索。
超经典的STM32学习笔记第一章GPIO口
固件库中与GPIO有关的函数主要有:
函数名
描述
GPIO_Init
根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
GPIO_ReadInputDataBit
读取指定端口管脚的输入
GPIO_ReadInputData
读取指定的GPIO端口输入
GPIO_ReadOutputDataBit
读取指定端口管脚的输出
GPIO_ReadOutputData
读取指定的GPIO端口输出
GPIO_SetBits
设置指定的数据端口位
GPIO_ResetBits
清除指定的数据端口位
GPIO_WriteBit
设置或者清除指定的数据端口位
GPIO_Write
向指定GPIO数据端口写入数据
1.1函数GPIO_Init
函数名
GPIO_Init
函数原形
voidGPIO_Init(GPIO_TypeDef*GPIOx,GPIO_InitTypeDef*GPIO_InitStruct)
功能描述
根据GPIO_InitStruct中指定的参数初始化外设GPIOx寄存器
输入参数1
GPIOx:
x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2
GPIO_InitStruct:
指向结构GPIO_InitTypeDef的指针,包含了外设GPIO的配置信息参阅Section:
GPIO_InitTypeDef查阅更多该参数允许取值范围
输出参数
无
返回值
无
先决条件
无
被调用函数
无
1.1.1:
GPIO_TypeDef为一结构体:
typedefstruct
{
__IOuint32_tCRL;//端口配置低寄存器
__IOuint32_tCRH;//端口配置高寄存器
__IOuint32_tIDR;//端口输入数据寄存器
__IOuint32_tODR;
__IOuint32_tBSRR;
__IOuint32_tBRR;
__IOuint32_tLCKR;
}GPIO_TypeDef;
GPIOx为一宏定义:
#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)
其中GPIOA_BASE=0x40010800,即PA口的起始地址,#defineGPIOA((GPIO_TypeDef*)GPIOA_BASE)这句语句的作用就是将GPIOA指定到PA口的入口地址中,也就是说将PA口的寄存器组取名为GPIOA。
1.1.2:
GPIO_InitTypeDef为结构体:
typedefstruct
{
uint16_tGPIO_Pin;
GPIOSpeed_TypeDefGPIO_Speed;
GPIOMode_TypeDefGPIO_Mode;
}GPIO_InitTypeDef;
其中GPIO_Pin可取的值:
GPIO_Pin
描述
GPIO_Pin_None
无管脚被选中
GPIO_Pin_0
选中管脚0
GPIO_Pin_15
选中管脚15
GPIO_Pin_All
选中全部管脚
GPIO_Speed可取的值:
GPIO_Speed
描述
GPIO_Speed_10MHz
最高输出速率10MHz
GPIO_Speed_2MHz
最高输出速率2MHz
GPIO_Speed_50MHz
最高输出速率50MHz
GPIO_Mode可取的值:
GPIO_Mode
描述
GPIO_Mode_AIN
模拟输入
GPIO_Mode_IN_FLOATING
浮空输入
GPIO_Mode_IPD
下拉输入
GPIO_Mode_IPU
上拉输入
GPIO_Mode_Out_OD
开漏输出
GPIO_Mode_Out_PP
推挽输出
GPIO_Mode_AF_OD
复用开漏输出
GPIO_Mode_AF_PP
复用推挽输出
表面看来函数GPIO_Init只有两个输入参数,实则4个输入参数。
第二个结构体中包括了三个参数,这三个参数分别是对管脚的端口,速度,和模式进行配置。
这三个参数的值其实就是一些宏定义的数值。
对这三个参数的选择就相当于对对应的寄存器进行配置。
第一个结构体是寄存器映射,它定义在文件“stm32f10x.h”中,他的作用就是将与管脚有关的寄存器名字与硬件地址对应起来,例如寄存器CRL就相当于地址:
0x40010800.第一与第二个结构体相结合并可以对某端口进行初始化了。
1.1.3:
例:
配置PA口为浮空输入
//定义一个名为GPIO_InitStructure的GPIO_InitTypeDef型结构体
GPIO_InitTypeDefGPIO_InitStructure;
//选中所有的端口
GPIO_InitStructure.Gpio_Pin=GPIO_Pin_All;
//选择端口的速度为10M
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_10MHz;
//选择模式为浮空输入
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;
//完成初始化
GPIO_Init(GPIOA,&GPIO_InitStructure);
1.2函数GPIO_ReadInputDataBit
函数名
GPIO_ReadInputDataBit
函数原形
u8GPIO_ReadInputDataBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin)
功能描述
读取指定端口管脚的输入
输入参数1
GPIOx:
x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2
GPIO_Pin:
待读取的端口位
输出参数
无
返回值
输入端口管脚值
先决条件
无
被调用函数
无
1.2.1:
例:
读取PB.7口的输入值
u8ReadValue;
ReadValue=GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_7);
1.3函数GPIO_ReadInputData
函数名
GPIO_ReadInputData
函数原形
u16GPIO_ReadInputData(GPIO_TypeDef*GPIOx)
功能描述
读取指定的GPIO端口输入
输入参数1
GPIOx:
x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2
GPIO_Pin:
待读取的端口位
输出参数
无
返回值
GPIO输入数据端口值
先决条件
无
被调用函数
无
1.3.1:
例:
读取PC口的输入值
U16ReadValue;
ReadValue=GPIO_ReadInputData(GPIOC);
1.4函数GPIO_SetBits
函数名
GPIO_SetBits
函数原形
voidGPIO_SetBits(GPIO_TypeDef*GPIOx,u16GPIO_Pin)
功能描述
设置指定的数据端口位
输入参数1
GPIOx:
x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2
GPIO_Pin:
待设置的端口位该参数可以取GPIO_Pin_x(x可以是0-15)的任意组合
输出参数
无
返回值
无
先决条件
无
被调用函数
无
1.4.1:
例:
设置PA.1和PA.2口为高电平
GPIO_SetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);
1.5函数GPIO_RsetBits
函数名
GPIO_ResetBits
函数原形
voidGPIO_ResetBits(GPIO_TypeDef*GPIOx,u16GPIO_Pin)
功能描述
清除指定的数据端口位
输入参数1
GPIOx:
x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2
GPIO_Pin:
待设置的端口位该参数可以取GPIO_Pin_x(x可以是0-15)的任意组合
输出参数
无
返回值
无
先决条件
无
被调用函数
无
1.5.1:
例:
设置PA.1和PA.2口为低电平
GPIO_RsetBits(GPIOA,GPIO_Pin_1|GPIO_Pin_2);
1.6函数GPIO_WriteBit
函数名
GPIO_WriteBit
函数原形
voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,u16GPIO_Pin,BitActionBitVal)
功能描述
设置或者清除指定的数据端口位
输入参数1
GPIOx:
x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2
GPIO_Pin:
待设置的端口位该参数可以取GPIO_Pin_x(x可以是0-15)的任意组合
输入参数3
BitVal:
该参数指定了待写入的值该参数必须取枚举BitAction的其中一个值Bit_RESET:
清除数据端口位Bit_SET:
设置数据端口位
返回值
无
先决条件
无
被调用函数
无
输出参数
无
1.6.1:
例:
设置PA.1,PA.2口为低电平
GPIO_WriteBit(GPIOA,GPIO_Pin_1|GPIO_Pin_2,Bit_RESET);
1.7函数GPIO_Write
函数名
GPIO_Write
函数原形
voidGPIO_Write(GPIO_TypeDef*GPIOx,u16PortVal)
功能描述
向指定GPIO数据端口写入数据
输入参数1
GPIOx:
x可以是A,B,C,D或者E,来选择GPIO外设
输入参数2
PortVal:
待写入端口数据寄存器的值
返回值
无
先决条件
无
被调用函数
无
输出参数
无
1.6.1:
例:
向PA口写入一数据
GPIO_Write(GPIOA,0X0101);
1.8:
要初始化某端口时还需打开该端口的时钟及配置系统的时钟源,与之相关的两个函数为RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE)和SystemInit();
2:
将GOIO口配置成外部中断的输入口
开始
NVIC
NVIC初始化
NVIC_Init(&NVIC_InitStructure)
优先级分组
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1)
选择某端口为中断输入端口
选择中断通道
选择中断中断模式
使能中断
响应方式
EXTI配置
编写中断服务程序
配置相应端口为上拉输入模式
中断使能
中断源
响应优先级
抢占优先级
2.1与NVIC相关的函数
(1)NVIC_PriorityGroupConfig
函数名
NVIC_PriorityGroupConfig
函数原形
VoidNVIC_PriorityGroupConfig(u32NVIC_PriorityGroup)
功能描述
设置优先级分组:
先占优先级和从优先级
输入参数
NVIC_PriorityGroup:
优先级分组位长度
参阅Section:
NVIC_PriorityGroup查阅更多该参数允许取值范围
输出参数
无
返回值
无
先决条件
优先级分组只能设置一次
被调用函数
无
NVIC_PriorityGroup的值:
NVIC_PriorityGroup
描述
NVIC_PriorityGroup_0
先占优先级0位
从优先级4位
NVIC_PriorityGroup_1
先占优先级1位
从优先级3位
NVIC_PriorityGroup_2
先占优先级2位
从优先级2位
NVIC_PriorityGroup_3
先占优先级3位
从优先级1位
NVIC_PriorityGroup_4
先占优先级4位
从优先级0位
(2)NVIC_Init
函数名
NVIC_Init
函数原形
voidNVIC_Init(NVIC_InitTypeDef*NVIC_InitStruct)
功能描述
根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器
输入参数
NVIC_InitStruct:
指向结构NVIC_InitTypeDef的指针,包含了外设GPIO的配置信息
参阅Section:
NVIC_InitTypeDef查阅更多该参数允许取值范围
输出参数
无
返回值
无
先决条件
无
被调用函数
无
NVIC_InitTypeDefstructure
NVIC_InitTypeDef定义于文件“stm32f10x_nvic.h”:
typedefstruct
{
u8NVIC_IRQChannel;
u8NVIC_IRQChannelPreemptionPriority;
u8NVIC_IRQChannelSubPriority;
FunctionalStateNVIC_IRQChannelCmd;
}NVIC_InitTypeDef;
NVIC_IRQChannel
该参数用以指定IRQ通道。
Table272.给出了该参数可取的值
NVIC_IRQChannel
描述
WWDG_IRQChannel
窗口看门狗中断
PVD_IRQChannel
PVD通过EXTI探测中断
TAMPER_IRQChannel
篡改中断
RTC_IRQChannel
RTC全局中断
FlashItf_IRQChannel
FLASH全局中断
RCC_IRQChannel
RCC全局中断
EXTI0_IRQChannel
外部中断线0中断
。
。
。
。
。
EXTI9_5_IRQChannel
外部中断线9-5中断
EXTI15_10_IRQChannel
外部中断线15-10中断
NVIC_IRQChannelPreemptionPriority
该参数设置了成员NVIC_IRQChannel中的先占优先级,Table.273列举了该参数的取值。
NVIC_IRQChannelSubPriority
该参数设置了成员NVIC_IRQChannel中的从优先级,Table.273列举了该参数的取值。
Table.273给出了由函数NVIC_PriorityGroupConfig设置的先占优先级和从优先级可取的值
Table273.先占优先级和从优先级值
(1)
(2)
NVIC_PriorityGroup
NVIC_IRQChannel的先占优先级
NVIC_IRQChannel的从优先级
描述
NVIC_PriorityGroup_0
0
0-15
先占优先级0位
从优先级4位
NVIC_PriorityGroup_1
0-1
0-7
先占优先级1位
从优先级3位
NVIC_PriorityGroup_2
0-3
0-3
先占优先级2位
从优先级2位
NVIC_PriorityGroup_3
0-7
0-1
先占优先级3位
从优先级1位
NVIC_PriorityGroup_4
0-15
0
先占优先级4位
从优先级0位
NVIC_IRQChannelCmd
该参数指定了在成员NVIC_IRQChannel中定义的IRQ通道被使能还是失能。
这个参数取值为ENABLE或者DISABLE。
例:
NVIC_InitTypeDefNVIC_InitStructure;
/*设置优先级分组*/
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
/*选择外部中断线15-10中断*/
NVIC_InitStructure.NVIC_IRQChannel=EXTI15_10_IRQChannel;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority=2;
/*使能该通道*/
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_InitStructure(&NVIC_InitStructure);
2.2与EXTI相关的函数
(1)GPIO_EXTILineConfig
函数名
GPIO_EXTILineConfig
函数原形
voidGPIO_EXTILineConfig(u8GPIO_PortSource,u8GPIO_PinSource)
功能描述
选择GPIO管脚用作外部中断线路
输入参数1
GPIO_PortSource:
选择用作外部中断线源的GPIO端口
参阅Section:
GPIO_PortSource查阅更多该参数允许取值范围
输入参数2
GPIO_PinSource:
待设置的外部中断线路
该参数可以取GPIO_PinSourcex(x可以是0-15)
输出参数
无
返回值
无
先决条件
无
被调用函数
无
例:
选择PA13为中断的输入口
GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource13);
(2)EXTI_Init
函数名
EXTI_Init
函数原形
voidEXTI_Init(EXTI_InitTypeDef*EXTI_InitStruct)
功能描述
根据EXTI_InitStruct中指定的参数初始化外设EXTI寄存器
输入参数
EXTI_InitStruct:
指向结构EXTI_InitTypeDef的指针,包含了外设EXTI的配置信息参阅Section:
EXTI_InitTypeDef查阅更多该参数允许取值范围
输出参数
无
返回值
无
先决条件
无
被调用函数
无
EXTI_InitTypeDefstructure
EXTI_InitTypeDef定义于文件“stm32f10x_exti.h”:
typedefstruct
{u32EXTI_Line;
EXTIMode_TypeDefEXTI_Mode;
EXTIrigger_TypeDefEXTI_Trigger;
FunctionalStateEXTI_LineCmd;}EXTI_InitTypeDef;
EXTI_Line
EXTI_Line选择了待使能或者失能的外部线路。
Table132.给出了该参数可取的值
EXTI_Line0
外部中断线0
……..
……..
EXTI_Line18
外部中断线18
EXTI_Mode
EXTI_Mode设置了被使能线路的模式。
Table133.给出了该参数可取的值
EXTI_Mode
描述
EXTI_Mode_Event
设置EXTI线路为事件请求
EXTI_Mode_Interrupt
设置EXTI线路为中断请求
EXTI_Trigger
EXTI_Trigger设置了被使能线路的触发边沿。
Table134.给出了该参数可取的值
EXTI_Mode
描述
EXTI_Trigger_Falling
设置输入线路下降沿为中断请求
EXTI_Trigger_Rising
设置输入线路上升沿为中断请求
EXTI_Trigger_Rising_Falling
设置输入线路上升沿和下降沿为中断请求
EXTI_LineCmd
EXTI_LineCmd用来定义选中线路的新状态。
它可以被设为ENABLE或者DISABLE。
例:
使能PA13为中断的输入通道,且下降沿触发
EXTI_InitStructure.EXTI_Line=EXTI_Line13;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_Trigger=EXTI_Trigger_Falling;//下降沿中断
/*使能中断*/
EXTI_InitStructure.EXTI_LineCmd=ENABLE;
EXTI_Init(&EXTI_InitStructure);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 经典 STM32 学习 笔记 第一章 GPIO