超经典的STM32学习笔记——第一章GPIO口
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
固件库中与GPIO有关的函数主要有:
1.1函数GPIO_Init
1.1.1:GPIO_TypeDef为一结构体:
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;
GPIOx为一宏定义:
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
其中GPIOA_BASE=0x40010800,即PA口的起始地址,#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)这句语句的作用就是将GPIOA指定到PA口的入口地址中,也就是说将PA口的寄存器组取名为GPIOA。
1.1.2:GPIO_InitTypeDef为结构体:
typedef struct
{
uint16_t GPIO_Pin;
GPIOSpeed_TypeDef GPIO_Speed;
GPIOMode_TypeDef GPIO_Mode;
}GPIO_InitTypeDef;
其中GPIO_Pin可取的值:
表面看来函数GPIO_Init只有两个输入参数,实则4个输入参数。第二个结构体中包括了三个参数,这三个参数分别是对管脚的端口,速度,和模式进行配置。这三个参数的值其实就是一些宏定义的数值。对这三个参数的选择就相当于对对应的寄存器进行配置。第一个结构体是寄存器映射,它定义在文件“stm32f10x.h”中,他的作用就是将与管脚有关的寄存器名字与硬件地址对应起来,例如寄存器CRL就相当于地址:0x40010800.第一与第二个结构体相结合并可以对某端口进行初始化了。
1.1.3:例:配置PA口为浮空输入
//定义一个名为GPIO_InitStructure的GPIO_InitTypeDef型结构体GPIO_InitTypeDef GPIO_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);
函数GPIO_ReadInputDataBit
1.2.1:例:读取PB.7口的输入值
u8 ReadValue;
ReadValue = GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_7);
1.3函数GPIO_ReadInputData
1.3.1:例:读取PC口的输入值
U16 ReadValue;
ReadValue = GPIO_ReadInputData(GPIOC);
1.4函数GPIO_SetBits
1.4.1:例:设置PA.1和PA.2口为高电平GPIO_SetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
1.5函数GPIO_RsetBits
1.5.1:例:设置PA.1和PA.2口为低电平
GPIO_RsetBits(GPIOA,GPIO_Pin_1 | GPIO_Pin_2);
1.6函数GPIO_WriteBit
1.6.1:例:设置PA.1,PA.2口为低电平
GPIO_WriteBit(GPIOA,GPIO_Pin_1 | GPIO_Pin_2,Bit_RESET);
1.7函数GPIO_Write
1.6.1:例:向PA口写入一数据
GPIO_Write(GPIOA,0X0101);
1.8:要初始化某端口时还需打开该端口的时钟及配置系统的时钟源,与之相关的两个函数为RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOD, ENABLE)和SystemInit();
2:将GOIO口配置成外部中断的输入口
2.1与NVIC相关的函数
NVIC_InitTypeDef structure
NVIC_InitTypeDef定义于文件“stm32f10x_nvic.h”:
typedef struct
{
u8 NVIC_IRQChannel;
u8 NVIC_IRQChannelPreemptionPriority;
u8 NVIC_IRQChannelSubPriority;
FunctionalState NVIC_IRQChannelCmd;
} NVIC_InitTypeDef;
NVIC_IRQChannel
该参数设置了成员NVIC_IRQChannel中的先占优先级,Table. 273 列举了该参数的取值。NVIC_IRQChannelSubPriority
该参数设置了成员NVIC_IRQChannel中的从优先级,Table. 273 列举了该参数的取值。Table. 273 给出了由函数NVIC_PriorityGroupConfig设置的先占优先级和从优先级可取的值
()()