Исполнение кода каждые 10 микросекунд

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
userstm2023
Родился
Сообщения: 6
Зарегистрирован: Ср фев 15, 2023 07:34:11

Исполнение кода каждые 10 микросекунд

Сообщение userstm2023 »

Добрые люди помогите.
Проверьте мой код, главным образом настройку таймера в JPG, будет ли исполнение кода каждые 10 микросекунд
запутался с периодами что то.....

Код: Выделить всё

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
  if(htim->Instance == TIM2) //100кГц
		{
		if (t>0) t--;
		}

//в главном цикле вызывается бесконечно эта функция:
void func(...)
{
if (t > 0) return; //выжидаем заданное число десятков микросекунд 

t=1;
//сюда переходим каждые 10 микросекунд, за исключением первого раза когда таймер не синхронизирован с моментом присвоения t 

}
Вложения
таймер2.jpg
(120.79 КБ) 58 скачиваний
тактирование.jpg
(99.68 КБ) 47 скачиваний
Реклама
Аватара пользователя
AlanDrakes
Прорезались зубы
Сообщения: 236
Зарегистрирован: Пн июл 04, 2016 16:51:22
Откуда: Россия, Омск

Re: Исполнение кода каждые 10 микросекунд

Сообщение AlanDrakes »

Предделитель можно выставить в 0, тогда частота не будет делиться.
А значение счётчика установить в (50000000 / 100000) - 1 = 499.

Но можете получить джиттер из-за обработчика прерывания и собственно кода.

Если код маленький - его можно было бы обрабатывать прямо в прерывании.
Реклама
Ответить

Вернуться в «ARM»