//标准库函数学习
//GPIO部分:
//常用函数:
1.void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
/*
函数功能:打开AHB1外设时钟
返回值:void
形参:
①uint32_t RCC_AHB1Periph-----------RCC_AHB1Periph_GPIOx(对应具体IO口)
②FunctionalState NewState----------具体状态(使能 / 禁止)
*/
2.void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
/*
函数功能:初始化GPIO
返回值:void
形参:
①GPIO_TypeDef* GPIOx-------------GPIOx(具体GPIO端号)
②GPIO_InitTypeDef* GPIO_InitStruct-----------------&GPIO_InitStruct(具体GPIO结构体地址)
*/
3.void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
/*
函数功能:管脚置位
返回值:void
形参:
①GPIO_TypeDef* GPIOx---------------GPIOx(具体GPIO端号)
②uint16_t GPIO_Pin----------------GPIO_Pin_x(具体管脚号)
*/
3.void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
/*
函数功能:管脚复位
*/
4.uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
/*
函数功能:读取对应位输入数据
返回值:uint8_t
形参:
①GPIO_TypeDef* GPIOx---------------GPIOx(具体GPIO端号)
②uint16_t GPIO_Pin----------------GPIO_Pin_x(具体管脚号)
*/
5.uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
/*
函数功能:读取对应位输出数据
返回值:uint8_t
形参:
①GPIO_TypeDef* GPIOx---------------GPIOx(具体GPIO端号)
②uint16_t GPIO_Pin----------------GPIO_Pin_x(具体管脚号)
*/
6.void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
/*
函数功能:向对应管脚写入对应数据
返回值:void
形参:
①GPIO_TypeDef* GPIOx---------------GPIOx(具体GPIO端号)
②uint16_t GPIO_Pin----------------GPIO_Pin_x(具体管脚号)
③BitAction BitVal-----------------Bit_RESET / Bit_SET(复位或置位)
*/
7.void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF);
/*
函数功能:配置管脚复用映射关系
返回值:void
形参:
①GPIO_TypeDef* GPIOx---------------GPIOx(具体GPIO端号)
②uint16_t GPIO_PinSource-----------GPIO_PinSource_x(具体复用管脚号)
③uint8_t GPIO_AF-------------------GPIO_AF_xxxx(具体外设复用对象)
*/
//GPIO初始化中相关结构体成员解析:
1.GPIO_InitStruct.GPIO_Pin = ;//引脚选择
//可选填如下:
#define GPIO_Pin_0 ((uint16_t)0x0001) /* Pin 0 selected */
#define GPIO_Pin_1 ((uint16_t)0x0002) /* Pin 1 selected */
#define GPIO_Pin_2 ((uint16_t)0x0004) /* Pin 2 selected */
#define GPIO_Pin_3 ((uint16_t)0x0008) /* Pin 3 selected */
#define GPIO_Pin_4 ((uint16_t)0x0010) /* Pin 4 selected */
#define GPIO_Pin_5 ((uint16_t)0x0020) /* Pin 5 selected */
#define GPIO_Pin_6 ((uint16_t)0x0040) /* Pin 6 selected */
#define GPIO_Pin_7 ((uint16_t)0x0080) /* Pin 7 selected */
#define GPIO_Pin_8 ((uint16_t)0x0100) /* Pin 8 selected */
#define GPIO_Pin_9 ((uint16_t)0x0200) /* Pin 9 selected */
#define GPIO_Pin_10 ((uint16_t)0x0400) /* Pin 10 selected */
#define GPIO_Pin_11 ((uint16_t)0x0800) /* Pin 11 selected */
#define GPIO_Pin_12 ((uint16_t)0x1000) /* Pin 12 selected */
#define GPIO_Pin_13 ((uint16_t)0x2000) /* Pin 13 selected */
#define GPIO_Pin_14 ((uint16_t)0x4000) /* Pin 14 selected */
#define GPIO_Pin_15 ((uint16_t)0x8000) /* Pin 15 selected */
#define GPIO_Pin_All ((uint16_t)0xFFFF) /* All pins selected */
2.GPIO_InitStruct.GPIO_Mode = ;//模式选择
//可选填如下:
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */---输入模式
GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */---输出模式
GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */--复用模式
GPIO_Mode_AN = 0x03 /*!< GPIO Analog Mode */---模拟模式
3.GPIO_InitStruct.GPIO_Speed = ;//输出速度选择
//可选填如下:
#define GPIO_Speed_2MHz GPIO_Low_Speed
#define GPIO_Speed_25MHz GPIO_Medium_Speed
#define GPIO_Speed_50MHz GPIO_Fast_Speed
#define GPIO_Speed_100MHz GPIO_High_Speed
4.GPIO_InitStruct.GPIO_OType = ;//输出类型选择
//可选填如下:
GPIO_OType_PP = 0x00 --- 浮空
GPIO_OType_OD = 0x01 --- 开漏
5.GPIO_InitStruct.GPIO_PuPd = ;//上下拉选择
//可选填如下:
GPIO_PuPd_NOPULL = 0x00 --- 无上下拉
GPIO_PuPd_UP = 0x01 --- 上拉
GPIO_PuPd_DOWN = 0x02 --- 下拉
//库函数初始化LED与点亮例程:
#include "led.h"
#define LED3_ON (GPIO_ResetBits(GPIOB,GPIO_Pin_9))//点亮LED3
#define LED3_OFF (GPIO_SetBits(GPIOB,GPIO_Pin_9))//熄灭LED3
#define LED4_ON (GPIO_ResetBits(GPIOB,GPIO_Pin_8))//点亮LED4
#define LED4_OFF (GPIO_SetBits(GPIOB,GPIO_Pin_8))//熄灭LED4
#define LED3_TAG (GPIOB->ODR ^= 1 << 9)//翻转LED3
#define LED4_TAG (GPIOB->ODR ^= 1 << 8)//翻转LED4
/*
函数功能:LED初始化
返回值:void
形参:void
函数说明:
LED4----PB8-----R----通用推挽输出
LED3----PB9-----G----通用推挽输出
*/
void Led_Init(void)
{
//打开时钟GPIOB
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB,ENABLE);//打开GPIOB的时钟
//初始化IO口
GPIO_InitTypeDef GPIO_InitStruct = {0};
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出类型
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;//管脚
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//无上下拉
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//输出速度
GPIO_Init(GPIOB,&GPIO_InitStruct);
//配置LED默认电平
GPIO_SetBits(GPIOB,GPIO_Pin_8);//拉高PB8
GPIO_SetBits(GPIOB,GPIO_Pin_9);
}