День добрый.
Возникла необходимость необычного режима работы таймера. Пусть будет TIM4 stm32f303.
Плата разведена, изготовлена и работает в одном из штатных режимов таймера, но....
Очень хочется скрестить режим работы таймера "Output compare CH1" c программным управлением выхода CH1.
Пусть установлен режим "Active level on match" CH1 не далеко от предела, предписанного регистром ARR. Тут все по "букварю" - линия активируется там где надо.
Далее происходит событие UPLOAD и попадаем в программу обработки прерывания, где надо сделать определенные манипуляции и... как-то деактивировать линию выхода CH1 - к ней привязана микросхема и нужен спад...
Отмечу, что реализовать альтернативный способ управления с помощью других механизмов - нет проблем. Но хочется именно так.
Таким образом мои рассуждения по этому вопросу:
1. Прямое управление линией блокировано.
2. Флаг события TIM_FLAG_CC1 сбрасывал - не помогло.
3. Пытался "играться" с переключением выхода таймера в режим "Forced inactive" с последующим возвращением в режим "Active level on match". Тоже не хочет работать, наверное из-за какой-то защиты. Не понял как с ней справиться.
TIM4->CCMR1 &= ~TIM_CCMR1_OC1M; // Очистка битов режима
TIM4->CCMR1 |= TIM_OCMODE_FORCED_INACTIVE << 4; // Установка режима принудительного неактивного
и сразу
TIM4->CCMR1 &= ~TIM_CCMR1_OC1M; // Очистка битов режима
TIM4->CCMR1 |= TIM_OCMODE_ACTIVE << 4; // Установка режима OutputCompare
Вопрос - это можно реализовать или забыть и "ездить" на других способах?
Опять таймер
-
С.Н.
- Потрогал лапой паяльник
- Сообщения: 306
- Зарегистрирован: Пн окт 26, 2020 08:37:51
- Откуда: г.Волгоград
Опять таймер
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Re: Опять таймер
Всегда можно переключить этот порт из Alt в Output с установленным ODR=0, а потом вернуть в Alt.
-
С.Н.
- Потрогал лапой паяльник
- Сообщения: 306
- Зарегистрирован: Пн окт 26, 2020 08:37:51
- Откуда: г.Волгоград
Re: Опять таймер
[uquote="u37",url="/forum/viewtopic.php?p=4793957#p4793957"]Всегда можно переключить этот порт из Alt в Output с установленным ODR=0, а потом вернуть в Alt.[/uquote]
Пробовал.... Сейчас еще раз покручу..
Пробовал.... Сейчас еще раз покручу..
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Re: Опять таймер
В режиме PWM разве не то же самое происходит? Тем более у TIM4 еще и One-pulse mode должен быть.
-
С.Н.
- Потрогал лапой паяльник
- Сообщения: 306
- Зарегистрирован: Пн окт 26, 2020 08:37:51
- Откуда: г.Волгоград
Re: Опять таймер
[uquote="Adrift",url="/forum/viewtopic.php?p=4793961#p4793961"]В режиме PWM разве не то же самое происходит? Тем более у TIM4 еще и One-pulse mode должен быть.[/uquote]
Этот режим сейчас и работает. Но поскольку спад, который мне нужен, всегда в фиксированном по времени месте относительно события UPDATE, то это меня поджимает по скорости выполнения программы между событиями UPDATE. Хотелось бы что-то более асинхронное по выполнению и синхронное по началу.
Добавлю. Проблема отпала. Вернулся к исходному режиму.
Этот режим сейчас и работает. Но поскольку спад, который мне нужен, всегда в фиксированном по времени месте относительно события UPDATE, то это меня поджимает по скорости выполнения программы между событиями UPDATE. Хотелось бы что-то более асинхронное по выполнению и синхронное по началу.
Добавлю. Проблема отпала. Вернулся к исходному режиму.
ФУОЗ на платформе Ардуино: https://radiokot.ru/forum/viewtopic.php ... 6#p4366626
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
ВК - "ФУОЗ на микроконтроллере Atmega328P (МПСЗ)"
Re: Опять таймер
[uquote="С.Н.",url="/forum/viewtopic.php?p=4793964#p4793964"]то это меня поджимает по скорости выполнения программы между событиями UPDATE.[/uquote]Может если писать код нормально, а не "отрезать хвост кошке по частям" как у вас:
[uquote="С.Н.",url="/forum/viewtopic.php?p=4793946#p4793946"]TIM4->CCMR1 &= ~TIM_CCMR1_OC1M; // Очистка битов режима
TIM4->CCMR1 |= TIM_OCMODE_FORCED_INACTIVE << 4; // Установка режима принудительного неактивного
и сразу
TIM4->CCMR1 &= ~TIM_CCMR1_OC1M; // Очистка битов режима
TIM4->CCMR1 |= TIM_OCMODE_ACTIVE << 4; // Установка режима OutputCompare[/uquote]то и "поджимать" не будет?
PS: Чтобы "скрестить какой-то режим работы выхода таймера c программным управлением выхода", достаточно переключать мультиплексор управления соответствующей ногой из состояния "GPIO" в "альтернативную функцию". И обратно.
[uquote="С.Н.",url="/forum/viewtopic.php?p=4793946#p4793946"]TIM4->CCMR1 &= ~TIM_CCMR1_OC1M; // Очистка битов режима
TIM4->CCMR1 |= TIM_OCMODE_FORCED_INACTIVE << 4; // Установка режима принудительного неактивного
и сразу
TIM4->CCMR1 &= ~TIM_CCMR1_OC1M; // Очистка битов режима
TIM4->CCMR1 |= TIM_OCMODE_ACTIVE << 4; // Установка режима OutputCompare[/uquote]то и "поджимать" не будет?
PS: Чтобы "скрестить какой-то режим работы выхода таймера c программным управлением выхода", достаточно переключать мультиплексор управления соответствующей ногой из состояния "GPIO" в "альтернативную функцию". И обратно.