Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

stm32 TIM3 interrupt

Raccolta di codici sorgenti

Moderatore: Foto UtentePaolino

0
voti

[1] stm32 TIM3 interrupt

Messaggioda Foto Utentealle96 » 20 apr 2015, 15:01

Ciao a tutti
oggi per la prima volta ho provato ad utilizzare il tim3 per generare un segnale che vada in overflow ogni 1s. Il problema è che benchè il timer parti senza problemi non finisco mai nell'interrupt.
Il codice è il seguente:
Codice: Seleziona tutto
#include <stm32f4xx.h>

void Clock_Set(void);
void Tim3_Init(void);
void GPIO_Init(void);
void TIM3_IRQHandler(void);

uint8_t gbl = 0;

int main(void)
{
   /*imposto il clock a 168MHz*/
   Clock_Set();
   /*inizializzo il tim3*/
   Tim3_Init();
   /*gpio*/
   GPIO_Init();

   TIM3 ->PSC = 10000;
   TIM3 ->ARR = 16800;

   TIM3 ->CR1 |= TIM_CR1_CEN;

    while(1)
    {
       if(gbl)
       {
          GPIOD ->BSRRL = 0x8000;
       }
       else
       {
          GPIOD ->BSRRH = 0x8000;
       }
    }

}

void TIM3_IRQHandler()
{
   TIM3 ->SR &= ~TIM_SR_UIF;
   gbl++;
   if(gbl == 2) gbl = 0;
}

void GPIO_Init()
{
   RCC ->AHB1RSTR |= RCC_AHB1RSTR_GPIODRST;
   RCC ->AHB1RSTR = 0x0000;
   RCC ->AHB1ENR |= RCC_AHB1ENR_GPIODEN;

   GPIOD ->MODER |= GPIO_MODER_MODER15_0;
   GPIOD ->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR15_1;
   GPIOD ->OTYPER = 0x0000;
   GPIOD ->PUPDR = 0x0000;
}

void Clock_Set()
{
   /*imposto 5WS per i 168MHz*/
   FLASH ->ACR |= FLASH_ACR_LATENCY_5WS;

   /*azzero il registro per il clock*/
   RCC ->CR &= 0x0000;
   /*HSE e PLL*/
   RCC ->CR |= RCC_CR_HSEON | RCC_CR_PLLON;
   /*reset CFGR*/
   RCC ->PLLCFGR &= 0x0000;
   /*imposto PLL_M 8, PLL_N 336, PLL_P 2*/
   RCC ->PLLCFGR |= RCC_PLLCFGR_PLLM_3 | 0x0150 | RCC_PLLCFGR_PLLSRC_HSE;
   /*seleziono PLL HSE*/
   RCC ->CFGR |= RCC_CFGR_SW_PLL;
}

void Tim3_Init()
{
   /*reset TIM3*/
   RCC ->APB1RSTR |= RCC_APB1RSTR_TIM3RST;
   RCC ->APB1RSTR = 0x0000;
   /*clock enabled*/
   RCC ->APB1ENR |= RCC_APB1ENR_TIM3EN;
   /*auto reload, overflow, upcounter, not enabled*/
   TIM3 ->CR1 |= TIM_CR1_ARPE | TIM_CR1_URS;
   /*prescaler*/
   TIM3 ->PSC = 0x0000;
   /*arr*/
   TIM3 ->ARR = 0xFFFF;
   /*interrupt*/
   NVIC_EnableIRQ(TIM3_IRQn);
   NVIC_SetPriority(TIM3_IRQn,0x0F);

}


Qualcuno può spiegarmi dove sbaglio? Grazie per la collaborazione :)
Avatar utente
Foto Utentealle96
15 4
 
Messaggi: 47
Iscritto il: 21 feb 2012, 16:21

0
voti

[2] Re: stm32 TIM3 interrupt

Messaggioda Foto Utentealle96 » 22 apr 2015, 17:56

nessun suggerimento? #-o
Avatar utente
Foto Utentealle96
15 4
 
Messaggi: 47
Iscritto il: 21 feb 2012, 16:21


Torna a Firmware e programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 4 ospiti