Files
ds18b20-MODBUS/john103C6T6NewVer/linkBlink/linkBlink.c
2026-02-27 15:38:07 +03:00

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;
}
}
}