湖南营销型网站建设公司排名,男女做暧暧网站免费,wordpress精品插件,阿里云企业邮箱入口目录
一、时钟使能的含义
1.为什么要时钟使能#xff1f;
2.什么是时钟使能#xff1f;
3.GPIO的使能信号#xff1f; 二、代码封装
1.封装前完整代码
2.封装结构
封装后代码
led.c led.h
key.c
key.h
main.c 一、时钟使能的含义
1.为什么要时钟使能#xff1f…目录
一、时钟使能的含义
1.为什么要时钟使能
2.什么是时钟使能
3.GPIO的使能信号 二、代码封装
1.封装前完整代码
2.封装结构
封装后代码
led.c led.h
key.c
key.h
main.c 一、时钟使能的含义
1.为什么要时钟使能
每一个stm32单片机里都有着各种硬件设备每一个设备对于频率的要求是不同的有些设备要求频率低有些设备要求频率高。如果为所有硬件设备设置同一频率这就会出现性能不足或者资源浪费的情况所以引入“时钟”这一概念实现频率分配即“分频”“倍频”。需要低频和高频的设备使用相应的时钟使能函数已经固定需要查表或者查图获得可以使用自己所需要的频率实现资源的合理分配。
2.什么是时钟使能 时钟是分频使能是信号是动作。所有时钟默认是disable需要用哪个频率调用相应的信号设为enable。 时钟使能是用分频得到的信号作为模块的使能信号,模块原有的时钟不变。即用分频信号去控制模块的使能端口。
3.GPIO的使能信号
GPIO模块的使能信号是AHB1
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);
通过一系列的分频和倍频使得每一个模块有比较适配的频率利用率高。分倍频原理如下 二、代码封装
在前面的开关控制灯的亮灭代码实现时 有开关的五大参数设置和灯的五大参数设置等数十行代码在函数实现的前面影响程序的可读性所以要进行代码的封装增强简洁性。
1.封装前完整代码
#include stm32f4xx.h // Device headerint main()
{//时钟使能--LEDRCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);//GPIO时钟控制 //参数配置//让程序决定第几组第几根引脚如何工作GPIO_InitTypeDef led_gpio;led_gpio.GPIO_Mode GPIO_Mode_OUT; //引脚以输出方式工作led_gpio.GPIO_OType GPIO_OType_PP; //推挽led_gpio.GPIO_Pin GPIO_Pin_9| GPIO_Pin_10 |GPIO_Pin_8;led_gpio.GPIO_SpeedGPIO_High_Speed; //gpio的反应速率不太影响led_gpio.GPIO_PuPdGPIO_PuPd_DOWN; //上拉 GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULLGPIO_Init(GPIOF,led_gpio);GPIO_SetBits(GPIOF, GPIO_Pin_9);GPIO_SetBits(GPIOF, GPIO_Pin_10);uint16_t key00;//时钟使能--KEY开关RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);//GPIO时钟控制 //参数配置//让程序决定第几组第几根引脚如何工作GPIO_InitTypeDef key_gpio;key_gpio.GPIO_Mode GPIO_Mode_IN; //引脚以输入方式工作key_gpio.GPIO_OType GPIO_OType_PP; //推挽key_gpio.GPIO_Pin GPIO_Pin_4| GPIO_Pin_3 |GPIO_Pin_2;//第几根引脚key_gpio.GPIO_SpeedGPIO_High_Speed; //gpio的反应速率不太影响key_gpio.GPIO_PuPdGPIO_PuPd_UP; //上拉 GPIO_PuPd_DOWN 下拉//GPIO_PuPd_NOPULLGPIO_Init(GPIOE,key_gpio); //初始化while(1){//uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin);key0 GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);//默认高电平按下接地if(key01){GPIO_WriteBit(GPIOF, GPIO_Pin_10,1);//led高电平灯灭}else{GPIO_WriteBit(GPIOF, GPIO_Pin_10,0); //led高电平灯亮} }
}
2.封装结构 封装后代码
led.c
#include stm32f4xx.h // Device headervoid Led_Init()
{RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF,ENABLE);GPIO_InitTypeDef gpio_init;gpio_init.GPIO_ModeGPIO_Mode_OUT;gpio_init.GPIO_OTypeGPIO_OType_OD;gpio_init.GPIO_PinGPIO_Pin_9|GPIO_Pin_10;gpio_init.GPIO_PuPdGPIO_PuPd_NOPULL;gpio_init.GPIO_SpeedGPIO_High_Speed;GPIO_Init(GPIOF,gpio_init);
} led.h
void Led_Init(void);//声明
key.c
#include stm32f4xx.h // Device headervoid Key_Init()
{RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);GPIO_InitTypeDef gpio_key;gpio_key.GPIO_ModeGPIO_Mode_IN;gpio_key.GPIO_OTypeGPIO_OType_OD;gpio_key.GPIO_PinGPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4;gpio_key.GPIO_PuPdGPIO_PuPd_UP;gpio_key.GPIO_SpeedGPIO_High_Speed;GPIO_Init(GPIOE,gpio_key);
}
key.h
void Key_Init(void);main.c
#include stm32f4xx.h // Device header
#include led.h
#include key.hint main()
{Led_Init();Key_Init();uint8_t key0;while(1){key GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_4);//默认高电平按下接地if(key01){GPIO_WriteBit(GPIOF, GPIO_Pin_10,1); //led高电平灯灭} else{GPIO_WriteBit(GPIOF, GPIO_Pin_10,0); //led低电平灯亮} }
}
至此main.c代码变简洁了不少而且代码更加易读代码层次也更清晰。