Перейти к содержанию
    

Второй день маюсь. Не могу запустить ШИМ на ноге PB7. Что я делаю не так? Подскажите ,плиз! :1111493779:

main.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А включить таймер:

    RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;

или

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE)...

?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Включил теперь...

-не помогает.

RCC->APB2ENR|=1; - альтернативные фнкции портов включил и тоже ничего...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот мой рабочий код (таймер 2, канал 2):

#define ARR_VAL    36
#define CCR2_VAL    ARR_VAL / 2

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

    // 2. set up ccr2
    TIM2->CCER &= ~(TIM_CCER_CC2E | TIM_CCER_CC2P);    // disable cc2 output, clear polarity
    TIM2->CCR2 = CCR2_VAL;                        // cc2 period
    TIM2->CCMR1 = TIM_CCMR1_OC2M_2 | TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2PE; // PWM 1 (0x6000), enable preload;
    TIM2->CCER |= TIM_CCER_CC2E;    // enable cc2 output

    TIM2->CR1 |= TIM_CR1_CEN;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал как ты написал, Антоха. С поправкой на таймер 4 - все равно не работает.

А в режиме симуляции таймер должен вести отсчеты?

И еще вопрос: на ножке порта в симуляторе я увижу ШИМ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

#include    "stm32f10x_map.h"

#define    RCC_APB1ENR_TIM4EN        ((u32)(2))
#define    RCC_APB2ENR_IOPAEN        ((u32)(2))
#define    RCC_APB2ENR_IOPBEN        ((u32)(3))
#define    RCC_APB2ENR_AFIOEN        ((u32)(0))
#define    RCC_CFGR_ADCPRE            ((u32)(14))
#define    RCC_CFGR_PPRE1            ((u32)(8))
#define    AF_PP_50                    ((u32)(11))
#define    CFG_PIN7                    ((u32)(28))
#define    TIM_CCER_CC1E            ((u32)(0))
#define    TIM_CCER_CC2E            ((u32)(4))
#define    OC_MODE_PWM1            ((u32)(6))
#define    TIM_CCMR1_OC1M            ((u32)(4))
#define    TIM_CCMR1_OC2M            ((u32)(12))
#define    TIM_CR1_CEN                ((u32)(0))
#define    TIM_CR1_ARPE                ((u32)(7))

int    main()
{
    RCC->AHBENR=0;
    RCC->APB1ENR=
        (1<<RCC_APB1ENR_TIM4EN);
    RCC->APB2ENR=
        (1<<RCC_APB2ENR_IOPAEN)
        |(1<<RCC_APB2ENR_IOPBEN)
        |(1<<RCC_APB2ENR_AFIOEN);
    RCC->CFGR=
        (3<<RCC_CFGR_ADCPRE)
        |(4<<RCC_CFGR_PPRE1);

    GPIOB->CRL=(AF_PP_50<<CFG_PIN7);    // T4_C2


    TIM4->ARR=(12000000/75000)-1;        // запись периода
    TIM4->PSC=0;                        // запись базы
    TIM4->CCR1=10;                    // длительность импульса DIM0
    TIM4->CCR2=20;                    // длительность импульса DIM1
    TIM4->CCER=
        (1<<TIM_CCER_CC1E)
        |(1<<TIM_CCER_CC2E);            // разрешить первый и второй выходы сравнения
    TIM4->CCMR1=
        (OC_MODE_PWM1<<TIM_CCMR1_OC1M)    // режим ШИМ для первого канала
        |(OC_MODE_PWM1<<TIM_CCMR1_OC2M); // режим ШИМ для второго канала
    TIM4->CNT=0;
    TIM4->CR2=0;
    TIM4->CR1=
        (1<<TIM_CR1_CEN)                 // разрешить счет
        |(1<<TIM_CR1_ARPE);            // разрешить автоматическую перезагрузку

    while(1);
}

 

В Keil даже симулируется...

 

АХТУНГ!

А есть ли четвертый таймер у 103T8?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл ошибку:

    GPIOB->CRL=0x30000000;//альтерн.функция push-pull,PB7-50МГц,

0x3 - это просто output, а надо 0xB - альтернативный output.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл ошибку:

    GPIOB->CRL=0x30000000;//альтерн.функция push-pull,PB7-50МГц,

0x3 - это просто output, а надо 0xB - альтернативный output.

это я уже исправил. Все равно не помогает...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А есть ли четвертый таймер у 103T8?

Вроде есть.

 

это я уже исправил. Все равно не помогает...

 

В симуляторе или в реальном железе?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вроде есть.

 

 

 

В симуляторе или в реальном железе?

Не работает и в симуляторе, и в железе.

 

Таймер4 есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...