потерял функцию millisecond подписал комментарии к функциям
This commit is contained in:
		
							parent
							
								
									a7d6faca8b
								
							
						
					
					
						commit
						b9db537db1
					
				
							
								
								
									
										180
									
								
								Core/Src/main.c
									
									
									
									
									
								
							
							
						
						
									
										180
									
								
								Core/Src/main.c
									
									
									
									
									
								
							| @ -414,24 +414,174 @@ void SystemClock_Config(void) | ||||
| 
 | ||||
| /* USER CODE BEGIN 4 */ | ||||
| //////////////// 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 res, pls; | ||||
| 
 | ||||
| 	if((num<0)||(num>=0x80)) return 0; | ||||
| 	res = Maska[i][num/0x10]; | ||||
| 	res &= (1<<(num&0x0F)); | ||||
| 	 | ||||
| 	if(z) | ||||
| 	{ | ||||
| 		pls = (espero[num]>CanRestart[i]/2); | ||||
| 		pls = pls || county[num]; | ||||
| 		res = res && pls; | ||||
| 	} | ||||
| 
 | ||||
| 	return res; | ||||
|     int res, pls; | ||||
|      | ||||
|     //=== ПРОВЕРКА ДИАПАЗОНА ===//
 | ||||
|     // Если номер элемента вне допустимого диапазона (0x00-0x7F)
 | ||||
|     if((num < 0) || (num >= 0x80))  | ||||
|         return 0;  // Элемент не активен
 | ||||
|      | ||||
|     //=== ПРОВЕРКА МАСКИ КАНАЛА ===//
 | ||||
|     // Определяем битовую маску для данного элемента
 | ||||
|     // num/0x10 - определяем индекс в массиве масок (0-7)
 | ||||
|     // num&0x0F - определяем позицию бита в слове (0-15)
 | ||||
|     res = Maska[i][num / 0x10];        // Получаем маску для группы элементов
 | ||||
|     res &= (1 << (num & 0x0F));        // Проверяем конкретный бит в маске
 | ||||
|      | ||||
|     //=== ДОПОЛНИТЕЛЬНЫЕ ПРОВЕРКИ (если 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(); | ||||
|   } | ||||
|   /* USER CODE BEGIN Callback 1 */ | ||||
| 
 | ||||
|  Millisecond(); | ||||
|   /* USER CODE END Callback 1 */ | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user