Перейти к содержанию

Не запускается прерывание таймера stmf4


levshkatov

Рекомендуемые сообщения

Добрый день. Не хочет работать таймер на stm32f407. Пытаюсь раз в секунду поморгать светодиодом и не получается. Программа вообще не заходит в обработчик прерывания таймера. В чем может быть проблема?

TIM_HandleTypeDef htim3;
static void MX_TIM3_Init(void);

int main(void)
{
  HAL_Init();
  SystemClock_Config();
  ...
  MX_TIM3_Init();
  while (1){
	  
  }

}

void SystemClock_Config(void)
{

  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;

    /**Configure the main internal regulator output voltage 
    */
  __HAL_RCC_PWR_CLK_ENABLE();

  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI;
  RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  RCC_OscInitStruct.HSICalibrationValue = 16;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_NONE;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }

    /**Initializes the CPU, AHB and APB busses clocks 
    */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_HSI;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_0) != HAL_OK)
  {
    Error_Handler();
  }

    /**Configure the Systick interrupt time 
    */
  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

    /**Configure the Systick 
    */
  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  
}

static void MX_TIM3_Init(void)
{
  htim3.Instance = TIM3;
  htim3.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
  htim3.Init.Prescaler = 48000 - 1;
  htim3.Init.CounterMode = TIM_COUNTERMODE_UP; 
  htim3.Init.Period = 999;
  if (HAL_TIM_Base_Init(&htim3) != HAL_OK){
    Error_Handler();
  }
  if (HAL_TIM_Base_Start_IT(&htim3) != HAL_OK){
    Error_Handler();
  }
}

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim){
	if(htim->Instance==TIM3){
		HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_5);
	}
}

 

Ссылка на комментарий
Поделиться на другие сайты

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

А кто нибудь сказал NVIC о том, что прерывание от таймера вообще разрешено? Колбэк обработается только в случае вызова системного обработчика прерываний контроллером этих самых прерываний.

Я в этом коде вижу только одно прерывание, которое будет работать:

3 часа назад, levshkatov сказал:

HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);

если конфигурируете проект через куб, то в настройках таймера надо поставить галку - глобальные прерывание от таймера TIM3. Тогда строчка инициализации NVIC добавится в проект. Или можно вручную добавить

HAL_NVIC_SetPriority(TIM3_IRQn, 3, 0);
HAL_NVIC_EnableIRQ(TIM3_IRQn);

соответственно отработчик прописать в it.h

void TIM3_IRQHandler(void)
{
  HAL_TIM_IRQHandler(&htim3);
}

 

Изменено пользователем mail_robot

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

@mail_robot Знаю, что нужно разрешить прерывания, просто во всех примерах пользовались коллбэком и без этого. Включил прерывания.

Но программа по-прежнему не заходит в void TIM3_IRQHandler(void){}

Изменено пользователем levshkatov
Ссылка на комментарий
Поделиться на другие сайты

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Проблему решил. Ни в одном примере в интернете не нашел, что необходимо написать функцию HAL_TIM_Base_MspInit() в msp.c. Код:

void HAL_TIM_Base_MspInit(TIM_HandleTypeDef* htim_base)
{ 
if(htim_base->Instance==TIM3)
  {
    __HAL_RCC_TIM3_CLK_ENABLE();
	  HAL_NVIC_SetPriority(TIM3_IRQn, 0, 0);
    HAL_NVIC_EnableIRQ(TIM3_IRQn);
  }
}

Также нужно написать аналогичную функцию DeInit:

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef* htim_base)
{
  if(htim_base->Instance==TIM3)
  {
    __HAL_RCC_TIM3_CLK_DISABLE();
	  HAL_NVIC_DisableIRQ(TIM3_IRQn);
  }
}

 

Ссылка на комментарий
Поделиться на другие сайты

А теперь смотрим как это делается без калокубов 


 

void TIM3_IRQHandler (void)
 {
      if (TIM3->SR & TIM_SR_UIF)
    {
         
         TIM3->SR&=(~TIM_SR_UIF);
        GPIOD->ODR^=GPIO_ODR_ODR_13;
        }
 }


void TIM3_init(void)
        {
            RCC->AHB1ENR|=RCC_AHB1ENR_GPIODEN;
        GPIOD->MODER &= ~GPIO_MODER_MODER13 ;
      GPIOD->MODER |= GPIO_MODER_MODER13_0 ; 
            RCC->APB1ENR|=RCC_APB1ENR_TIM3EN;
            TIM3->PSC=8400-1;
            TIM3->ARR=10000-1;
            TIM3->DIER=TIM_DIER_UIE;
            
            NVIC_SetPriority(TIM3_IRQn,15);
            NVIC_EnableIRQ(TIM3_IRQn);
            
            TIM3->CR1|=TIM_CR1_CEN;
        }

 

 

 

И главное смотрим размер кода ...

Program Size: Code=792 RO-data=408 RW-data=0 ZI-data=1632  

И это вместе с инитом тактовой...http://mcu.goodboard.ru/viewtopic.php?id=11

Изменено пользователем dosikus
Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, levshkatov сказал:

Ни в одном примере в интернете не нашел, что необходимо написать

не надо ничего писать

есть же

9 минут назад, dosikus сказал:

калокуб

он все это пишет автоматически. Поганая программка. Совершенно отвратительная. Столько времени экономит зазря...

10 минут назад, dosikus сказал:

И главное смотрим размер кода ...

Program Size: Code=792 RO-data=408 RW-data=0 ZI-data=1632  

и да, при наличии полумегабайта флеша калокуб однозначно проигрывает по всем параметрам. Примерно как поссать в море в надежде его испортить

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Ога, ога . И самое главное пИсатели в калокубе даже не понимают что и зачем оно натыкано ...

А когда прочитаешь RM оказывается все просто и понятно.

Насчет необхватности флеша - весьма доставило, вот такие " тыкатели  в калокубе" умудряются утыкать весь флеш под завязку...

Внятное объяснение использование DeInit местный гуру может дать?????????

 

 

Изменено пользователем dosikus
Ссылка на комментарий
Поделиться на другие сайты

mail_robot,  результат выше, раскройте глаза.

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

Изменено пользователем dosikus
Ссылка на комментарий
Поделиться на другие сайты

результат чего выше? Упорного бараньего мазохизма ради пары свободных байт на инитке? Остальной то код вовсе не на кубе пишется. И в чем тогда разница?

Нужно делать то, что нужно. А то, что не нужно, делать не нужно. (С) Винни Пух

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Можно скрин с программы  Victoria по проверки диска "С"  и флэшки? С диска "с" воспроизводится как? Если так же, то можно эту же флэшку вставить в телефон/фотоаппарат и проверить, с качеством записи не хуже чем на вашей камере? Если копировать видео с камеры которая подключена к компьютеру, то за сколько копируется файл например гигабайтной длинны? А если его же записать?  
    • В ГДР-овских швейных машинах позднего периода линейки Famula присутствуют модели с т.н. автоматическими функциями, они отличаются от остальных словом Electronic в названии, индексом 51 в номере модели, и наличием трёх кнопок справа: левая кнопка: положение иглы (в нажатом состоянии - игла всегда будет возвращаться вниз, в отжатом - уходить наверх) средняя: одиночный прокол - при нажатой кнопке и нажатии на педаль отрабатывается один цикл опускания и подъёма иглы правая: пониженная скорость - при нажатой кнопке, скорость ограничена фиксированным значением Электронная часть состоит из модуля Управления скоростью, модуля Позиционирования иглы и мотора с педалью. Вот схемы из той документации, что удалось добыть:     Указанные функции реализованы в модуле Позиционирования иглы (схема на стр. 22), позиция иглы отслеживается по герконовому датчику на маховике, подключенного непосредственно к модулю позиционирования (разъём X5). Модуль модуль управления скоростью (стр. 21) подключен к сети 220 через выключатель, к мотору (стр.18) и к одному из выводов педали. Модуль позиционирования подключен к модулю управления скорости (X4.2, X4.3, X4.4) и второму выводу педали (X4.1), к первому выводу педали - через X4.4.   Педаль представляет собой угольный реостат, в нажатом положении сопротивление стремится к нулю. Проблема: Не работает позиционирование иглы в крайних точках, в зависимости от положения левой кнопки (S1) - после отпускания педали игла останавливается в произвольном положении. Не работает функция т.н. Одиночного прокола - когда нажата кнопка S2, по нажатию педали маховик стоит на месте и не двигается. Не учитывая функционал этих кнопок, всё остальное исправно работает, включая функцию пониженной скорости - при нажатии правой кнопки (S3). Что было сделано: Визуальный осмотр, чистка контактов и замена электролитических конденсаторов на всех платах. Замена симистора на Модуле оборотов и всех транзисторов и микросхемы логики на Модуле позиционирования на полные аналоги. Прозвонка герконового датчика положения иглы, кнопочных переключателей S1, S2, S3, прозвонка дорожек. Эксперименты по замене сдвоенного операционного усилителя B2761 на имеющийся в наличии сдвоенный компаратор LM393 (неудачные). После этого была получена в распоряжение полностью рабочая машина аналогичной модели, используемая в дальнейшем, как референсная, и окончательно выявлен неисправный модуль - м. позиционирования. Методом кросс-замены были проверены и исключены все активные элементы: сдвоенный операционный усилитель B2761 (N1), микросхема логики D1, транзисторы V1 и V8, а также диодные сборки V2 и V7, и конденсаторы. При очередной выпайке и запайке транзистора V8 начало наблюдаться такое поведение: после включения машина отрабатывает функцию одиночного прокола (при нажатой кнопке S2), но только один раз, иногда не до конца; дальнейшие повторные нажатия педали ни к чему не приводят. При выключении питания и последующем включении, функция одиночного прокола может снова отработать один раз. После этого были пропаяны и прозвонены все элементы и дорожки по периметру, находящиеся рядом с транзистором V8, без положительного результата.     Дальнейшая работа по поиску неисправности осложняется тем, что я не очень хорошо понимаю, как работает схема Модуля позиционирования и не могу даже приблизительно сформулировать фазы её работы, в силу своей квалификации: мне непонятно подключение второго операционного усилителя N1.2 - его выход упирается в диоды V4 и V6, и его функция в этой схеме (компаратор?) работа AND-логики, в особенности элементов D1.1 и D1.2 в контексте подключения к усилителю и транзистору V8Для прояснения ситуации, с некоторых контрольных точек, обозначенных номерами в кружках на схеме были сняты осциллограмы на рабочем аппарате: Замеры производились на прибор Fnirsi DPOX180H. Здесь канал 1 (жёлтый) - датчик позиции (геркон), точка №6, негативный контакт - X4.3 Выводы: Предположительно, управляющее напряжение на контакте X4.2. Контакты X4.1 и X4.4 соединены с соответствующими выводами реостата педали. Следующим шагом планирую последовательное выпаивание и проверку всех диодов и резисторов на плате Модуля позиционирования. Буду признателен за помощь и советы. Сам я по уровню начинающий радиолюбитель, мой опыт ограничен сборкой / мелким ремонтом и доработками БПЛА и работой с несложными схемами на базе микроконтроллеров ATMega и ESP, со схемотехникой советского периода знаком только по опыту с радиоконтрукторами и простыми транзисторными приёмниками, но очень бы хотелось разобраться, поэтому буду признателен также за ссылки на конкретные обучающие материалы по теме и методикам работы.
    • Давно уже 85% сервисов так работают. Реально грамотных еще надо поискать.
    • Pulse_9600Hz.hex Импульсы на выводе PD6. МК тактируется на частоте 1 МГц от внутреннего генератора, потому точность ещё та... при использовании кварца результат улучшится...  
    • Вообще осциллограмму c этой обмотки посмотреть очень познавательно, чтобы оценить скважность открытия ключей. Хорошо бы, если она была 50%. Там через оптопару идёт запрещающий сигнал, который закрывает промежуточный p-n-p транзистор, тем самым закрывая n-p-n транзистор включённый через ограничительный пятиватный резистор в диагональ диодного моста, связующего обмотки трансформаторов. В остальном схема силовой части одинаковая.
×
×
  • Создать...