一、 寄存器开发与库函数开发优缺点
库函数:ST公司封装了一些函数,方便用户(程序员)二次开发,提高开发效果。
寄存器开发
寄存器优点:
- 代码精简,程序执行效果高(运行快)
寄存器缺点:
1、开发步骤繁琐,开发效率低。
2、开发难度高,程序维护困难,升级难。
3、程序可移植差。
库函数开发
库函数优点:
1、开发步骤相对比较简单,开发效率高。
2、开发难度低,程序维护容易,升级相对简单。
3、程序可移植强。
库函数缺点:
- 代码相对略多一些,程序执行效果相对寄存器低。
ST公司的库函数本质上是对寄存器的操作封闭。
二、库函数开发LED灯
库函数开发LED灯需要添加的库函数文件:stm32fxx_gpio.c
- 理解LED电路原理
LE0连接在PF9。
PF9输出0(低电平),灯亮
PF9输出1(高电平),灯灭
2、打开GPIOA组时钟,(STM32所有外设时钟都是关闭的)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
3、初始化GPIO PA0模式(输入)、上/下拉(上拉)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9; //引脚9
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT; //输出模式
GPIO_InitStruct.GPIO_OType = GPIO_OType_PP; //输出推挽
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz; //输出速度
GPIO_Init(GPIOF, &GPIO_InitStruct);
4、通过函数获取引脚电平
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
函数说明:
void RCC_AHB1PeriphClockCmd(uint32_t RCC_AHB1Periph, FunctionalState NewState);
函数功能:使能/不使能AHB1总线外设时钟
uint32_t RCC_AHB1Periph:外设选择
FunctionalState NewState:是否使能
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
函数功能:GPIO外设初始化
GPIO_TypeDef* GPIOx:GPIO端口组( A B C D E F G )
GPIO_InitTypeDef* GPIO_InitStruc:GPIO引脚初始化结构
typedef struct
{
uint32_t GPIO_Pin; //引脚编号
GPIOMode_TypeDef GPIO_Mode; //模式
GPIOSpeed_TypeDef GPIO_Speed; //速度
GPIOOType_TypeDef GPIO_OType; //输出类型
GPIOPuPd_TypeDef GPIO_PuPd; //上下拉
}GPIO_InitTypeDef;
三、库函数开发按键
1、理解按键电路原理
S1按键连接PA0
S1按键未按下,PA0为高电平
S1按键 按下,PA0为低电平
2、打开GPIOA组时钟,(STM32所有外设时钟都是关闭的)
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);
3、初始化GPIO PA0模式(输入)、上/下拉(上拉)
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; //引脚0
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IN; //输入模式
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_UP; //上拉
GPIO_Init(GPIOA, &GPIO_InitStruct);
4、通过函数获取引脚电平
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
函数说明:
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
函数功能:读取某个引脚电平
返回值:Bit_SET(高电平) Bit_RESET(低电平)
GPIO_TypeDef* GPIOx:GPIO端口组( A B C D E F G )
uint16_t GPIO_Pin:引脚