Таймер STM8

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Таймер STM8

Сообщение dm211 »

Таймер2 STM8 инициализирую так-

Код: Выделить всё

GPIO_Init(GPIOA,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_FAST); // выход шим
  TIM2_OC3Init(TIM2_OCMODE_PWM1, TIM2_OUTPUTSTATE_ENABLE, 1, TIM2_OCPOLARITY_LOW);
  TIM2_OC3PreloadConfig(ENABLE);
  TIM2_ARRPreloadConfig(ENABLE);
  TIM2_ITConfig(TIM2_IT_UPDATE, ENABLE);
Включаю таймер-

Код: Выделить всё

TIM2_Cmd(ENABLE);
Когда выключаю-

Код: Выделить всё

TIM2_Cmd(DISABLE);
-то иногда на выходе на ноге А3 иногда плюс остается,иногда ноль. Что-то делал в авр для того,чтобы на ноль падал всегда, не могу вспомнить. Посоветуйте.
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Таймер STM8

Сообщение Z_h_e »

Вот это наверное Вас интересует.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Таймер STM8

Сообщение dm211 »

Чё то я туплю, как это правильно написать в IAR- "TIM2_CCMR1 биты OC1M[2:0] переводите из режима ШИМ на режим 001" ? :oops:
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Таймер STM8

Сообщение Z_h_e »

Вы референс откройте и сразу станет понятно. Весь документ то читать не надо, сразу читайте про нужный регистр.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Реклама
Эиком - электронные компоненты и радиодетали
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Таймер STM8

Сообщение dm211 »

Нет, я про синтаксис, как это писать? Пример нужен.
Реклама
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Таймер STM8

Сообщение GARMIN »

TIM2->CCMR1 = TIM4_CR1_CEN;
Или побитно:

Код: Выделить всё

CLK->PCKENR1 = CLK_PCKENR1_TIM1   * 0		// таймер 1
              | CLK_PCKENR1_TIM2		* 1		// таймер 2
              | CLK_PCKENR1_TIM4		* 1		// таймер 4
              | CLK_PCKENR1_UART1		* 1		// UART1
              | CLK_PCKENR1_SPI		  * 1		// SPI
              | CLK_PCKENR1_I2C		  * 0;	// I2C
Все определения есть в хедерах
Реклама
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Таймер STM8

Сообщение Z_h_e »

Как скучно вы живете со своими готовыми функциями.

Предположу что мк STM8S103.

Вы устанавливаете режим PWM1, т.е. записываете в биты OC1M[2:0] 0b110.

Установив в эти биты 0b001 или 0b010 выход порта принудительно установится 1 или 0 соответственно. Таймер останавливать для этого не надо, если конечно другой нет причины для остановки.

Можно использовать вот такие конструкции (структура с битовыми полями).
TIM2_CCMR1_OC1M=0x1; //принудительно в 1.
TIM2_CCMR1_OC1M=0x6;//режим PWM1

Второй вариант, с компилироваться должно короче.
OC1M установлен режим 0b110, т.е. pwm1.
Вам надо принудительно на выходе установить 0. Т.е. режим 0b010 или всего лишь погасить бит OC1M2.
TIM2_CCMR1_OC1M&=0x3;
Вернуть обратно
TIM2_CCMR1_OC1M|=0x4;
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Таймер STM8

Сообщение dm211 »

Ну как скучно..пришлось проездом написать для STM8 прогу, с синтаксисом для IAR запутался, для STM32 побитово писать я пробовал,а тут что то затупил. STM8S003. Какой бит для чего я понял, а вот как писать,чтоб IAR не ругался.. Хидеры конечно же смотрел. TIM2_CCMR1_OC1M&=0x3;-такое не проходит.
А вот это надо запомнить-
CLK->PCKENR1 = CLK_PCKENR1_TIM1 * 0
| CLK_PCKENR1_TIM2 * 1 ....
-биты умножать на ноль и один.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Таймер STM8

Сообщение Z_h_e »

dm211 писал(а):TIM2_CCMR1_OC1M&=0x3;-такое не проходит.
В смысле?
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Таймер STM8

Сообщение dm211 »

[uquote="Z_h_e",url="/forum/viewtopic.php?p=3269753#p3269753"]
dm211 писал(а):TIM2_CCMR1_OC1M&=0x3;-такое не проходит.
В смысле?[/uquote]
Только по синтаксису, а за разьяснение-спасибо.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Таймер STM8

Сообщение Z_h_e »

у меня работает. Только что проверил.

Добавлено after 1 minute 15 seconds:
Ну погасите бит классически аврским способом. REG&=~(1<<n);
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Таймер STM8

Сообщение dm211 »

Ну тут в названии бита разница, вот такое правильно будет?
TIM2->CCMR1= TIM2_CCMR_OCM & 0x3;
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Таймер STM8

Сообщение Z_h_e »

У меня в хидере таких определений нет. Вы можете сами это сделать или может у Вас уже есть такие определения.
Однако такой конструкцией Вы погасите остальные биты в регистре.

Видимо TIM2_CCMR_OCM это константа 0x70;
Чтобы выключить бит OCM2, сделайте так.

TIM2->CCMR1&= ~(TIM2_CCMR_OCM & 0x40);

Возможно у Вас определена константа TIM2_CCMR_OCM2 как 0x40. Тогда
TIM2->CCMR1&= ~(TIM2_CCMR_OCM2);
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
dm211
Прорезались зубы
Сообщения: 208
Зарегистрирован: Вс дек 10, 2006 19:26:13

Re: Таймер STM8

Сообщение dm211 »

Так определен в stm8s.h-
#define TIM2_CCMR_OCM ((uint8_t)0x70) /*!< Output Compare x Mode mask. */
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

Re: Таймер STM8

Сообщение Z_h_e »

Ну вот, сделайте как я сказал и будет Вас счастье. :)

Структуры с битовыми полями определены в файле iostm8s103f3.h . Подключите этот файл, заработает пример с битовыми полями.

Добавлено after 55 minutes 50 seconds:
Z_h_e писал(а):Однако такой конструкцией Вы погасите остальные биты в регистре.
Хотя у Вас они наверное и так выключены (я про остальные биты регистра). Тогда достаточно будет оператора присваивания =, без логических операций.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 954
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Таймер STM8

Сообщение GARMIN »

[uquote="dm211",url="/forum/viewtopic.php?p=3269749#p3269749"]А вот это надо запомнить-
CLK->PCKENR1 = CLK_PCKENR1_TIM1 * 0
| CLK_PCKENR1_TIM2 * 1 ....
-биты умножать на ноль и один.[/uquote]
Так можно просто взять все описания битов из хедера и регулировать в процессе отладки программы.
Поэтому у меня нет функций в настройках периферии, только несколько присваиваний. :))
Ответить

Вернуться в «Разные вопросы по МК»