/********************************************************************** * Copyright: (C)2024 LingYun IoT System Studio * Author: GuoWenxue * Description: ISKBoard Hardware Abstract Layer driver * * ChangeLog: * Version Date Author Description * V1.0.0 2024.08.29 GuoWenxue Release initial version ***********************************************************************/ #include "miscdev.h" /* *+----------------------+ *| GPIO Relay API | *+----------------------+ */ gpio_t relays[RelayMax] = { { "Relay1", GPIOD, GPIO_PIN_2, OFF }, }; int init_relay(void) { int which; /* Turn all relays off */ for(which=0; which= RelayMax ) return ; level = status==OFF ? GPIO_PIN_RESET : GPIO_PIN_SET; HAL_GPIO_WritePin(relays[which].group, relays[which].pin, level); relays[which].status = status; } /* Get $which relay current status */ int status_relay(int which) { if( which >= RelayMax ) return 0; return relays[which].status; } /* *+----------------------+ *| GPIO Led API | *+----------------------+ */ gpio_t leds[LedMax] = { { "RedLed", GPIOC, GPIO_PIN_9, OFF }, { "GreenLed", GPIOC, GPIO_PIN_6, OFF }, { "BlueLed", GPIOB, GPIO_PIN_2, OFF }, }; int init_led(void) { int which; /* Turn all Leds off */ for(which=0; which= LedMax ) return ; level = status==OFF ? GPIO_PIN_SET : GPIO_PIN_RESET; HAL_GPIO_WritePin(leds[which].group, leds[which].pin, level); leds[which].status = status; } /* Toggle $which led status */ void toggle_led(int which) { if( which >= LedMax ) return ; HAL_GPIO_TogglePin(leds[which].group, leds[which].pin); leds[which].status = !leds[which].status; } /* Blink $which led */ void blink_led(int which, uint32_t interval) { turn_led(which, ON); HAL_Delay(interval); turn_led(which, OFF); HAL_Delay(interval); } /* Get $which led current status */ int status_led(int which) { if( which >= LedMax ) return 0; return leds[which].status; } /* *+----------------------+ *| GPIO Key API | *+----------------------+ */ #include "main.h" /* Key1_pin, Key2_Pin, Key3_Pin 定义在该头文件下 */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { if( Key1_Pin == GPIO_Pin ) { blink_led( Led_R, 500 ); } else if( Key2_Pin == GPIO_Pin ) { blink_led( Led_G, 500 ); } else if( Key3_Pin == GPIO_Pin ) { blink_led( Led_B, 500 ); } }