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

 
 
> STM32 TIM4 Output Compare 4, не хочет работать!
AHTOXA
сообщение Apr 21 2010, 08:05
Сообщение #1


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Здрасьте всем.
Что-то я застрял, прошу помощиsmile.gif
Выдавал ШИМ на TIM2_CH2. Потом стало надо выдавать на TIM4_CH4. Переделал инициализацию, а оно не работает. Вот код:
Код
void init_t4_ch4()
{
    // enable port B and AFIO peripherals
    RCC->APB2ENR |= RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN;
    // enable TIM4 peripheral
    RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
    // configure B9 to alternative output mode
    GPIOB->CRH = (GPIOB->CRH & ~(0x0F<<4)) | (0x0B<<4);

    // set up timer
    TIM4->CR1 = TIM_CR1_ARPE;    // count up to ARR, no divisor, auto reload
    TIM4->ARR = 36;            // period
    TIM4->PSC = 0;                // prescaler
    TIM4->EGR = TIM_EGR_UG;        // generate an update event to reload the prescaler value immediately
    TIM4->CR2 = 0;

    // set up compare (ch4)
    TIM4->CCER &= ~(TIM_CCER_CC4E | TIM_CCER_CC4P);    // disable cc4 output, clear polarity
    TIM4->CCR2 = 18;            // cc4 period
    TIM4->CCMR2 &= 0x00FF;
    TIM4->CCMR2 |=
        TIM_CCMR2_OC4M_2 | TIM_CCMR2_OC4M_1         // PWM 1 (0x6000)
        | TIM_CCMR2_OC4PE                            //  enable preload;
;
    TIM4->CCER |= TIM_CCER_CC4E;    // enable cc4 output

    TIM4->CR1 |= TIM_CR1_CEN;        // run timer
}


А вот для сравнения рабочий код с TIM2_CH2:
Код
void init_t2_ch2()
{
    // enable port A and AFIO peripherals
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;
    // enable TIM4 peripheral
    RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;
    // configure A1 to alternative output mode
    GPIOA->CRL = (GPIOA->CRL & ~(0x0F<<4)) | (0x0B<<4);

    // set up timer
    TIM2->CR1 = TIM_CR1_ARPE;    // count up to ARR, no divisor, auto reload
    TIM2->ARR = 36;            // period
    TIM2->PSC = 0;                // prescaler
    TIM2->EGR = TIM_EGR_UG;        // generate an update event to reload the prescaler value immediately
    TIM2->CR2 = 0;

    // set up compare (ch4)
    TIM2->CCER &= ~(TIM_CCER_CC2E | TIM_CCER_CC2P);    // disable cc4 output, clear polarity
    TIM2->CCR2 = 18;            // cc4 period
    TIM2->CCMR1 &= 0x00FF;
    TIM2->CCMR1 |=
        TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1         // PWM 1 (0x6000)
        | TIM_CCMR1_OC2PE                            //  enable preload;
;
    TIM2->CCER |= TIM_CCER_CC2E;    // enable cc4 output

    TIM2->CR1 |= TIM_CR1_CEN;        // run timer
}


Первый не работает, второй - работает. Где я что забыл?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post



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

 


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


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