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

 
 
> STM32F103R8 Первый таймер запустить на выход в режиме ШИМ, Все таймеры работают, а первый не хочет :(
Serj78
сообщение Dec 24 2009, 05:04
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



Пытаюсь заставить работать первый таймер в STM32F103R8 , чтобы он работал в в режиме PWM1.
Использую Keil? там есть удобный Configuration wisard.

таймеры 2 и 3 удалось запустить без проблем, а вот 1-ый почему-то не хочет работать. бит MOE в регистре BTDR установлен в 1, остальные установки как у других таймеров.
Тактирование включено, ноги OC3N (PB15), OC2N (PB14) в переключены на альтернативный выход.

анализ регистра самого таймера (CNT) показывает, что таймер сам считает, на изменение числа прескалера реагирует.

Что еще надо включить, подкажите....

Пытаюсь это все сделать на отладочной плате STM32-P103.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 4)
Brain13
сообщение Mar 21 2011, 05:43
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-08-09
Пользователь №: 52 078



Такая же проблема, таймер работает, нога не дергается. Вот инициализация:
Код
    RCC->APB2ENR |= RCC_APB2ENR_IOPСEN;
    RCC->APB2ENR |= RCC_APB2Periph_AFIO;
    RCC->APB2ENR |= RCC_APB2ENR_TIM8EN;

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOC, &GPIO_InitStructure);

    TIM_TimeBaseStructure.TIM_Period = 1800-1;
    TIM_TimeBaseStructure.TIM_Prescaler = 0;
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;

    TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
    TIM_ARRPreloadConfig(TIM8, ENABLE);

    TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
    TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
    TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Disable;
    TIM_OCInitStructure.TIM_Pulse = 900-1;
    TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
    TIM_OCInitStructure.TIM_OCNPolarity = TIM_OCNPolarity_High;
    TIM_OCInitStructure.TIM_OCIdleState = TIM_OCIdleState_Reset;
    TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCNIdleState_Reset;

    TIM_OC1Init(TIM8, &TIM_OCInitStructure);
    TIM_OC1PreloadConfig(TIM8, TIM_OCPreload_Enable);

    NVIC_InitStructure.NVIC_IRQChannel = TIM8_UP_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);

    TIM_ITConfig(TIM8, TIM_IT_Update, ENABLE);

    TIM_CtrlPWMOutputs(TIM8, ENABLE);
    TIM_Cmd(TIM8, ENABLE);

Что я не сделал?
Go to the top of the page
 
+Quote Post
Serj78
сообщение Mar 23 2011, 17:53
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 966
Регистрация: 27-05-06
Из: СПб
Пользователь №: 17 499



DIER регистра не вижу sm.gif
В первом таймере есть специальный регистр мертвого времени и аппаратной защиты ( первый таймер предназначен для 3-ф мотора)
В моем случае я также пользовался функциями из библиотек к отладочной плате, нифига не работало,
потом прописал руками регистры , прямо в лоб числами.- все заработало .
Go to the top of the page
 
+Quote Post
gba
сообщение Mar 26 2011, 15:34
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 21-01-11
Пользователь №: 62 381



Цитата(Serj78 @ Mar 23 2011, 20:53) *
DIER регистра не вижу sm.gif
В первом таймере есть специальный регистр мертвого времени и аппаратной защиты ( первый таймер предназначен для 3-ф мотора)
В моем случае я также пользовался функциями из библиотек к отладочной плате, нифига не работало,
потом прописал руками регистры , прямо в лоб числами.- все заработало .

Только наверно не DIER, а BDTR (Break and Dead Time Register)? DIER как раз задан через TIM_ITConfig()...

Цитата(Brain13 @ Mar 21 2011, 08:43) *
Что я не сделал?

В BDTR попробуйте отключить Break в принципе. У меня из-за этого была похожая проблема, причем я так и не понял как правильно Break настроить.

PS Вообще говоря, если пользуетесь библиотекой, то лучше все через ее функции делать, в том числе и настройку RCC, а то каша получается.
Go to the top of the page
 
+Quote Post
Brain13
сообщение Mar 28 2011, 04:26
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 65
Регистрация: 28-08-09
Пользователь №: 52 078



Как ни странно, но этот код заработал. Я просто с кодом экспериментировал, а камень не зашивал sm.gif .

Цитата
PS Вообще говоря, если пользуетесь библиотекой, то лучше все через ее функции делать, в том числе и настройку RCC, а то каша получается.

Да, что то раньше внимания не обращал, а Вы сказали - задумался. Надо будет переписать работу с RCC.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 12:55
Рейтинг@Mail.ru


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