реклама на сайте
подробности

 
 
> STM32F4: аппаратное управление GPIO с помощью таймера
k000858
сообщение Apr 3 2014, 03:20
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Необходимо настроить таймер так, что бы он аппаратно включал на ножке высокий уровень на заданное время.
Т.е. изначально на ножке низкий уровень, запустили таймер - на определенное время на ножке установился высокий уровень, при срабатывании таймера сново низкий уровень. Дали команду - все повторилось. Желательно все сделать без прерываний.

Какой для этого необходимо выбрать режим работы таймера?

Код
TIM_OCMODE_TIMING
TIM_OCMODE_ACTIVE
TIM_OCMODE_INACTIVE
TIM_OCMODE_TOGGLE
TIM_OCMODE_PWM1
TIM_OCMODE_PWM2
TIM_OCMODE_FORCED_ACTIVE
TIM_OCMODE_FORCED_INACTIVE


Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
adnega
сообщение Apr 3 2014, 03:55
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



TIM_OCMODE_PWM2
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 3 2014, 04:01
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(adnega @ Apr 3 2014, 07:55) *
TIM_OCMODE_PWM2

это режим One-Pulse на сколько я понял.
но в этом режиме счет можно запустить при подаче сигнала на другой пин таймера. а как то по-другому можно?
может есть у кого пример реализации..
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 3 2014, 05:06
Сообщение #4


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(k000858 @ Apr 3 2014, 06:01) *
может есть у кого пример реализации..
У всех есть. В руководстве пользователя (User manual) режим One pulse mode расписан аж на двух страницах со всеми подробностями. Пример чего вы хотите? Как биты в регистры прописывать?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 3 2014, 05:37
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(Сергей Борщ @ Apr 3 2014, 09:06) *
У всех есть. В руководстве пользователя (User manual) режим One pulse mode расписан аж на двух страницах со всеми подробностями. Пример чего вы хотите? Как биты в регистры прописывать?

как я понял из референс мауанала в режиме OPM таймер генерирует импульс на ножке контроллера после поступления сигнала на один из каналов этого таймера (другую ножку). Можно ли генерировать импульс с помощью таймера в этом режиме без подачи сигнала на другую ножку?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 3 2014, 06:03
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(k000858 @ Apr 3 2014, 07:37) *
Можно ли генерировать импульс с помощью таймера в этом режиме без подачи сигнала на другую ножку?
Можно. Из описания бита OPM вытекает, что этот режим лишь останавливает счет по событию Update Event путем аппаратного сброса бита CEN. А запускать счет можно программной установкой этого бита.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
k000858
сообщение Apr 3 2014, 07:38
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



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

почему то при изменении OCPolarity ничего не меняется..
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 3 2014, 10:36
Сообщение #8


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(k000858 @ Apr 3 2014, 09:38) *
почему то при изменении OCPolarity ничего не меняется..
Я бы баловался битами OCxM между режимами PWM mode 1 и PWM mode 2.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01398 секунд с 7
ELECTRONIX ©2004-2016