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