Обновлены шапки и по мелочи

This commit is contained in:
2025-12-28 14:06:19 +03:00
parent f3e76e105a
commit 8b930ebe12
12 changed files with 523 additions and 251 deletions

View File

@@ -23,43 +23,49 @@
##### Как использовать этот драйвер #####
==============================================================================
1. Настройка периферии (periph_config.h):
(+) Определить структуры TMR_ExtInit_TypeDef для нужных таймеров:
tmr0_config, tmr1_config, tmr2_config, tmr3_config
(+) Настроить частоту/период в мкс или тиках, прескалер
(+) Разрешить прерывания (IT) и при необходимости ADC SOC / DMA запросы
(+) Указать внешнее тактирование при необходимости
(+) Установить callback-функцию (можно NULL)
1. Настройка в periph_config.h:
(+) Определите структуры tmr0_config, tmr1_config и т.д.
(+) Используйте макросы для задания периода:
• PERIOD_US(us) - период в микросекундах
• FREQ_HZ(hz) - частота в герцах
• LOAD(ticks, presc) - период в тиках с псевдопрескалером
2. Инициализация таймеров:
(+) tmr_init_first() — первичная настройка тактирования, сброс периферии и NVIC
(+) tmr_init(&htmr, &config) — инициализация конкретного таймера с конфигурацией
2. Инициализация:
(+) tmr_init_first() - включает тактирование и сброс таймеров
(+) Для каждого таймера автоматически создается хендл (htmr0, htmr1...)
3. Callback-функции (опционально):
(+) TMR_Set_Callback(&htmr, TMR_Callback_Update, Callback)
3. Работа с таймером:
(+) TMR_Start(&htmr, IT) / TMR_Stop(&htmr, IT) - запуск и остановка
(+) TMR_Set_Callback(&htmr, TMR_Callback_Update, func) - установка обработчика
(+) TMR_Get_Cnt(&htmr) - текущее значение (уже поделенное на прескалер)
(+) TMR_Get_Period(&htmr) - период (уже поделенный на прескалер)
4. Запуск и остановка таймера:
(+) TMR_Start(&htmr) — запуск таймера
(+) TMR_Stop(&htmr) — остановка таймера
4. Задержки:
(+) TMR_Delay(&htmr, ticks) - блокирующая задержка в тиках таймера с псевдопрескалером
(+) TMR_Delay_Start(&htmr, &var) + TMR_Delay_Done(&htmr, ticks, &var) - неблокирующая
задержка в тиках таймера с псевдопрескалером
5. Задержки:
- Blocking (блокирующая):
(+) TMR_Delay(&htmr, ticks) — задержка в тиках таймера
- Non-blocking (неблокирующая):
(+) TMR_Delay_Start(&htmr, &var) — запоминает текущее значение таймера
(+) TMR_Delay_Done(&htmr, ticks, &var) — проверяет завершение задержки
5. Обработка прерываний:
(+) Callback-функция будет вызвана автоматически
==============================================================================
##### Особенности работы #####
==============================================================================
6. Получение текущих значений:
(+) TMR_Get_Cnt(&htmr) — получение текущего счетчика с учетом псевдопрескалера
(+) TMR_Get_Period(&htmr) — получение периода таймера с учетом псевдопрескалера
- Псевдопрескалер:
- Это программная абстракция, реальный счетчик всегда считает полные тики
- TMR_Get_Cnt() возвращает значение уже поделенное на (Prescaler+1)
- Позволяет увеличить максимальный период в (Prescaler+1) раз
- Пример: LOAD(1000, 99) даст реальный период в 100 раз больше
7. Обработка прерываний:
(+) tmr_irq_handler(&htmr) — общий обработчик ISR
- В обработчиках автоматически вызываются соответствующие callback-функции
и сбрасываются флаги
- Особенности счетчиков:
- Максимальный период: 42.9 сек при 100 МГц
- Таймеры используют убывающий счет (от LOAD до 0). Функция TMR_Get_Cnt
возвращает инвертированный счетчик (LOAD-VALUE)
8. Псевдо-PLIB функции:
(+) TMR_Init(TMRx, InitStruct) — инициализация таймера с расширенными параметрами
- Задержки:
- TMR_Delay проверяет, что задержка < LOAD, иначе вернет ERROR
- Неблокирующие задержки используют "сырые" тики (без учета прескалера)
@endverbatim
******************************************************************************
@@ -226,6 +232,7 @@ OperationStatus TMR_Stop(TMR_HandleTypeDef *htmr, FunctionalState IT)
* @retval Текущие значение счетчика с псевдопрескалером
* @details Если частота таймера 100 МГц, и псведопрескалер 100-1,
* то при реальном счетчике 100,000, вернется значение 1,000
* Также переводит счетчик в возрастающий (LOAD-VALUE)
*/
uint32_t TMR_Get_Cnt(TMR_HandleTypeDef *htmr)
{
@@ -235,7 +242,7 @@ uint32_t TMR_Get_Cnt(TMR_HandleTypeDef *htmr)
}
uint32_t presc = htmr->Config->Prescaler+1;
uint32_t currtick = htmr->Instance->VALUE;
uint32_t currtick = (htmr->Instance->LOAD - htmr->Instance->VALUE);
return currtick/presc;
}