网站开发好还是app好,wordpress的图片主题,wordpress组成,coreldrawLED原理图如图所示#xff1a; 代码
DS0和DS1每过500ms一次交替闪烁#xff0c;实现类似跑马灯的效果
GPIO输出配置步骤
#xff08;1#xff09;使能对应GPIO时钟
STM32在使用任何外设之前#xff0c;我们都要先使能其时钟#xff08;下同#xff09;。本实验用到…LED原理图如图所示 代码
DS0和DS1每过500ms一次交替闪烁实现类似跑马灯的效果
GPIO输出配置步骤
1使能对应GPIO时钟
STM32在使用任何外设之前我们都要先使能其时钟下同。本实验用到PB5和PE5 两 个IO 口因此需要先使能GPIOB和GPIOE 的时钟
2设置对应 GPIO工作模式推挽输出
本实验GPIO使用推挽输出模式控制LED亮灭通过函数HAL_GPIO_Init设置实现。
3控制GPIO 引脚输出高低电平
在配置好GPIO工作模式后我们就可以通过HAL_GPIO_WritePin 函数控制GPIO 引脚 输 出高低电平从而控制LED的亮灭了。
led.h #ifndef _LED_H #define _LED_H //led初始化 void led_init(void); #endif led.c #include ./BSP/LED/led.h #include ./SYSTEM/sys/sys.h //led初始化 void led_init(void){ GPIO_InitTypeDef g_gppio_struct; __HAL_RCC_GPIOE_CLK_ENABLE(); //使能时钟--PE5--LED1 __HAL_RCC_GPIOB_CLK_ENABLE(); //使能时钟--PB5--LED0 g_gppio_struct.PinGPIO_PIN_5; g_gppio_struct.ModeGPIO_MODE_OUTPUT_PP; //推挽输出 g_gppio_struct.PullGPIO_NOPULL; //无上下拉 g_gppio_struct.SpeedGPIO_SPEED_FREQ_HIGH; //高速 HAL_GPIO_Init(GPIOE,g_gppio_struct); //初始化LED1 g_gppio_struct.PinGPIO_PIN_5; g_gppio_struct.ModeGPIO_MODE_OUTPUT_PP; //推挽输出 g_gppio_struct.PullGPIO_NOPULL; //无上下拉 g_gppio_struct.SpeedGPIO_SPEED_FREQ_HIGH; //高速 HAL_GPIO_Init(GPIOB,g_gppio_struct); //初始化LED0 } 1、使能外设时钟
我们要使用某个外设必需先使能该外设时钟
1HAL库使能某个外设时钟的方法 __HAL_RCC_GPIOx_CLK_ENABLE(); 例如LED0被PB5管脚控制则x为B
2HAL库禁止某个外设时钟的方法 __HAL_RCC_GPIOx_CLK_DISABLE(); 2、HAL_GPIO_Init 函数
函数声明 void HAL_GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); //用于配置GPIO功能模式还可以设置EXTI功能 2.1 形参1GPIO_TypeDef *GPIOx
是端口号GPIOA~GPIOE
2.2 形参2GPIO_InitTypeDef *GPIO_Init
是GPIO_InitTypeDef类型的结构体变量 typedef struct{ uint32_t Pin; /*! 指定要配置的 GPIO 引脚。-------引脚号 此参数可以是 ref GPIO_pins_define 的任何值 */ uint32_t Mode; /*! 指定所选引脚的模式。-------模式设置 此参数可以是 ref GPIO_mode_define 的值 */ uint32_t Pull; /*! 指定所选引脚的 Pull-up 或 Pull-Down 激活。-------上拉下拉设置 此参数可以是 ref GPIO_pull_define */ uint32_t Speed; /*! 指定选定引脚的速度。-------速度设置 此参数可以是 ref GPIO_speed_define 的值 */ } GPIO_InitTypeDef; 2.2.1 Pin
表示引脚号范围GPIO_PIN_0 到 GPIO_PIN_15另外还有 GPIO_PIN_All 和 GPIO_PIN_MASK可选
例如 LED0被PB5管脚控制则为GPIO_PIN_5
2.2.2 Mode
是GPIO 的模式选择有以下选择项 #define GPIO_MODE_INPUT 0x00000000u /*! 输入模式 */ #define GPIO_MODE_OUTPUT_PP 0x00000001u /*! 推挽输出模式 */ #define GPIO_MODE_OUTPUT_OD 0x00000011u /*! 开漏输出模式 */ #define GPIO_MODE_AF_PP 0x00000002u /*! 推挽式复用模式 */ #define GPIO_MODE_AF_OD 0x00000012u /*! 开漏式复用 */ #define GPIO_MODE_AF_INPUT GPIO_MODE_INPUT /*! Alternate Function Input Mode */ #define GPIO_MODE_ANALOG 0x00000003u /*! Analog Mode */ #define GPIO_MODE_IT_RISING 0x10110000u /*! External Interrupt Mode with Rising edge trigger detection */ #define GPIO_MODE_IT_FALLING 0x10210000u /*! External Interrupt Mode with Falling edge trigger detection */ #define GPIO_MODE_IT_RISING_FALLING 0x10310000u /*! External Interrupt Mode with Rising/Falling edge trigger detection */ #define GPIO_MODE_EVT_RISING 0x10120000u /*! External Event Mode with Rising edge trigger detection */ #define GPIO_MODE_EVT_FALLING 0x10220000u /*! External Event Mode with Falling edge trigger detection */ #define GPIO_MODE_EVT_RISING_FALLING 0x10320000u /*! External Event Mode with Rising/Falling edge trigger detection */ 2.2.3 Pull
用于配置上下拉电阻有以下选择项 #define GPIO_NOPULL 0x00000000u /* 无上下拉 */ #define GPIO_PULLUP 0x00000001u /* 上拉 */ #define GPIO_PULLDOWN 0x00000002u /* 下拉 */ 2.2.4 Speed
用于配置GPIO 的速度有以下选择项 #define GPIO_SPEED_FREQ_LOW (GPIO_CRL_MODE0_1) /* 低速 */ #define GPIO_SPEED_FREQ_MEDIUM (GPIO_CRL_MODE0_0) /* 中速 */ #define GPIO_SPEED_FREQ_HIGH (GPIO_CRL_MODE0) /* 高速 */ main.c #include ./SYSTEM/sys/sys.h #include ./SYSTEM/delay/delay.h #include ./BSP/LED/led.h int main(void){ //固定代码 HAL_Init(); sys_stm32_clock_init(RCC_PLL_MUL9); delay_init(72); led_init(); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); //点亮 while(1){ HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_RESET); //点亮 delay_ms(200); HAL_GPIO_WritePin(GPIOE,GPIO_PIN_5,GPIO_PIN_SET); //熄灭 delay_ms(200); //上述等价于 /*HAL_GPIO_TogglePin(GPIOE,GPIO_PIN_5); delay_ms(200);*/ } } 每一个文档在最后都要空2行不然会出现警告
1、HAL_GPIO_WritePin 函数
是 GPIO 口的写引脚函数。其声明如下 void HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) 1形参1端口号可以选择范围GPIOA~GPIOG
2形参2引脚号可以选择范围GPIO_PIN_0~GPIO_PIN_15
3形参3要设置输出的状态有两个选择GPIO_PIN_SET表示高电平GPIO_PIN_RESET表示低电平
2、HAL_GPIO_TogglePin 函数
是 GPIO 口的电平翻转函数。其声明如下 void HAL_GPIO_TogglePin (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 1形参1端口号可以选择范围GPIOA~GPIOG
2形参2引脚号可以选择范围GPIO_PIN_0~GPIO_PIN_15