После остановки шим, на выходе 1

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
supercelt
Открыл глаза
Сообщения: 68
Зарегистрирован: Вс авг 02, 2015 18:02:38

После остановки шим, на выходе 1

Сообщение supercelt »

Всем привет!
stm32f10x
Есть два таймера. По некоему событию, запускаются оба таймера. Первый таймер(Т14) тикает до 5 секунд и уходит в прерывание по переполнению. Второй таймер(Т15) генерит шим для светодиода. То есть пока тикает первый таймер, второй моргает светодиодом. В обработчике прерывания первого таймера я останавливаю и первый и второй таймер. Проблема состоит в том, что иногда, не всегда, после остановки шим, светодиод остаётся гореть постоянно.

Код: Выделить всё

void TIM14_IRQHandler(void){ //ring off
		if(TIM14->SR & TIM_SR_UIF){
				TIM14->SR &= ~TIM_SR_UIF;
		}
		TIM14->CR1 &= ~TIM_CR1_CEN;
		TIM15->CR1 &= ~TIM_CR1_CEN;
		stop_ring = 1;
		ring = 0;
}

//========Control ring(TIMER14)===========
		RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
		RCC->APB1ENR |= RCC_APB1ENR_TIM14EN;
		TIM14->PSC |= 23999;                     //Prescaler 24000 - 1/ Clock timer 1 kHz
		TIM14->ARR = 5000;                      //Count up to 5000/	5 sec/interrupt
		TIM14->EGR |= TIM_EGR_UG;      //Вызываем Update Event что бы таймер не уходил в прерывание сразу после старта
		__nop();
		__nop();
		TIM14->SR &= ~(TIM_SR_UIF);   
		TIM14->DIER |= TIM_DIER_UIE;
		NVIC_EnableIRQ(TIM14_IRQn);	             
//======================
//=========Lamp blink ring(TIMER15)=======
		RCC->APB2ENR |= RCC_APB2ENR_TIM15EN | RCC_APB2ENR_IOPBEN | RCC_APB2ENR_AFIOEN;
		AFIO->MAPR2 |= AFIO_MAPR2_TIM15_REMAP;
		GPIOB->CRH &= ~GPIO_CRH_CNF15_0;
		GPIOB->CRH |= GPIO_CRH_MODE15_0 | GPIO_CRH_CNF15_1; //15 pin port B - altoutPP 10 mHz
		TIM15->PSC = 24000;
		TIM15->ARR = 300;
		TIM15->CCER |= TIM_CCER_CC2E; // Настраиваем таймер на использование 2 канала (т.е. контакта PB15 remap)
		TIM15->CCMR1 |= TIM_CCMR1_OC2M_1 | TIM_CCMR1_OC2M_2;
		TIM15->BDTR |= TIM_BDTR_AOE;
		TIM15->CCR2 = 100;
//======================
Реклама
uk8amk
Поставщик валерьянки для Кота
Сообщения: 2222
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Откуда: Tashkent

Re: После остановки шим, на выходе 1

Сообщение uk8amk »

Дело в том, что разряд CEN всего лишь управляет подачей частоты синхронизации на счётчик CNT. Но он не влияет на состояние других регистров.
Для решения проблемы я могу посоветовать отключать альтернативную функцию выхода, либо генерировать Break.
Реклама
Ответить

Вернуться в «ARM»