超经典的STM32学习笔记——第一章GPIO口

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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设置的先占优先级和从优先级可取的值

()()

相关文档
最新文档