student23 1 22 сентября, 2022 Опубликовано 22 сентября, 2022 · Жалоба Всем привет. Работаю с bluepill. void HAL_TIM_PWM_PulseFinishedCallback(TIM_HandleTypeDef *htim) { if (htim -> Instance == TIM3){ cringe +=1; } } void HAL_TIM_PWM_PulseFinishedHalfCpltCallback(TIM_HandleTypeDef *htim) { if (htim -> Instance == TIM3){ cringe +=2; } } Перед вами две встроенные функции. Для включения таймера ШИМ генерации я пишу следующее: HAL_TIM_PWM_Start_IT(&htim3, TIM_CHANNEL_1); Дело в том, что первый коллбек работает исправно, а второй вообще не хочет исполняться. В чем может быть проблема? (Первая функция вызывает прерывания по окончанию ШИМ импульса, а вторая - прерывания по половине периода) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
popeye 0 23 сентября, 2022 Опубликовано 23 сентября, 2022 · Жалоба А Вы уверены, что второй колбэк есть в HAL для STM32F1xx? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
novikovfb 17 23 сентября, 2022 Опубликовано 23 сентября, 2022 · Жалоба самое простое - посмотреть дизассемблированную программу и найти там этот колбэк и место его вызова. Скорее всего, где-то опечатка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SSerge 4 24 сентября, 2022 Опубликовано 24 сентября, 2022 · Жалоба 18 hours ago, novikovfb said: самое простое - посмотреть дизассемблированную программу и найти там этот колбэк и место его вызова. Скорее всего, где-то опечатка. Зачем деассемблировать то, на что есть исходники? Посмотреть текст в файле stm32f1xx_hal_tim.c и поискать там где же этот коллбэк вызывается ещё проще. PS. А вызывается от в функции TIM_DMADelayPulseHalfCplt() и этот HalfCplt относится не к половине импулься или периода PWM, а к половине буфера DMA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
student23 1 25 сентября, 2022 Опубликовано 25 сентября, 2022 · Жалоба В 24.09.2022 в 12:19, SSerge сказал: Зачем деассемблировать то, на что есть исходники? Посмотреть текст в файле stm32f1xx_hal_tim.c и поискать там где же этот коллбэк вызывается ещё проще. PS. А вызывается от в функции TIM_DMADelayPulseHalfCplt() и этот HalfCplt относится не к половине импулься или периода PWM, а к половине буфера DMA. Теперь я понял) Спасибо большое! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться