потерял функцию millisecond подписал комментарии к функциям
This commit is contained in:
parent
a7d6faca8b
commit
b9db537db1
174
Core/Src/main.c
174
Core/Src/main.c
@ -414,24 +414,174 @@ void SystemClock_Config(void)
|
|||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
/* USER CODE BEGIN 4 */
|
||||||
//////////////// USER FUNC ////////////////////
|
//////////////// USER FUNC ////////////////////
|
||||||
|
/**
|
||||||
|
* @brief Проверяет, активен ли указанный элемент для обработки в CAN-шине
|
||||||
|
* @param num Номер элемента (0x00-0x7F)
|
||||||
|
* @param i Номер CAN-канала (0 или 1)
|
||||||
|
* @param z Флаг дополнительных проверок (1 - включить доп. проверки, 0 - только маска)
|
||||||
|
* @return 1 - элемент активен, 0 - элемент не активен
|
||||||
|
*/
|
||||||
int Isit(int num, int i, int z)
|
int Isit(int num, int i, int z)
|
||||||
{
|
{
|
||||||
int res, pls;
|
int res, pls;
|
||||||
|
|
||||||
if((num<0)||(num>=0x80)) return 0;
|
//=== ПРОВЕРКА ДИАПАЗОНА ===//
|
||||||
res = Maska[i][num/0x10];
|
// Если номер элемента вне допустимого диапазона (0x00-0x7F)
|
||||||
res &= (1<<(num&0x0F));
|
if((num < 0) || (num >= 0x80))
|
||||||
|
return 0; // Элемент не активен
|
||||||
|
|
||||||
if(z)
|
//=== ПРОВЕРКА МАСКИ КАНАЛА ===//
|
||||||
{
|
// Определяем битовую маску для данного элемента
|
||||||
pls = (espero[num]>CanRestart[i]/2);
|
// num/0x10 - определяем индекс в массиве масок (0-7)
|
||||||
pls = pls || county[num];
|
// num&0x0F - определяем позицию бита в слове (0-15)
|
||||||
res = res && pls;
|
res = Maska[i][num / 0x10]; // Получаем маску для группы элементов
|
||||||
}
|
res &= (1 << (num & 0x0F)); // Проверяем конкретный бит в маске
|
||||||
|
|
||||||
return res;
|
//=== ДОПОЛНИТЕЛЬНЫЕ ПРОВЕРКИ (если z != 0) ===//
|
||||||
|
if(z)
|
||||||
|
{
|
||||||
|
// Проверка времени ожидания: если превышена половина времени перезапуска
|
||||||
|
pls = (espero[num] > CanRestart[i] / 2);
|
||||||
|
|
||||||
|
// ИЛИ проверка счетчика отправки (если county[num] != 0)
|
||||||
|
pls = pls || county[num];
|
||||||
|
|
||||||
|
// Комбинированная проверка: должен быть установлен в маске И выполнять условия
|
||||||
|
res = res && pls;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res; // Возвращаем результат проверки
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Функция обработки милисекундных событий системы
|
||||||
|
* @note Вызывается каждую миллисекунду из SysTick_Handler
|
||||||
|
*/
|
||||||
|
void Millisecond()
|
||||||
|
{
|
||||||
|
// Статические переменные для хранения состояния между вызовами
|
||||||
|
static int CanPowse; // Счетчик для управления CAN-шиной
|
||||||
|
static unsigned int count_blink = 0, // Счетчик для мигания
|
||||||
|
count_bright = 0, // Счетчик для управления яркостью
|
||||||
|
count_mode, // Счетчик режимов мигания
|
||||||
|
blink_over, // Флаг переключения состояния мигания
|
||||||
|
blink_alarm, // Флаг мигания аварии
|
||||||
|
power_lamp, // Состояние силовой лампы
|
||||||
|
work_diod, // Состояние рабочего светодиода
|
||||||
|
norm_diod; // Состояние нормального светодиода
|
||||||
|
static int preTest; // Предыдущее состояние теста
|
||||||
|
int TST; // Текущее состояние теста
|
||||||
|
|
||||||
|
// Константы времени
|
||||||
|
#define CANPOWSE 10 // 10 msec - период обновления CAN
|
||||||
|
#define BLINK_TIME 250 // 0.25 sec - период мигания
|
||||||
|
|
||||||
|
//=== ОБНОВЛЕНИЕ WATCHDOG ===//
|
||||||
|
if(!cReset)
|
||||||
|
IWDG->KR = 0xAAAA; // Сброс watchdog таймера
|
||||||
|
|
||||||
|
//=== ПРОВЕРКА АКТИВНОСТИ ТАЙМЕРА ===//
|
||||||
|
if(!timGo) return; // Если таймер не активен - выход
|
||||||
|
|
||||||
|
//=== ЧТЕНИЕ ПЕРЕКЛЮЧАТЕЛЕЙ И КНОПОК ===//
|
||||||
|
Jumpers.byt.byte_1 = ReadJumpers(); // Чтение состояния переключателей
|
||||||
|
Jumpers.bit.bit0 = Buttons.bit.bit0 = TestJumper(); // Чтение состояния кнопки
|
||||||
|
|
||||||
|
//=== УПРАВЛЕНИЕ CAN-ШИНОЙ ===//
|
||||||
|
if(++CanPowse >= CANPOWSE)
|
||||||
|
{
|
||||||
|
CanPowse = 0; // Сброс счетчика
|
||||||
|
CanGO = 1; // Установка флага разрешения работы CAN
|
||||||
|
}
|
||||||
|
|
||||||
|
//=== УПРАВЛЕНИЕ РЕЖИМОМ "ЗАСЫПАНИЯ" ===//
|
||||||
|
if(Alarms.bit.bit8) // Разряд батареи
|
||||||
|
{
|
||||||
|
if (Falling_asleep) Falling_asleep--; // Уменьшение времени до "сна"
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Falling_asleep = 1000L * Sleep_time; // Установка времени до "сна"
|
||||||
|
|
||||||
|
//=== ОБРАБОТКА ТЕСТОВОГО РЕЖИМА ===//
|
||||||
|
TST = TestJumper() | cTestLamp; // Текущее состояние теста (кнопка или команда)
|
||||||
|
|
||||||
|
if(TST & !preTest) // Обнаружение фронта нажатия кнопки
|
||||||
|
{
|
||||||
|
count_blink = BLINK_TIME; // Сброс счетчика мигания
|
||||||
|
count_mode = 0; // Сброс счетчика режимов
|
||||||
|
}
|
||||||
|
preTest = TST; // Сохранение состояния для следующего вызова
|
||||||
|
|
||||||
|
//=== УПРАВЛЕНИЕ МИГАНИЕМ ИНДИКАТОРОВ ===//
|
||||||
|
if(++count_blink >= BLINK_TIME)
|
||||||
|
{
|
||||||
|
count_blink = 0; // Сброс счетчика
|
||||||
|
count_mode++; // Переключение режима
|
||||||
|
blink_over = (count_mode & 1) ? 1 : 0; // Мигание 1:1 (50%)
|
||||||
|
blink_alarm = (count_mode & 7) ? 1 : 0; // Мигание 1:7 (12.5%)
|
||||||
|
}
|
||||||
|
|
||||||
|
//=== УСТАНОВКА СТАНДАРТНЫХ СОСТОЯНИЙ ИНДИКАТОРОВ ===//
|
||||||
|
power_lamp = 1; // Силовая лампа включена
|
||||||
|
norm_diod = 1; // Нормальный светодиод включен
|
||||||
|
work_diod = !blink_over; // Рабочий светодиод синхронизирован с миганием
|
||||||
|
|
||||||
|
//=== РЕЖИМ ТЕСТИРОВАНИЯ ===//
|
||||||
|
if(TST)
|
||||||
|
{
|
||||||
|
power_lamp = blink_over; // Мигание силовой лампы
|
||||||
|
norm_diod = blink_over; // Мигание нормального светодиода
|
||||||
|
work_diod = blink_over; // Мигание рабочего светодиода
|
||||||
|
}
|
||||||
|
//=== РЕЖИМ ОСВЕЩЕНИЯ ===//
|
||||||
|
else if(Lightness)
|
||||||
|
{
|
||||||
|
power_lamp = norm_diod = 0; // Базовое состояние - выключено
|
||||||
|
|
||||||
|
// Уровень освещенности 2: постоянно включено
|
||||||
|
if(Lightness == 2) power_lamp = norm_diod = 1;
|
||||||
|
|
||||||
|
// Уровень освещенности 3: медленное мигание (50%)
|
||||||
|
if(Lightness == 3) power_lamp = norm_diod = blink_over;
|
||||||
|
|
||||||
|
// Уровень освещенности 4: быстрое мигание (12.5%)
|
||||||
|
if(Lightness == 4) power_lamp = norm_diod = blink_alarm;
|
||||||
|
|
||||||
|
// Уровень освещенности 5: инверсное быстрое мигание (87.5%)
|
||||||
|
if(Lightness == 5) power_lamp = norm_diod = !blink_alarm;
|
||||||
|
}
|
||||||
|
//=== РЕЖИМ ОШИБОК ===//
|
||||||
|
else if(Errors.all)
|
||||||
|
{
|
||||||
|
power_lamp = blink_over; // Мигание при ошибках
|
||||||
|
norm_diod = blink_over; // Мигание при ошибках
|
||||||
|
}
|
||||||
|
//=== РЕЖИМ ТРЕВОГ ===//
|
||||||
|
else if(Alarms.all)
|
||||||
|
{
|
||||||
|
power_lamp = blink_alarm; // Быстрое мигание при тревогах
|
||||||
|
norm_diod = blink_alarm; // Быстрое мигание при тревогах
|
||||||
|
}
|
||||||
|
|
||||||
|
//=== ШИМ УПРАВЛЕНИЕ ЯРКОСТЬЮ СИЛОВОЙ ЛАМПЫ ===//
|
||||||
|
if(++count_bright == 10) // maximum_bright (100%)
|
||||||
|
{
|
||||||
|
count_bright = 0;
|
||||||
|
if(power_lamp) Pvt1_ON; // Включение на полную яркость
|
||||||
|
else Pvt1_OFF; // Выключение
|
||||||
|
}
|
||||||
|
|
||||||
|
//=== УПРАВЛЕНИЕ ЯРКОСТЬЮ ===//
|
||||||
|
if(count_bright == Brightness)
|
||||||
|
if(!TST) Pvt1_OFF; // Отключение лампочки с регулировкой яркости
|
||||||
|
|
||||||
|
//=== УПРАВЛЕНИЕ СВЕТОДИОДАМИ ===//
|
||||||
|
if(work_diod) LED_2_ON; // Включение рабочего светодиода
|
||||||
|
else LED_2_OFF; // Выключение рабочего светодиода
|
||||||
|
|
||||||
|
if(norm_diod) LED_3_ON; // Включение нормального светодиода
|
||||||
|
else LED_3_OFF; // Выключение нормального светодиода
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////
|
/////////////////////////////////////////////
|
||||||
@ -455,7 +605,7 @@ void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
|
|||||||
HAL_IncTick();
|
HAL_IncTick();
|
||||||
}
|
}
|
||||||
/* USER CODE BEGIN Callback 1 */
|
/* USER CODE BEGIN Callback 1 */
|
||||||
|
Millisecond();
|
||||||
/* USER CODE END Callback 1 */
|
/* USER CODE END Callback 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user