Advertisement
Guest User

Untitled

a guest
Feb 20th, 2016
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.41 KB | None | 0 0
  1. #include "stm32f4xx.h" /* tilz0R: HSE_VALUE je bil popravljen na 8000000 */
  2.  
  3. #include "STM32F4_Discovery.h"
  4. #include <stm32f4xx_tim.h>
  5. #include <stm32f4xx_rtc.h>
  6.  
  7.  
  8. #define LEDS_GPIO_CLK       RCC_AHB1Periph_GPIOD     //v knjižnici e nekaj shranjeno pod imeno RCC_AHB1... mi damo svoje ime LED...
  9. #define RED_LED             GPIO_Pin_14                 //imena so pobrana izknjižnic,tako so definirani pini
  10. #define BLUE_LED            GPIO_Pin_15
  11. #define ORANGE_LED          GPIO_Pin_13
  12. #define GREEN_LED           GPIO_Pin_12
  13. #define USER_BUTTON         GPIO_Pin_0                  //ime USER_BUTTON povežemo z pinom 0
  14. #define ALL_EXTERNAL_LEDS   (RED_LED | BLUE_LED | ORANGE_LED | GREEN_LED);  //vsa imena shranimo v eno skupno spremenljivko
  15. #define LEDS_GPIO_PORT      GPIOD
  16. #define USER_BUTTON_PORT    GPIOA               //definicija za gumb
  17. #define USER_BUTTON_CLK     RCC_AHB1Periph_GPIOA    //definicija da enablamo uro na portu A kjer je gumb
  18.  
  19. uint64_t TimerOverflow;
  20.  
  21. void Delayms(uint64_t ticks)  //simulacija delay funkcije
  22. {
  23.     /* tilz0R: spremenjen delay */
  24.     TimerOverflow = 0;
  25.     while(ticks > TimerOverflow);
  26. }
  27.  
  28.  
  29.  
  30. void TIM7_IRQHandler(void)
  31. {
  32.     if(TIM_GetITStatus(TIM7, TIM_IT_Update) != RESET)
  33.     {
  34.  
  35.         GPIO_ToggleBits(GPIOD, RED_LED);
  36.         TimerOverflow++;
  37.  
  38.         TIM_ClearITPendingBit(TIM7, TIM_IT_Update);
  39.     }
  40. }
  41.  
  42.  
  43. void EXTI0_IRQHandler(void) {
  44.     if (EXTI_GetITStatus(EXTI_Line0) != RESET) {
  45.         GPIO_ToggleBits(GPIOD, BLUE_LED);
  46.         EXTI_ClearITPendingBit(EXTI_Line0);
  47.     }
  48. }
  49.  
  50.  
  51.  
  52.  
  53. int main(void) {
  54.     RCC_AHB1PeriphClockCmd (LEDS_GPIO_CLK, ENABLE);                 //na portu D enablamo uro
  55.     RCC_AHB1PeriphClockCmd (USER_BUTTON_CLK, ENABLE);               //enablamo uro na portu kjer je gumb
  56.  
  57.     GPIO_InitTypeDef GPIO_InitStructure;                             //ocitno s tem komaj dolocimo, da lahko uporabljamo tiste funkcije
  58.  
  59.     GPIO_InitStructure.GPIO_Pin     =   ALL_EXTERNAL_LEDS;
  60.     GPIO_InitStructure.GPIO_Mode    =   GPIO_Mode_OUT;
  61.     GPIO_InitStructure.GPIO_OType   =   GPIO_OType_PP;
  62.     GPIO_InitStructure.GPIO_Speed   =   GPIO_Speed_2MHz;
  63.     GPIO_InitStructure.GPIO_PuPd    =   GPIO_PuPd_NOPULL;
  64.     GPIO_Init(LEDS_GPIO_PORT, &GPIO_InitStructure);
  65.  
  66.     GPIO_InitStructure.GPIO_Pin     =   USER_BUTTON;                    //inicializacija vhodne tipke
  67.     GPIO_InitStructure.GPIO_Mode    =   GPIO_Mode_IN;
  68.     GPIO_InitStructure.GPIO_PuPd    =   GPIO_PuPd_NOPULL;
  69.     GPIO_Init(USER_BUTTON_PORT, &GPIO_InitStructure);
  70.  
  71.  
  72.  
  73.     //----------------INICIALIZACIJA PREKINITVE-----------------------
  74.     SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);   //bi znali biti problemi z imeni porta
  75.  
  76.     EXTI_InitTypeDef EXTI_InitStructure;
  77.     EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  78.     EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  79.     EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  80.     EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  81.     EXTI_Init(&EXTI_InitStructure);  //ta vrstica spremeni vredost v registru
  82.  
  83.  
  84.  
  85.     NVIC_InitTypeDef NVIC_InitStructure;
  86.     NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;
  87.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x01;
  88.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x01;
  89.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  90.     NVIC_Init(&NVIC_InitStructure);
  91.  
  92.  
  93.  
  94.  
  95.     //------------------------INICIALIZACIJA CASOVNIKA--------------------
  96.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);
  97.  
  98.     TIM_TimeBaseInitTypeDef TIM_Time_Base_Structure;
  99.     RCC_ClocksTypeDef RCC_Clocks;
  100.  
  101.     /* tilz0R: Najprej je treba prebrati vrednosti, da bo RCC_Clocks postala veljavna! */
  102.     RCC_GetClocksFreq(&RCC_Clocks);
  103.  
  104. /* tilz0R starts */
  105. /*
  106.  * PCLK1 = 42MHz, tvoj timer dela z frekvenco 84MHz
  107.  *
  108.  * Ti bi rad imel 1ms interrupte, torej mora biti prescaler * perioda = 84k
  109.  *
  110.  * Lahko narediš: prescaler = 84
  111.  * Perioda = 1000
  112.  *
  113.  * */
  114.  
  115.  
  116.     /* tilz0R ends */
  117.  
  118.     TIM_Time_Base_Structure.TIM_Period = 1000 - 1;
  119.     TIM_Time_Base_Structure.TIM_Prescaler = 84 - 1;
  120.     TIM_Time_Base_Structure.TIM_ClockDivision = TIM_CKD_DIV1;
  121.     TIM_Time_Base_Structure.TIM_CounterMode = TIM_CounterMode_Up;
  122.     TIM_TimeBaseInit(TIM7, &TIM_Time_Base_Structure);
  123.  
  124.     TIM_Cmd(TIM7, ENABLE);
  125.  
  126.  
  127.     //--------------------------DOLOCITEV, DA TIM7 IZVAJA INTERRRUPT------------
  128.     NVIC_InitStructure.NVIC_IRQChannel = TIM7_IRQn;
  129.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  130.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  131.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  132.     NVIC_Init(&NVIC_InitStructure);
  133.  
  134.     TIM_ITConfig(TIM7, TIM_IT_Update, ENABLE);
  135.  
  136.     while(1) {
  137.         GPIO_ToggleBits(LEDS_GPIO_PORT, GREEN_LED);                 //togla izhod
  138.         Delayms(1000);
  139.  
  140.     }
  141. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement