Начал изучать таймеры. С базовыми таймерами я разорался.
Решил изучить таймеры общего назначения. И решил начать с ШИМ.
Проект простой- плавное гашение/зажигание светодиодов.
Но есть проблемка, из 4 led один не загорается, хотя в других проекта работает норм.
Можете глянуть мой проект и сказать, где косяк.
P.S. За задержки в виде циклов не пинайте)))
Код: Выделить всё
#include "stm32f4xx.h" // Device header
void delay(void) {
volatile uint32_t i;
for (i=1; i != 0xF000; i++);
}
int main(){
RCC->APB1ENR |= RCC_APB1ENR_TIM4EN;
RCC->AHB1ENR |= RCC_AHB1ENR_GPIODEN;
GPIOD->MODER = GPIO_MODER_MODER12_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER15_1;
GPIOD->AFR[1] = 0x22220000;
TIM4->CCER |= (TIM_CCER_CC1E | TIM_CCER_CC2E | TIM_CCER_CC3E | TIM_CCER_CC4E);
TIM4->CCMR1|=(TIM_CCMR1_OC2M_0| TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2);
TIM4->CCMR2|=(TIM_CCMR2_OC3M_0 | TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_0 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2);
TIM4->CR1 |= TIM_CR1_CEN;
while(1)
{
volatile int i = 0;
volatile int j = 0;
for(i = 0; i <= 65353 ; i++){
TIM4->CCR1 = i;
TIM4->CCR2 = i;
TIM4->CCR3 = i;
TIM4->CCR4 = i;
for(j = 0 ; j < 1000; j++) __NOP();
}
for(i = 65535; i >= 0 ; i--){
TIM4->CCR1 = i;
TIM4->CCR2 = i;
TIM4->CCR3 = i;
TIM4->CCR4 = i;
for(j = 0 ; j < 1000; j++) __NOP();
}
}
}