Не работает захват Timer32_1

Два примера из mik32-examples-main с сайта Микрон HAL_Timer32 и HAL_Timer32_IRQ не работает функция захвата, код исполняется из eeprom.
Из примера HAL_Timer32_IRQ перепробовал 4 канала (т.е. P0_0, P0_1, P0_2, P0_3) захват не заработал, но прерывания по сравнению приходят. Код вообще не менял.
Пробовал менять htimer32_channel.Mode = TIMER32_CHANNEL_MODE_COMPARE; на htimer32_channel.Mode = TIMER32_CHANNEL_MODE_CAPTURE;
не помогло, код

if (HAL_Timer32_Compare_Start_IT(&htimer32, &htimer32_channel) != HAL_OK)
{
xprintf("Error\n");
}

выдает false.

Подскажите что не так?
 

ejsanyo

Active member
Я таймера в режиме захвата на этой платформе юзать не пробовал и может чего-то не понимаю, но...не логичнее ли для этого было бы стартовать не HAL_Timer32_Compare_Start_IT(), а HAL_Timer32_Capture_Start_IT()? :unsure:
 

ejsanyo

Active member
Ну что ещё могло пойти не так. Вы ему тактирование подали( __HAL_PCC_TIMER32_1_CLK_ENABLE() )? А ноги входами таймера сделали? Причём правильные ноги, PORT 0_0...0_3 Их надо переводить в режим "HAL_GPIO_MODE_TIMER_SERIAL".
 
Выкладываю доработанный пример HAL_Timer32_IRQ работающий с захватом и вычислением частоты с выдачей в терминал, пример скорее всего сырой
 

Вложения

  • HAL_Timer32_IRQ.zip
    245 KB · Просмотры: 3

ejsanyo

Active member
Я бы здесь заметил, что по моему HAL_Timer32_Capture_Start_IT() уже настраивает в таймере всё, что нужно для капчи. Т.е. стартовать HAL_Timer32_Start_IT(), или добавлять в htimer32.InterruptMask TIMER32_INT_IC_M, вроде как, уже должно быть не обязательно. Или всё же без этого не работает?
 
1) Убрал TIMER32_INT_IC_M все работает
htimer32.InterruptMask = TIMER32_INT_OVERFLOW_M | TIMER32_INT_UNDERFLOW_M | TIMER32_INT_IC_M(0);

2) Закомментировал вызов HAL_Timer32_Start_IT все работает
 
Сверху