Страница 1 из 1
Таймер STM8
Добавлено: Вт дек 26, 2017 15:19:44
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);
Включаю таймер-
Когда выключаю-
-то иногда на выходе на ноге А3 иногда плюс остается,иногда ноль. Что-то делал в авр для того,чтобы на ноль падал всегда, не могу вспомнить. Посоветуйте.
Re: Таймер STM8
Добавлено: Вт дек 26, 2017 16:08:09
Z_h_e
Вот
это наверное Вас интересует.
Re: Таймер STM8
Добавлено: Вт дек 26, 2017 17:47:12
dm211
Чё то я туплю, как это правильно написать в IAR- "TIM2_CCMR1 биты OC1M[2:0] переводите из режима ШИМ на режим 001" ?

Re: Таймер STM8
Добавлено: Вт дек 26, 2017 17:48:34
Z_h_e
Вы референс откройте и сразу станет понятно. Весь документ то читать не надо, сразу читайте про нужный регистр.
Re: Таймер STM8
Добавлено: Вт дек 26, 2017 17:57:31
dm211
Нет, я про синтаксис, как это писать? Пример нужен.
Re: Таймер STM8
Добавлено: Вт дек 26, 2017 18:16:07
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
Все определения есть в хедерах
Re: Таймер STM8
Добавлено: Вт дек 26, 2017 18:49:29
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;
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 05:08:47
dm211
Ну как скучно..пришлось проездом написать для STM8 прогу, с синтаксисом для IAR запутался, для STM32 побитово писать я пробовал,а тут что то затупил. STM8S003. Какой бит для чего я понял, а вот как писать,чтоб IAR не ругался.. Хидеры конечно же смотрел. TIM2_CCMR1_OC1M&=0x3;-такое не проходит.
А вот это надо запомнить-
CLK->PCKENR1 = CLK_PCKENR1_TIM1 * 0
| CLK_PCKENR1_TIM2 * 1 ....
-биты умножать на ноль и один.
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 05:19:10
Z_h_e
dm211 писал(а):TIM2_CCMR1_OC1M&=0x3;-такое не проходит.
В смысле?
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 05:58:36
dm211
[uquote="Z_h_e",url="/forum/viewtopic.php?p=3269753#p3269753"]
dm211 писал(а):TIM2_CCMR1_OC1M&=0x3;-такое не проходит.
В смысле?[/uquote]
Только по синтаксису, а за разьяснение-спасибо.
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 06:01:20
Z_h_e
у меня работает. Только что проверил.
Добавлено after 1 minute 15 seconds:
Ну погасите бит классически аврским способом. REG&=~(1<<n);
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 06:20:38
dm211
Ну тут в названии бита разница, вот такое правильно будет?
TIM2->CCMR1= TIM2_CCMR_OCM & 0x3;
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 06:55:55
Z_h_e
У меня в хидере таких определений нет. Вы можете сами это сделать или может у Вас уже есть такие определения.
Однако такой конструкцией Вы погасите остальные биты в регистре.
Видимо TIM2_CCMR_OCM это константа 0x70;
Чтобы выключить бит OCM2, сделайте так.
TIM2->CCMR1&= ~(TIM2_CCMR_OCM & 0x40);
Возможно у Вас определена константа TIM2_CCMR_OCM2 как 0x40. Тогда
TIM2->CCMR1&= ~(TIM2_CCMR_OCM2);
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 07:21:50
dm211
Так определен в stm8s.h-
#define TIM2_CCMR_OCM ((uint8_t)0x70) /*!< Output Compare x Mode mask. */
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 08:21:47
Z_h_e
Ну вот, сделайте как я сказал и будет Вас счастье.
Структуры с битовыми полями определены в файле iostm8s103f3.h . Подключите этот файл, заработает пример с битовыми полями.
Добавлено after 55 minutes 50 seconds:
Z_h_e писал(а):Однако такой конструкцией Вы погасите остальные биты в регистре.
Хотя у Вас они наверное и так выключены (я про остальные биты регистра). Тогда достаточно будет оператора присваивания
=, без логических операций.
Re: Таймер STM8
Добавлено: Ср дек 27, 2017 13:42:11
GARMIN
[uquote="dm211",url="/forum/viewtopic.php?p=3269749#p3269749"]А вот это надо запомнить-
CLK->PCKENR1 = CLK_PCKENR1_TIM1 * 0
| CLK_PCKENR1_TIM2 * 1 ....
-биты умножать на ноль и один.[/uquote]
Так можно просто взять все описания битов из хедера и регулировать в процессе отладки программы.
Поэтому у меня нет функций в настройках периферии, только несколько присваиваний.
