Как получить сигнал ШИМ на порту D6 (PE_9) на плате STM? - PullRequest
0 голосов
/ 08 ноября 2019

Я программирую плату и хочу, чтобы на выводе появился сигнал ШИМ для управления светодиодом. Я использую плату STM32 NUCLEO-F207ZG, и только программирование регистров низкого уровня. Это не работает.

Я изучил руководство, таблицу данных и примечание по применению. Также были выполнены некоторые поиски в Google.

// Включить таймер 1 такт: RCC-> APB2ENR | = BIT0;

//Output mode on PWM
TIM1->CCMR1 |= BIT5 | BIT6;

//Period:
TIM1->ARR = 0x0000FFFF;

//Duty cycle:
TIM1->CCR1 = 0x00007FFF;

//Enable preload
TIM1->CCMR1 |= BIT3;
TIM1->CR1 |= BIT7;

//Enable CC1 output
TIM1->CCER |= BIT0;

//Enable timer
TIM1->CR1 |= BIT0;

//Enable GPIOE clock
RCC->AHB1ENR |= BIT4;

//Alternate function mode voor pin PE_9
GPIOE->MODER |= BIT19;
GPIOE->AFR[1] |= BIT4;

Я ожидаю ШИМ-сигнал на выводе D6 (PE_9),водить светодиод. Но светодиод, похоже, ничего не делает.

1 Ответ

0 голосов
/ 08 ноября 2019

Я не проверял ваш код по крупицам, но в целом все нормально. Но я подозреваю возможную причину проблемы: обычно вы должны подождать несколько тактов, прежде чем получить доступ к любому периферийному устройству сразу после включения его часов. Я могу ошибаться, но возможно, что эти 2 строки кода игнорируются периферийными устройствами, поскольку они выполняются сразу после включения часов:

TIM1->CCMR1 |= BIT5 | BIT6;
GPIOE->MODER |= BIT19;

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

Я также предлагаю попробовать другие каналы ШИМ. Из-за конфигурации оборудования платы могут возникнуть некоторые конфликты с используемым вами контактом.

...