add
This commit is contained in:
@@ -46,7 +46,7 @@
|
|||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PTD */
|
/* USER CODE BEGIN PTD */
|
||||||
|
|
||||||
|
#include "linkBlink.h"
|
||||||
/* USER CODE END PTD */
|
/* USER CODE END PTD */
|
||||||
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
/* Private define ------------------------------------------------------------*/
|
||||||
@@ -133,9 +133,17 @@ int main(void)
|
|||||||
MX_TIM2_Init();
|
MX_TIM2_Init();
|
||||||
MX_ADC1_Init();
|
MX_ADC1_Init();
|
||||||
MX_I2C1_Init();
|
MX_I2C1_Init();
|
||||||
|
|
||||||
// MX_RTC_Init();
|
// MX_RTC_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
LED_BlinkRx_Config_t led_rx =
|
||||||
|
{
|
||||||
|
.port = GPIOC,
|
||||||
|
.pin = GPIO_PIN_13,
|
||||||
|
.blink_period = 10, // 100 мс
|
||||||
|
.blink_count = 2 // 3 мигания
|
||||||
|
};
|
||||||
|
LED_BlinkRx_Init(&led_rx);
|
||||||
BufferState_t buffer_init();
|
BufferState_t buffer_init();
|
||||||
|
|
||||||
led_blink(GPIOC, 13, rest_iter, reset_blink_delay);
|
led_blink(GPIOC, 13, rest_iter, reset_blink_delay);
|
||||||
@@ -164,9 +172,20 @@ int main(void)
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if (MB_DATA.Coils.reserve3[3]==1)
|
||||||
|
{
|
||||||
|
MB_DATA.Coils.reserve3[3]=0;
|
||||||
|
LED_BlinkRx_Init(&led_rx);
|
||||||
|
}
|
||||||
|
//////блинкер по приему RS
|
||||||
|
if (hmodbus1.f.blink==1)
|
||||||
|
{
|
||||||
|
hmodbus1.f.blink=0;
|
||||||
|
LED_BlinkRx_OnRx();
|
||||||
|
}
|
||||||
|
LED_BlinkRx_Process();
|
||||||
|
//////
|
||||||
|
////// запись во флэш
|
||||||
if (MB_DATA.Coils.reserve3[0]==1)
|
if (MB_DATA.Coils.reserve3[0]==1)
|
||||||
{
|
{
|
||||||
MB_DATA.Coils.reserve3[0] = 0;
|
MB_DATA.Coils.reserve3[0] = 0;
|
||||||
|
|||||||
@@ -152,50 +152,82 @@
|
|||||||
<Bp>
|
<Bp>
|
||||||
<Number>0</Number>
|
<Number>0</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>180</LineNumber>
|
<LineNumber>109</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134248318</Address>
|
<Address>0</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
<SizeOfObject>0</SizeOfObject>
|
<SizeOfObject>0</SizeOfObject>
|
||||||
<BreakByAccess>0</BreakByAccess>
|
<BreakByAccess>0</BreakByAccess>
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
<Filename>../Core/Src/main.c</Filename>
|
<Filename>..\Core\Inc\main.h</Filename>
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand></ExecCommand>
|
||||||
<Expression>\\\../Core/Src/main.c\180</Expression>
|
<Expression></Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>1</Number>
|
<Number>1</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>37</LineNumber>
|
<LineNumber>37</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134247384</Address>
|
<Address>0</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
<SizeOfObject>0</SizeOfObject>
|
<SizeOfObject>0</SizeOfObject>
|
||||||
<BreakByAccess>0</BreakByAccess>
|
<BreakByAccess>0</BreakByAccess>
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
<Filename>..\EEPROM_Emul\src\flash_ring.c</Filename>
|
<Filename>..\EEPROM_Emul\src\flash_ring.c</Filename>
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand></ExecCommand>
|
||||||
<Expression>\\john103C6T6\../EEPROM_Emul/src/flash_ring.c\37</Expression>
|
<Expression></Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
<Bp>
|
<Bp>
|
||||||
<Number>2</Number>
|
<Number>2</Number>
|
||||||
<Type>0</Type>
|
<Type>0</Type>
|
||||||
<LineNumber>175</LineNumber>
|
<LineNumber>139</LineNumber>
|
||||||
<EnabledFlag>1</EnabledFlag>
|
<EnabledFlag>1</EnabledFlag>
|
||||||
<Address>134248290</Address>
|
<Address>0</Address>
|
||||||
<ByteObject>0</ByteObject>
|
<ByteObject>0</ByteObject>
|
||||||
<HtxType>0</HtxType>
|
<HtxType>0</HtxType>
|
||||||
<ManyObjects>0</ManyObjects>
|
<ManyObjects>0</ManyObjects>
|
||||||
<SizeOfObject>0</SizeOfObject>
|
<SizeOfObject>0</SizeOfObject>
|
||||||
<BreakByAccess>0</BreakByAccess>
|
<BreakByAccess>0</BreakByAccess>
|
||||||
<BreakIfRCount>1</BreakIfRCount>
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
<Filename>../Core/Src/main.c</Filename>
|
<Filename>../Core/Src/main.c</Filename>
|
||||||
<ExecCommand></ExecCommand>
|
<ExecCommand></ExecCommand>
|
||||||
<Expression>\\john103C6T6\../Core/Src/main.c\175</Expression>
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>3</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>199</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>../Core/Src/main.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
|
</Bp>
|
||||||
|
<Bp>
|
||||||
|
<Number>4</Number>
|
||||||
|
<Type>0</Type>
|
||||||
|
<LineNumber>191</LineNumber>
|
||||||
|
<EnabledFlag>1</EnabledFlag>
|
||||||
|
<Address>0</Address>
|
||||||
|
<ByteObject>0</ByteObject>
|
||||||
|
<HtxType>0</HtxType>
|
||||||
|
<ManyObjects>0</ManyObjects>
|
||||||
|
<SizeOfObject>0</SizeOfObject>
|
||||||
|
<BreakByAccess>0</BreakByAccess>
|
||||||
|
<BreakIfRCount>0</BreakIfRCount>
|
||||||
|
<Filename>../Core/Src/main.c</Filename>
|
||||||
|
<ExecCommand></ExecCommand>
|
||||||
|
<Expression></Expression>
|
||||||
</Bp>
|
</Bp>
|
||||||
</Breakpoint>
|
</Breakpoint>
|
||||||
<WatchWindow1>
|
<WatchWindow1>
|
||||||
@@ -339,6 +371,11 @@
|
|||||||
<WinNumber>1</WinNumber>
|
<WinNumber>1</WinNumber>
|
||||||
<ItemText>record</ItemText>
|
<ItemText>record</ItemText>
|
||||||
</Ww>
|
</Ww>
|
||||||
|
<Ww>
|
||||||
|
<count>28</count>
|
||||||
|
<WinNumber>1</WinNumber>
|
||||||
|
<ItemText>led_rx,0x0A</ItemText>
|
||||||
|
</Ww>
|
||||||
</WatchWindow1>
|
</WatchWindow1>
|
||||||
<WatchWindow2>
|
<WatchWindow2>
|
||||||
<Ww>
|
<Ww>
|
||||||
@@ -1073,7 +1110,7 @@
|
|||||||
<GroupNumber>6</GroupNumber>
|
<GroupNumber>6</GroupNumber>
|
||||||
<FileNumber>50</FileNumber>
|
<FileNumber>50</FileNumber>
|
||||||
<FileType>1</FileType>
|
<FileType>1</FileType>
|
||||||
<tvExp>1</tvExp>
|
<tvExp>0</tvExp>
|
||||||
<tvExpOptDlg>0</tvExpOptDlg>
|
<tvExpOptDlg>0</tvExpOptDlg>
|
||||||
<bDave2>0</bDave2>
|
<bDave2>0</bDave2>
|
||||||
<PathWithFileName>..\linkBlink\linkBlink.c</PathWithFileName>
|
<PathWithFileName>..\linkBlink\linkBlink.c</PathWithFileName>
|
||||||
|
|||||||
@@ -1,161 +1,58 @@
|
|||||||
#include "linkBlink.h"
|
#include "linkBlink.h"
|
||||||
|
|
||||||
|
|
||||||
static uint32_t GetTick(LedBlinker_HandleTypeDef* hblinker) {
|
/* Ëîêàëüíàÿ êîïèÿ êîíôèãóðàöèè */
|
||||||
if (hblinker->htim != NULL) {
|
static LED_BlinkRx_Config_t led_cfg;
|
||||||
return __HAL_TIM_GET_COUNTER(hblinker->htim);
|
|
||||||
}
|
/* Âíóòðåííèå ïåðåìåííûå ñîñòîÿíèÿ */
|
||||||
return HAL_GetTick(); // Èñïîëüçóåì ñèñòåìíûé òàéìåð åñëè ñâîé íå çàäàí
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
HAL_StatusTypeDef LedBlinker_Init(LedBlinker_HandleTypeDef* hblinker,
|
|
||||||
GPIO_TypeDef* led_port, uint16_t led_pin,
|
/**
|
||||||
GPIO_TypeDef* de_re_port, uint16_t de_re_pin,
|
* @brief Çàïóñê ìèãàíèÿ ïðè ïðè¸ìå äàííûõ
|
||||||
TIM_HandleTypeDef* htim) {
|
*/
|
||||||
if (hblinker == NULL || led_port == NULL) {
|
void LED_BlinkRx_OnRx(void)
|
||||||
return HAL_ERROR;
|
{
|
||||||
|
|
||||||
|
blinking = 1;
|
||||||
|
toggle_counter = 0;
|
||||||
|
last_tick = HAL_GetTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Èíèöèàëèçàöèÿ ïîëåé
|
|
||||||
hblinker->led_port = led_port;
|
|
||||||
hblinker->led_pin = led_pin;
|
|
||||||
hblinker->de_re_port = de_re_port;
|
|
||||||
hblinker->de_re_pin = de_re_pin;
|
|
||||||
hblinker->htim = htim;
|
|
||||||
hblinker->blink_duration = 100;
|
|
||||||
hblinker->last_blink_tick = 0;
|
|
||||||
hblinker->led_state = false;
|
|
||||||
hblinker->blinking = false;
|
|
||||||
hblinker->blink_count = 0;
|
|
||||||
hblinker->target_blink_count = 1;
|
|
||||||
hblinker->last_packet_tick = 0;
|
|
||||||
|
|
||||||
// Íàñòðîéêà ïèíà ñâåòîäèîäà
|
/**
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
* @brief Ôóíêöèÿ äîëæíà âûçûâàòüñÿ ðåãóëÿðíî (â while(1))
|
||||||
GPIO_InitStruct.Pin = led_pin;
|
*/
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
void LED_BlinkRx_Process(void)
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
{
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
if (!blinking)
|
||||||
HAL_GPIO_Init(led_port, &GPIO_InitStruct);
|
return;
|
||||||
|
|
||||||
// Âûêëþ÷àåì ñâåòîäèîä
|
/* Ïðîâåðêà èñòå÷åíèÿ ïåðèîäà */
|
||||||
HAL_GPIO_WritePin(led_port, led_pin, GPIO_PIN_RESET);
|
if (HAL_GetTick() - last_tick >= led_cfg.blink_period)
|
||||||
|
{
|
||||||
|
last_tick = HAL_GetTick();
|
||||||
|
|
||||||
// Íàñòðîéêà ïèíà óïðàâëåíèÿ RS485 åñëè èñïîëüçóåòñÿ
|
/* Ïåðåêëþ÷àåì ñîñòîÿíèå ïèíà */
|
||||||
if (de_re_port != NULL && de_re_pin != 0) {
|
HAL_GPIO_TogglePin(led_cfg.port, led_cfg.pin);
|
||||||
GPIO_InitStruct.Pin = de_re_pin;
|
toggle_counter++;
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
|
|
||||||
HAL_GPIO_Init(de_re_port, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
// Ðåæèì ïðèåìà ïî óìîë÷àíèþ
|
/* Êàæäîå ìèãàíèå = 2 ïåðåêëþ÷åíèÿ (âêë + âûêë) */
|
||||||
HAL_GPIO_WritePin(de_re_port, de_re_pin, GPIO_PIN_RESET);
|
if (toggle_counter >= led_cfg.blink_count * 2)
|
||||||
}
|
{
|
||||||
|
HAL_GPIO_WritePin(led_cfg.port, led_cfg.pin, GPIO_PIN_SET);
|
||||||
return HAL_OK;
|
blinking = 0;
|
||||||
}
|
|
||||||
|
|
||||||
void LedBlinker_Update(LedBlinker_HandleTypeDef* hblinker) {
|
|
||||||
if (hblinker == NULL || !hblinker->blinking) return;
|
|
||||||
|
|
||||||
uint32_t current_tick = HAL_GetTick();
|
|
||||||
|
|
||||||
if ((current_tick - hblinker->last_blink_tick) >= hblinker->blink_duration) {
|
|
||||||
hblinker->last_blink_tick = current_tick;
|
|
||||||
|
|
||||||
// Ïåðåêëþ÷àåì ñîñòîÿíèå ñâåòîäèîäà
|
|
||||||
hblinker->led_state = !hblinker->led_state;
|
|
||||||
HAL_GPIO_WritePin(hblinker->led_port, hblinker->led_pin,
|
|
||||||
hblinker->led_state ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
|
||||||
|
|
||||||
// Åñëè ñâåòîäèîä âûêëþ÷èëñÿ, óìåíüøàåì ñ÷åò÷èê
|
|
||||||
if (!hblinker->led_state) {
|
|
||||||
hblinker->blink_count++;
|
|
||||||
if (hblinker->blink_count >= hblinker->target_blink_count) {
|
|
||||||
hblinker->blinking = false;
|
|
||||||
HAL_GPIO_WritePin(hblinker->led_port, hblinker->led_pin, GPIO_PIN_RESET);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void LedBlinker_ProcessPacket(LedBlinker_HandleTypeDef* hblinker,
|
|
||||||
uint8_t* data, uint16_t len) {
|
|
||||||
if (hblinker == NULL || data == NULL || len == 0) return;
|
|
||||||
|
|
||||||
hblinker->last_packet_tick = HAL_GetTick();
|
|
||||||
|
|
||||||
// Àíàëèç ïàêåòà è âûáîð ïàòòåðíà ìèãàíèÿ
|
|
||||||
if (len >= 1) {
|
|
||||||
// Ïðèìåð: ïåðâûé áàéò îïðåäåëÿåò êîëè÷åñòâî ìèãàíèé
|
|
||||||
uint8_t blink_count = data[0];
|
|
||||||
if (blink_count == 0) blink_count = 1;
|
|
||||||
if (blink_count > 20) blink_count = 20; // Îãðàíè÷åíèå
|
|
||||||
|
|
||||||
// Âòîðîé áàéò ìîæåò îïðåäåëÿòü äëèòåëüíîñòü (åñëè åñòü)
|
|
||||||
uint32_t duration = 100;
|
|
||||||
if (len >= 2) {
|
|
||||||
duration = 50 + (data[1] * 10);
|
|
||||||
if (duration > 1000) duration = 1000;
|
|
||||||
}
|
|
||||||
|
|
||||||
LedBlinker_BlinkPattern(hblinker, blink_count, duration);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Äîïîëíèòåëüíûå ïàòòåðíû â çàâèñèìîñòè îò äàííûõ
|
|
||||||
if (len >= 4 && data[0] == 0xFF) {
|
|
||||||
// Ñïåöèàëüíûé ïàòòåðí äëÿ êîìàíä
|
|
||||||
LedBlinker_BlinkPattern(hblinker, 5, 50);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void LedBlinker_BlinkOnce(LedBlinker_HandleTypeDef* hblinker, uint32_t duration) {
|
|
||||||
if (hblinker == NULL) return;
|
|
||||||
|
|
||||||
hblinker->blink_duration = duration;
|
|
||||||
hblinker->target_blink_count = 1;
|
|
||||||
hblinker->blink_count = 0;
|
|
||||||
hblinker->blinking = true;
|
|
||||||
hblinker->led_state = false;
|
|
||||||
hblinker->last_blink_tick = GetTick(hblinker);
|
|
||||||
|
|
||||||
// Íåìåäëåííîå âêëþ÷åíèå
|
|
||||||
HAL_GPIO_WritePin(hblinker->led_port, hblinker->led_pin, GPIO_PIN_SET);
|
|
||||||
hblinker->led_state = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LedBlinker_BlinkPattern(LedBlinker_HandleTypeDef* hblinker,
|
|
||||||
uint8_t count, uint32_t duration) {
|
|
||||||
if (hblinker == NULL || count == 0) return;
|
|
||||||
|
|
||||||
hblinker->blink_duration = duration;
|
|
||||||
hblinker->target_blink_count = count;
|
|
||||||
hblinker->blink_count = 0;
|
|
||||||
hblinker->blinking = true;
|
|
||||||
hblinker->led_state = false;
|
|
||||||
hblinker->last_blink_tick = HAL_GetTick();
|
|
||||||
|
|
||||||
// Íåìåäëåííîå âêëþ÷åíèå
|
|
||||||
HAL_GPIO_WritePin(hblinker->led_port, hblinker->led_pin, GPIO_PIN_SET);
|
|
||||||
hblinker->led_state = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void LedBlinker_SetRS485Mode(LedBlinker_HandleTypeDef* hblinker, bool transmit) {
|
|
||||||
if (hblinker == NULL || hblinker->de_re_port == NULL) return;
|
|
||||||
|
|
||||||
HAL_GPIO_WritePin(hblinker->de_re_port, hblinker->de_re_pin,
|
|
||||||
transmit ? GPIO_PIN_SET : GPIO_PIN_RESET);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool LedBlinker_IsBlinking(LedBlinker_HandleTypeDef* hblinker) {
|
|
||||||
return (hblinker != NULL) ? hblinker->blinking : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t LedBlinker_GetTimeSinceLastPacket(LedBlinker_HandleTypeDef* hblinker) {
|
|
||||||
if (hblinker == NULL) return 0;
|
|
||||||
|
|
||||||
if (hblinker->last_packet_tick == 0) return 0;
|
|
||||||
|
|
||||||
return GetTick(hblinker) - hblinker->last_packet_tick;
|
|
||||||
}
|
|
||||||
@@ -1,90 +1,33 @@
|
|||||||
#ifndef LED_BLINKER_RS485_H
|
#ifndef LED_BLINK_RX_H
|
||||||
#define LED_BLINKER_RS485_H
|
#define LED_BLINK_RX_H
|
||||||
|
|
||||||
#include "stm32f1xx_hal.h" // Èçìåíèòå ïîä ñâîé êîíêðåòíûé ìèêðîêîíòðîëëåð
|
#include "stm32f1xx_hal.h" // Çàìåíèòü íà ñâîþ ñåðèþ (stm32f4xx_hal.h è ò.ä.)
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
GPIO_TypeDef* led_port; // Ïîðò ñâåòîäèîäà
|
|
||||||
uint16_t led_pin; // Ïèí ñâåòîäèîäà
|
|
||||||
GPIO_TypeDef* de_re_port; // Ïîðò óïðàâëåíèÿ RS485 (NULL åñëè íå èñïîëüçóåòñÿ)
|
|
||||||
uint16_t de_re_pin; // Ïèí óïðàâëåíèÿ RS485
|
|
||||||
TIM_HandleTypeDef* htim; // Òàéìåð äëÿ îòñ÷åòà âðåìåíè
|
|
||||||
uint32_t blink_duration; // Äëèòåëüíîñòü ìèãàíèÿ â ìñ
|
|
||||||
uint32_t last_blink_tick; // Âðåìÿ ïîñëåäíåãî ìèãàíèÿ (â òèêàõ)
|
|
||||||
bool led_state; // Òåêóùåå ñîñòîÿíèå ñâåòîäèîäà
|
|
||||||
bool blinking; // Ôëàã ìèãàíèÿ
|
|
||||||
uint8_t blink_count; // Ñ÷åò÷èê ìèãàíèé
|
|
||||||
uint8_t target_blink_count; // Öåëåâîå êîëè÷åñòâî ìèãàíèé
|
|
||||||
uint32_t last_packet_tick; // Âðåìÿ ïîñëåäíåãî ïàêåòà
|
|
||||||
} LedBlinker_HandleTypeDef;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Èíèöèàëèçàöèÿ ñòðóêòóðû ìèãàëêè
|
* @brief Êîíôèãóðàöèîííàÿ ñòðóêòóðà ñâåòîäèîäà
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
* @param led_port - ïîðò ñâåòîäèîäà
|
|
||||||
* @param led_pin - ïèí ñâåòîäèîäà
|
|
||||||
* @param de_re_port - ïîðò óïðàâëåíèÿ RS485 (NULL åñëè íå èñïîëüçóåòñÿ)
|
|
||||||
* @param de_re_pin - ïèí óïðàâëåíèÿ RS485
|
|
||||||
* @param htim - òàéìåð äëÿ âðåìåííûõ îòñ÷åòîâ
|
|
||||||
* @return HAL_OK èëè HAL_ERROR
|
|
||||||
*/
|
*/
|
||||||
HAL_StatusTypeDef LedBlinker_Init(LedBlinker_HandleTypeDef* hblinker,
|
typedef struct
|
||||||
GPIO_TypeDef* led_port, uint16_t led_pin,
|
{
|
||||||
GPIO_TypeDef* de_re_port, uint16_t de_re_pin,
|
GPIO_TypeDef *port; // GPIO ïîðò
|
||||||
TIM_HandleTypeDef* htim);
|
uint16_t pin; // GPIO ïèí
|
||||||
|
|
||||||
|
uint32_t blink_period; // Ïåðèîä ïåðåêëþ÷åíèÿ (ìñ)
|
||||||
|
uint8_t blink_count; // Êîëè÷åñòâî ìèãàíèé
|
||||||
|
} LED_BlinkRx_Config_t;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Îáðàáîò÷èê ìèãàíèÿ (âûçûâàòü â îñíîâíîì öèêëå)
|
* @brief Èíèöèàëèçàöèÿ áèáëèîòåêè
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
*/
|
*/
|
||||||
void LedBlinker_Update(LedBlinker_HandleTypeDef* hblinker);
|
void LED_BlinkRx_Init(LED_BlinkRx_Config_t *cfg);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Îáðàáîòêà ïîëó÷åííîãî ïàêåòà
|
* @brief Âûçûâàòü ïðè ïðè¸ìå ïàêåòà
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
* @param data - óêàçàòåëü íà äàííûå
|
|
||||||
* @param len - äëèíà äàííûõ
|
|
||||||
*/
|
*/
|
||||||
void LedBlinker_ProcessPacket(LedBlinker_HandleTypeDef* hblinker,
|
void LED_BlinkRx_OnRx(void);
|
||||||
uint8_t* data, uint16_t len);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ïðîñòîå ìèãàíèå ïðè ïîëó÷åíèè ïàêåòà
|
* @brief Âûçûâàòü â îñíîâíîì öèêëå
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
* @param duration - äëèòåëüíîñòü ìèãàíèÿ â ìñ
|
|
||||||
*/
|
*/
|
||||||
void LedBlinker_BlinkOnce(LedBlinker_HandleTypeDef* hblinker, uint32_t duration);
|
void LED_BlinkRx_Process(void);
|
||||||
|
|
||||||
/**
|
#endif
|
||||||
* Ìèãàíèå ñ îïðåäåëåííûì ïàòòåðíîì
|
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
* @param count - êîëè÷åñòâî ìèãàíèé
|
|
||||||
* @param duration - äëèòåëüíîñòü îäíîãî ìèãàíèÿ â ìñ
|
|
||||||
*/
|
|
||||||
void LedBlinker_BlinkPattern(LedBlinker_HandleTypeDef* hblinker,
|
|
||||||
uint8_t count, uint32_t duration);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Óñòàíîâêà ðåæèìà RS485
|
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
* @param transmit - true äëÿ ïåðåäà÷è, false äëÿ ïðèåìà
|
|
||||||
*/
|
|
||||||
void LedBlinker_SetRS485Mode(LedBlinker_HandleTypeDef* hblinker, bool transmit);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ïðîâåðêà, ìèãàåò ëè ñåé÷àñ ñâåòîäèîä
|
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
* @return true åñëè ìèãàåò
|
|
||||||
*/
|
|
||||||
bool LedBlinker_IsBlinking(LedBlinker_HandleTypeDef* hblinker);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Ïîëó÷åíèå âðåìåíè ñ ïîñëåäíåãî ïàêåòà
|
|
||||||
* @param hblinker - óêàçàòåëü íà ñòðóêòóðó
|
|
||||||
* @return âðåìÿ â ìñ ñ ïîñëåäíåãî ïàêåòà
|
|
||||||
*/
|
|
||||||
uint32_t LedBlinker_GetTimeSinceLastPacket(LedBlinker_HandleTypeDef* hblinker);
|
|
||||||
|
|
||||||
#endif // LED_BLINKER_RS485_H
|
|
||||||
@@ -3,7 +3,7 @@
|
|||||||
<FRAME activewindow="0">
|
<FRAME activewindow="0">
|
||||||
<PLACEMENT>2c0000000200000003000000ffffffffffffffffffffffffffffffff40000000670000008c080000bd050000</PLACEMENT>
|
<PLACEMENT>2c0000000200000003000000ffffffffffffffffffffffffffffffff40000000670000008c080000bd050000</PLACEMENT>
|
||||||
<WINDOW type="default" module="ISIS">
|
<WINDOW type="default" module="ISIS">
|
||||||
<editor metric="0" gridmajor="2540000" mode="00000000" zoom="0" scale="126" flipped="0" gridminor="254000" gridmode="32" snapidx="2" snap="254000" xcursor="0" orgmode="0" snaprange="127000">
|
<editor metric="0" gridmajor="2540000" mode="00000001" zoom="0" scale="126" flipped="0" gridminor="254000" gridmode="32" snapidx="2" snap="254000" xcursor="0" orgmode="0" snaprange="127000">
|
||||||
<world y1="-8890000" x1="-12700000" y2="8890000" x2="12700000"/>
|
<world y1="-8890000" x1="-12700000" y2="8890000" x2="12700000"/>
|
||||||
<centre x="0" y="0"/>
|
<centre x="0" y="0"/>
|
||||||
<origin x="0" y="0"/>
|
<origin x="0" y="0"/>
|
||||||
@@ -18,7 +18,7 @@
|
|||||||
</editor>
|
</editor>
|
||||||
</MODULE>
|
</MODULE>
|
||||||
<MODULE name="ISIS">
|
<MODULE name="ISIS">
|
||||||
<editor metric="0" gridmajor="2540000" mode="00000000" zoom="0" scale="126" flipped="0" gridminor="254000" gridmode="32" snapidx="2" snap="254000" xcursor="0" orgmode="0" snaprange="127000">
|
<editor metric="0" gridmajor="2540000" mode="00000001" zoom="0" scale="126" flipped="0" gridminor="254000" gridmode="32" snapidx="2" snap="254000" xcursor="0" orgmode="0" snaprange="127000">
|
||||||
<world y1="-8890000" x1="-12700000" y2="8890000" x2="12700000"/>
|
<world y1="-8890000" x1="-12700000" y2="8890000" x2="12700000"/>
|
||||||
<centre x="0" y="0"/>
|
<centre x="0" y="0"/>
|
||||||
<origin x="0" y="0"/>
|
<origin x="0" y="0"/>
|
||||||
|
|||||||
Reference in New Issue
Block a user