/********************************************************************** * Copyright: (C)2023 LingYun IoT System Studio * Author: GuoWenxue QQ: 281143292 * Description: ISKBoard Led/Relay/Key/ADC Hardware Abstract Layer driver * * ChangeLog: * Version Date Author Description * V1.0.0 2023.04.3 GuoWenxue Release initial version ***********************************************************************/ #include #include "stm32l4xx_hal.h" #include "main.h" #include "adc.h" #include "tim.h" #include "miscdev.h" /* *+----------------------+ *| GPIO Led API | *+----------------------+ */ gpio_t leds[LedMax] = { { "RedLed", LedRed_GPIO_Port, LedRed_Pin}, { "GreenLed", LedGreen_GPIO_Port, LedGreen_Pin}, { "BlueLed", LedBlue_GPIO_Port, LedBlue_Pin}, }; void turn_led(lednum_t which, status_t status) { GPIO_PinState level; if( which >= LedMax ) return ; level = status==OFF ? GPIO_PIN_SET : GPIO_PIN_RESET; HAL_GPIO_WritePin(leds[which].group, leds[which].pin, level); } void blink_led(lednum_t which, uint32_t interval) { turn_led(which, ON); HAL_Delay(interval); turn_led(which, OFF); HAL_Delay(interval); } /* *+----------------------+ *| GPIO Relay API | *+----------------------+ */ void turn_relay(status_t status) { GPIO_PinState level; level = status==OFF ? GPIO_PIN_RESET : GPIO_PIN_SET; HAL_GPIO_WritePin(Relay_GPIO_Port, Relay_Pin, level); } /* *+----------------------+ *| GPIO Key API | *+----------------------+ */ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) { static unsigned char status[3]; if( Key1_Pin == GPIO_Pin ) { status[0] ^= 1; turn_led(LedRed, status[0]); } else if( Key2_Pin == GPIO_Pin ) { status[1] ^= 1; turn_led(LedGreen, status[1]); } if( Key3_Pin == GPIO_Pin ) { status[2] ^= 1; turn_led(LedBlue, status[2]); } } /* *+----------------------------+ *| ADC noisy & lux sensor API | *+----------------------------+ */ int adc_sample_lux_noisy(uint32_t *lux, uint32_t *noisy) { uint8_t i; uint32_t timeout = 0xffffff; for(i=0; i