stm32---使用库函数点亮一个LED

目标:理解并运用库函数来点亮一个LED

1.LED模块硬件电路
捕获.PNG
在led相应端口输入低电平点亮


2.GPIO库函数介绍

  • (1)GPIO外设的库文件:
    stm32f10x_gpio.c -----外设源码
    stm32f10x_gpio.h -----外设头文件

<1>初始化函数

void GPIO_Init(GPIO_TypeDef* GPIOx,GPIO_InitTypeDef* GPIO_InitStruct)
功能:初始化一个或多个IO口(同一组端口)的工作模式、输出速度即GPIO的2个配置寄存器。
GPIOx是和指针,数值GPIO各个组的地址,GPIO_InitStruct是一个结构体指针,结构体里有各个模式。


初始化范例:

GPIO_InitTypeDef  GPIO_InitStructure; //定义结构体变量
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //选择你要设置的IO口
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;//IO口模式选择,设置推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;	//设置传输速率

GPIO_Init(GPIOC , &GPIO_InitStructure);/* 初始化GPIO &GPIO_InitStructure相当于一个指针,指向GPIO_InitStructure*/
可以一次对多个管脚进行初始化,前提必须是它们的配置模式需一样。
比如: 
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;//且只能在一个GPIO的组别里,如果想选择全部就直接写GPIO_Pin_All

<2>设置管脚输出电平函数

void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:设置某个IO口为高电平(可同时设置同一端口的多个IO)。底层
是通过配置BSRR寄存器。
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
功能:设置某个IO口为低电平(可同时设置同一端口的多个IO)。底层
是通过配置BSRR寄存器。

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal); //设置单个或多个引脚
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal); //设置全组引脚

功能:设置端口管脚输出电平,很少使用。
GPIO_TypeDef* GPIOx是组别改变x来表示不同组别
uint16_t GPIO_Pin是组别里面的那个引脚,这已经在初始化中定义了
BitAction BitVal表示高低电平有SetBits高电平,ReSetBits低电平
uint16_t PortVal全组引脚,比如全关,0xffff


<3>读取管脚输入电平函数

uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_tGPIO_Pin);

功能:读取端口中的某个管脚输入电平。底层是通过读取IDR寄存器。

uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);

功能:读取某组端口的输入电平。底层是通过读取IDR寄存器。


<4>读取管脚输出电平函数

uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

功能:读取端口中的某个管脚输出电平。底层是通过读取ODR寄存器。

uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);

功能:读取某组端口的输出电平。底层是通过读取ODR寄存器


(3)使能GPIO时钟函数

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph_GPIOx, FunctionalState NewState);
  • RCC_APB2Periph是总线上上的某个GPIO分组的时钟
  • NewState是状态,设置次端口分组是否可用,有ENABLE和DISABLE

不同的外设调用的时钟使能函数可能不一样
列子:
使能GPIOC端口时钟:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);

猜你喜欢

转载自blog.csdn.net/weixin_43554366/article/details/86559209