58 lines
1.2 KiB
C
58 lines
1.2 KiB
C
#include "linkBlink.h"
|
|
|
|
|
|
/* Ëîêàëüíàÿ êîïèÿ êîíôèãóðàöèè */
|
|
static LED_BlinkRx_Config_t led_cfg;
|
|
|
|
/* Âíóòðåííèå ïåðåìåííûå ñîñòîÿíèÿ */
|
|
static uint32_t last_tick = 0; // Âðåìÿ ïîñëåäíåãî ïåðåêëþ÷åíèÿ
|
|
static uint8_t toggle_counter = 0; // Ñ÷¸ò÷èê ïåðåêëþ÷åíèé
|
|
static uint8_t blinking = 0; // Ôëàã àêòèâíîãî ìèãàíèÿ
|
|
|
|
|
|
/**
|
|
* @brief Èíèöèàëèçàöèÿ ñòðóêòóðû
|
|
*/
|
|
void LED_BlinkRx_Init(LED_BlinkRx_Config_t *cfg)
|
|
{
|
|
led_cfg = *cfg;
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Çàïóñê ìèãàíèÿ ïðè ïðè¸ìå äàííûõ
|
|
*/
|
|
void LED_BlinkRx_OnRx(void)
|
|
{
|
|
|
|
blinking = 1;
|
|
toggle_counter = 0;
|
|
last_tick = HAL_GetTick();
|
|
}
|
|
|
|
|
|
/**
|
|
* @brief Ôóíêöèÿ äîëæíà âûçûâàòüñÿ ðåãóëÿðíî (â while(1))
|
|
*/
|
|
void LED_BlinkRx_Process(void)
|
|
{
|
|
if (!blinking)
|
|
return;
|
|
|
|
/* Ïðîâåðêà èñòå÷åíèÿ ïåðèîäà */
|
|
if (HAL_GetTick() - last_tick >= led_cfg.blink_period)
|
|
{
|
|
last_tick = HAL_GetTick();
|
|
|
|
/* Ïåðåêëþ÷àåì ñîñòîÿíèå ïèíà */
|
|
HAL_GPIO_TogglePin(led_cfg.port, led_cfg.pin);
|
|
toggle_counter++;
|
|
|
|
/* Êàæäîå ìèãàíèå = 2 ïåðåêëþ÷åíèÿ (âêë + âûêë) */
|
|
if (toggle_counter >= led_cfg.blink_count * 2)
|
|
{
|
|
HAL_GPIO_WritePin(led_cfg.port, led_cfg.pin, GPIO_PIN_SET);
|
|
blinking = 0;
|
|
}
|
|
}
|
|
} |