Чт июл 11, 2013 00:02:54
/*Инициализация GPIOA.
Вывод PA0 настраивается для работы с выходом TIM2_CH2*/
RCC->APB2ENR |= (RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN); // Тактирование порта GPIOA и альтернативных функций
GPIOA->CRL |= GPIO_CRL_MODE0; // Максимальная скорость порта = 50 MHz
GPIOA->CRL &= ~GPIO_CRL_CNF0; // Очистка бит CNF[1:0] для PA0 (поскольку после сброса мк задан режим "Input Floating")
GPIOA->CRL |= GPIO_CRL_CNF0_1; // PA0 - выход Push-Pull в режиме альтернативной функции
/*Инициализация таймера TIM2
Для формирования сигнала ШИМ используется канал 2 (TIM2_CH2)*/
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // Тактирование таймера TIM2
TIM2->CR1 |= TIM_CR1_ARPE; // Включен режим предварительной записи регистра автоперезагрузки
TIM2->CCMR1 |= TIM_CCMR1_OC1PE; // Включен режим предварительной загрузки регистра сравнения
TIM2->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1); // 110 - PWM mode 1
TIM2->ARR = 380;//Период выходного сигнала
TIM2->CCR2 = 100;//Длительность импульса
TIM2->CCER |= TIM_CCER_CC1E; // Выход канала захвата/сравнения включен
TIM2->CR1 |= TIM_CR1_CEN;//Старт счета таймера
Чт июл 11, 2013 05:26:44
Чт июл 11, 2013 06:50:19
Чт июл 11, 2013 11:01:26
PA0-WKUP I/O PA0 WKUP / USART2_CTS/ADC1_IN0 / TIM2_CH1_ETR
PA1 I/O PA1 USART2_RTS/ ADC1_IN1 / TIM2_CH2
Чт июл 11, 2013 11:15:21
HHIMERA писал(а):TIM2->BDTR |= TIM_BDTR_MOE;
TIM2->CCER |= TIM_CCER_CC1E; //Разрешаем таймеру использовать ноги PA0 для ШИМа
TIM2->CCMR1|=(TIM_CCMR1_OC1M_0| TIM_CCMR1_OC1M_1 | TIM_CCMR1_OC1M_2); // задаем инверсный ШИМ.
TIM2->CR1 |= TIM_CR1_CEN; //Запускаем таймер!
//После этого пишем данные в TIM2->CCRx - и яркость светодиодов меняется
uint32_t pwm_arr[]={0,0,6553,13107,19660,26214,32768,
39321,45875,52428,58982,65535};
uint8_t i;
while(1){
for (i=1;i<=11;i++) {
TIM2->CCR1=pwm_arr[i];
delay();
}
for (i=11;i>=1;i--) {
TIM2->CCR1=pwm_arr[i];
delay();
}
Чт июл 11, 2013 12:39:31
amv2000 писал(а):HHIMERA писал(а):TIM2->BDTR |= TIM_BDTR_MOE;
А этот регистр есть у таймера 2? Он же вроде есть только у TIM1, TIM8, TIM15, TIM16 и TIM17
Чт июл 11, 2013 15:48:25
// настроика порта PA0
GPIOA->CRL |= GPIO_CRL_MODE0; // максимальная скорость порта = 50 MHz
GPIOA->CRL &= ~GPIO_CRL_CNF0; // очистка бит CNF [1:0] для PA0. поскольку после сброса мк задан режим "Input Floating"
GPIOA->CRL |= GPIO_CRL_CNF0_1; // PA0 - выход Push-Pull в режиме альтернативной функции
// инициализация таимера TIM2. используется канал 1
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN; // тактирование таимера TIM2
TIM2->CCER |= TIM_CCER_CC1E; // использование порта PA0 для ШИМ
TIM2->CCMR1 |= (TIM_CCMR1_OC1M_2 | TIM_CCMR1_OC1M_1); // 110 - PWM mode 1
TIM2->ARR = 1000; // период выходного сигнала
TIM2->CCR1 = 100; // длительность
TIM2->CR1 |= TIM_CR1_CEN; // запуск таимера