Facebook
From PussyHounter69, 6 Years ago, written in C.
Embed
Download Paste or View Raw
Hits: 263
  1. /**
  2.  ******************************************************************************
  3.  * @file    main.c
  4.  * @author  Ac6
  5.  * @version V1.0
  6.  * @date    01-December-2013
  7.  * @brief   Default main function.
  8.  ******************************************************************************
  9.  */
  10.  
  11.  
  12. #include "stm32f4xx.h"
  13. #include "stm32f4_discovery.h"
  14. #include <stm32f4xx_syscfg.h>
  15.  
  16.  
  17. void TIM4_IRQHandler(void)
  18.  
  19. {
  20.  
  21.              if(TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)
  22.              {
  23.  
  24.                 // miejsce na kod wywoływany w momencie wystąpienia przerwania
  25.                  GPIO_ToggleBits(GPIOD, GPIO_Pin_9);
  26.                  GPIO_ToggleBits(GPIOD,GPIO_Pin_8);
  27.  
  28.  
  29.  
  30.                     // wyzerowanie flagi wyzwolonego przerwania
  31.  
  32.                     TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  33.  
  34.                     TIM_Cmd(TIM4, DISABLE);
  35.              }
  36.  
  37. }
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44. void EXTI0_IRQHandler(void)
  45. {
  46.     if(EXTI_GetITStatus(EXTI_Line0) != RESET)
  47.     {
  48.  
  49.         TIM_Cmd(TIM4, ENABLE);
  50.  
  51.         EXTI_ClearITPendingBit(EXTI_Line0);
  52.  
  53.  
  54.     }
  55. }
  56.  
  57. int main(void)
  58. {
  59.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
  60.  
  61.  
  62.                 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  63.  
  64.                 TIM_TimeBaseStructure.TIM_Period = 1679;
  65.  
  66.                 TIM_TimeBaseStructure.TIM_Prescaler = 9999;
  67.  
  68.                 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  69.  
  70.                 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  71.  
  72.                 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
  73.  
  74.         NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
  75.  
  76.         NVIC_InitTypeDef NVIC_InitStructure1;
  77.  
  78.                 // numer przerwania
  79.  
  80.                 NVIC_InitStructure1.NVIC_IRQChannel = EXTI0_IRQn;
  81.  
  82.                 // priorytet główny
  83.  
  84.                 NVIC_InitStructure1.NVIC_IRQChannelPreemptionPriority = 0x00;
  85.  
  86.                 // subpriorytet
  87.  
  88.                 NVIC_InitStructure1.NVIC_IRQChannelSubPriority = 0x00;
  89.  
  90.                 // uruchom dany kanał
  91.  
  92.                 NVIC_InitStructure1.NVIC_IRQChannelCmd = ENABLE;
  93.  
  94.                 // zapisz wypełnioną strukturę do rejestrów
  95.  
  96.                 NVIC_Init(&NVIC_InitStructure1);
  97.  
  98.         NVIC_InitTypeDef NVIC_InitStructure;
  99.  
  100.         // numer przerwania
  101.  
  102.         NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;
  103.  
  104.         // priorytet główny
  105.  
  106.         NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;
  107.  
  108.         // subpriorytet
  109.  
  110.         NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x00;
  111.  
  112.         // uruchom dany kanał
  113.  
  114.         NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  115.  
  116.         // zapisz wypełnioną strukturę do rejestrów
  117.  
  118.         NVIC_Init(&NVIC_InitStructure);
  119.  
  120.  
  121.         // wyczyszczenie przerwania od timera 3 (wystąpiło przy konfiguracji timera)
  122.  
  123.         TIM_ClearITPendingBit(TIM4, TIM_IT_Update);
  124.  
  125.         // zezwolenie na przerwania od przepełnienia dla timera 3
  126.         TIM_ITConfig(TIM4, TIM_IT_Update, ENABLE);
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.  
  141.  
  142.         /* GPIOD Periph clock enable */
  143.             RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD, ENABLE);
  144.  
  145.             GPIO_InitTypeDef  GPIO_InitStructure;
  146.             /* Configure PD12, PD13, PD14 and PD15 in output pushpull mode */
  147.             GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15;
  148.             GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
  149.             GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  150.             GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  151.             GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
  152.             GPIO_Init(GPIOD, &GPIO_InitStructure);
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  160.  
  161.  
  162.  
  163.  
  164.  
  165.         EXTI_InitTypeDef EXTI_InitStructure;
  166.  
  167.         // wybór numeru aktualnie konfigurowanej linii przerwań
  168.  
  169.         EXTI_InitStructure.EXTI_Line = EXTI_Line0;
  170.  
  171.         // wybór trybu - przerwanie bądź zdarzenie
  172.  
  173.         EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
  174.  
  175.         // wybór zbocza, na które zareaguje przerwanie
  176.  
  177.         EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
  178.  
  179.  
  180.         // uruchom daną linię przerwań
  181.  
  182.         EXTI_InitStructure.EXTI_LineCmd = ENABLE;
  183.  
  184.         // zapisz strukturę konfiguracyjną przerwań zewnętrznych do rejestrów
  185.  
  186.         EXTI_Init(&EXTI_InitStructure);
  187.  
  188.  
  189.  
  190.  
  191.         // podłączenie danego pinu portu do kontrolera przerwań
  192.  
  193.         SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOD, EXTI_PinSource1);
  194.  
  195.         GPIO_ResetBits(GPIOD, GPIO_Pin_9|GPIO_Pin_10| GPIO_Pin_11| GPIO_Pin_12 | GPIO_Pin_13 | GPIO_Pin_14| GPIO_Pin_15);
  196.         GPIO_SetBits(GPIOD,GPIO_Pin_8);
  197.         for(;;)
  198.         {
  199.  
  200.         }
  201.  
  202. }