Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Таймер stm32f103ve
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
GMVM
Здравствуйте! Пытаюсь настроить таймер чтобы мигать светодиодом 1 раз в секунду . Сейчас стоит макс делитель PSC=0xFFFF, диод включается, но горит тускло...т.е по сути мигает с большой частотой. Что делаю не так?

CODE

#include "stm32f10x.h"
#include "stm32f10x_usart.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_conf.h"
#include "stdio.h"
#include "delay.h"

void TIM2_IRQHandler(void);
char i=0;
int main( void)
{

RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;

TIM2->PSC = TIM_PSC_PSC;
TIM2->ARR = TIM_ARR_ARR;
TIM2->CR1 |= TIM_CR1_URS;
TIM2->CR1 |= TIM_CR1_CEN | TIM_CR1_ARPE;
TIM2->DIER |= TIM_DIER_UIE ;
GPIOB->CRL &= ~(GPIO_CRL_MODE5 | GPIO_CRL_CNF5);
GPIOB->CRL |= GPIO_CRL_MODE5_0;
NVIC_SetPriority(TIM2_IRQn,15);
NVIC_EnableIRQ(TIM2_IRQn);
while(1)
{}
}

//------------------------------------------------------------------------------
void TIM2_IRQHandler(void)
{

if(i)
{
GPIOB->BSRR = GPIO_BSRR_BS5;
i=0;

}
else
{
GPIOB->BSRR = GPIO_BSRR_BR5;
i=1;
}
}
//------------------------------------------------------------------------------


akimych
В прерывании надо сбрасывать соотв. флаг (который является причиной прерывания) в статусном регистре таймера, иначе при выходе из прерывания оно сразу вызовется опять.
GMVM
Заработало! Спасибо, а то я с AVR пересел там флаги автоматом сбрасывались, даже не знал о таком.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.