用于STM32的C++编程的LED对象

张开发
2026/4/16 11:02:01 15 分钟阅读

分享文章

用于STM32的C++编程的LED对象
这个是用于C工程的LED对象使用很方便特记录于此。#define _LED_H_ #ifdef _LED_H_ class LED { private: GPIO_TypeDef* GPIOx;//GPIO分组。 uint16_t GPIO_Pin;//GPIO引脚编号。 protected: void init(void){ if(GPIOx nullptr)return; //打开时钟并配置引脚。 #ifdef GPIOA if(GPIOx GPIOA) __HAL_RCC_GPIOA_CLK_ENABLE(); #endif #ifdef GPIOB if(GPIOx GPIOB) __HAL_RCC_GPIOB_CLK_ENABLE(); #endif #ifdef GPIOC if(GPIOx GPIOC) __HAL_RCC_GPIOC_CLK_ENABLE(); #endif #ifdef GPIOD if(GPIOx GPIOD) __HAL_RCC_GPIOD_CLK_ENABLE(); #endif #ifdef GPIOE if(GPIOx GPIOE) __HAL_RCC_GPIOE_CLK_ENABLE(); #endif #ifdef GPIOF if(GPIOx GPIOF) __HAL_RCC_GPIOF_CLK_ENABLE(); #endif #ifdef GPIOG if(GPIOx GPIOG) __HAL_RCC_GPIOG_CLK_ENABLE(); #endif #ifdef GPIOH if(GPIOx GPIOH) __HAL_RCC_GPIOH_CLK_ENABLE(); #endif //设置引脚。 HAL_GPIO_WritePin(GPIOx, GPIO_Pin, GPIO_PIN_RESET); GPIO_InitTypeDef GPIO_InitStruct{0}; GPIO_InitStruct.Pin GPIO_Pin; GPIO_InitStruct.Mode GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull GPIO_NOPULL; GPIO_InitStruct.Speed GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(GPIOx, GPIO_InitStruct); } public: LED(GPIO_TypeDef* portnullptr, uint16_t pin0):GPIOx(port),GPIO_Pin(pin){init();} ~LED(){;} void begin(GPIO_TypeDef* portnullptr, uint16_t pin0){GPIOxport;GPIO_Pinpin;init();} void Toggle(void) {if(GPIOx nullptr)return;HAL_GPIO_TogglePin(GPIOx,GPIO_Pin);} void SetState(bool state){if(GPIOx nullptr)return;state true ? HAL_GPIO_WritePin(GPIOx, GPIO_Pin, GPIO_PIN_SET) : HAL_GPIO_WritePin(GPIOx, GPIO_Pin, GPIO_PIN_RESET);} bool GetState(void){if(GPIOx nullptr)return false;return (HAL_GPIO_ReadPin(GPIOx, GPIO_Pin) GPIO_PIN_SET) ? true : false;} }; #endif使用非常方便只需要先申明对象实例然后调用其相关函数。就像下面这样让LED闪烁起来LED led0(GPIOE,GPIO_PIN_10);while(1){led0.Toggle();HAL_Delay(500);}最重要的是可以一次性申明一个LED数组操作一大串LED就非常方便LED led[2];led[0].begin(GPIOE,GPIO_PIN_10);led[1].begin(GPIOG,GPIO_PIN_10);bool ledStatefalse;while(1){led[0].SetState(ledState);ledStat ledStateled[1].SetState(!ledState);HAL_Delay(500);}如果需要在FOR循环中处理一大串LED使用LED对象数组就非常方便。

更多文章