tagartgames

Aksp_Lab.2

May 16th, 2019
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 10.20 KB | None | 0 0
  1. /*#include "stm32f10x.h"
  2.  
  3. int main(void) {
  4.     int i; //zmienna do licznika
  5.    
  6.     RCC->APB2ENR = 0x00000008; //wlaczenie sygnalu zegarowego taktujacego dany uklad peryferyjny //APB2-magistrala do ktorej podlaczone sa LED
  7.     GPIOB->CRH   = 0x33333333; //konfiguracja portów IO
  8.    
  9.     //0x00000100 led1 //0x00000200 led2 //0x00000400 led3 //0x00000800 led4
  10.     //0x00001000 led5 //0x00002000 led6 //0x00004000 led7 //0x00008000 led8
  11.  
  12.     while(1) {
  13.         //0x00008000 led8
  14.         GPIOB->ODR = 0x00008000; //zapalanie diody
  15.         for(i = 1000000; i > 0; i--); //licznik
  16.         GPIOB->ODR = 0x00000000; //gaszenie diody
  17.         for(i = 1000000; i > 0; i--); //licznik
  18.     }
  19. }*/
  20.  
  21. /*#include "stm32f10x.h"
  22. #include "stm32f10x_rcc.h"
  23. #include "stm32f10x_gpio.h"
  24.  
  25. void SysTick_Handler(void) {
  26.         GPIO_WriteBit(GPIOB, GPIO_Pin_15, (BitAction) (1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_15))); //zapalanie i zmiana na przeciwny diody 8
  27.     }
  28.  
  29. int main(void) {
  30.    
  31.     //port B - diody LED
  32.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//wlacz taktowanie portu GPIO B
  33.     GPIO_InitTypeDef  tmp;
  34.     tmp.GPIO_Mode=GPIO_Mode_Out_PP;
  35.     tmp.GPIO_Speed=GPIO_Speed_2MHz;
  36.     tmp.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;//tmp.GPIO_Pin=GPIO_Pin_All;
  37.     GPIO_Init(GPIOB, &tmp);
  38.    
  39.     SysTick_Config(600000); //8 000 000 przerwanie co 1 s    6,5Hz = 0,15s      i mnozymy x2 na caly przebieg 6,5Hz
  40.    
  41.     while(1) {
  42.        
  43.     }  
  44. }*/
  45.  
  46. /*#include "stm32f10x.h"
  47.  
  48. int a,b;
  49.  
  50. int main(void) {
  51.     //port B - diody LED
  52.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//wlacz taktowanie portu GPIO B
  53.     GPIO_InitTypeDef  tmp;
  54.     tmp.GPIO_Mode=GPIO_Mode_Out_PP;
  55.     tmp.GPIO_Speed=GPIO_Speed_2MHz;
  56.     tmp.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;//tmp.GPIO_Pin=GPIO_Pin_All;
  57.     GPIO_Init(GPIOB, &tmp);
  58.  
  59.   SysTick_Config(8000000/1000);
  60.  
  61.   while(1) {
  62.         if(a==0) {
  63.             a=1000;
  64.             GPIO_WriteBit(GPIOB, GPIO_Pin_15, (BitAction) (1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_15)));
  65.         }
  66.         if(b==0) {
  67.             b=1000;
  68.            
  69.         }
  70.     }
  71. }
  72. void SysTick_Handler(void) {
  73.     if(a) --a;
  74. }
  75.     */
  76.    
  77. /*#include "stm32f10x.h"
  78. #include "stm32f10x_rcc.h"
  79. #include "stm32f10x_gpio.h"
  80.  
  81. int moja6_5, co100ms;
  82.  
  83. int main(void) {
  84.    
  85.     //port B - diody LED
  86.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//wlacz taktowanie portu GPIO B
  87.     GPIO_InitTypeDef  tmp;
  88.     tmp.GPIO_Mode=GPIO_Mode_Out_PP;
  89.     tmp.GPIO_Speed=GPIO_Speed_2MHz;
  90.     tmp.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;
  91.     GPIO_Init(GPIOB, &tmp);
  92.    
  93.     SysTick_Config(8000000/1000);
  94.    
  95.     while(1) {
  96.            
  97.        if(moja6_5 == 0) {
  98.                     moja6_5 = 77;
  99.                  GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction) (1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_9))); //zapalanie i zmiana na przeciwny diody 8
  100.              }
  101.              
  102.              if(co100ms == 0) {
  103.                 co100ms = 100;
  104.                  
  105.                 static int a;
  106.                 a = (a+1) % 11;
  107.                 if(a == 0) GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_SET);
  108.                 else    GPIO_WriteBit(GPIOB, GPIO_Pin_8, Bit_RESET);
  109.              }
  110.     }  
  111. }
  112. void SysTick_Handler(void) {
  113.    
  114.     if(co100ms) --co100ms; 
  115.    
  116.     if(moja6_5) --moja6_5;
  117. }*/
  118.  
  119. /*#include "stm32f10x.h"
  120.  
  121. void NVIC_Config(void);
  122.  
  123. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  124. TIM_OCInitTypeDef  TIM_OCInitStructure;
  125.  
  126. uint16_t capture = 0;
  127. __IO uint16_t CC1 = 32768;
  128. __IO uint16_t CC2 = 16384;
  129. __IO uint16_t CC3 = 8192;
  130. __IO uint16_t CC4 = 4096;
  131.  
  132. int main(void) {
  133.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//wlacz taktowanie TIM1
  134.     //port B - diody LED
  135.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//wlacz taktowanie portu GPIO B
  136.     GPIO_InitTypeDef  tmp;
  137.     tmp.GPIO_Mode=GPIO_Mode_Out_PP;
  138.     tmp.GPIO_Speed=GPIO_Speed_50MHz;
  139.     tmp.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;//tmp.GPIO_Pin=GPIO_Pin_All;
  140.     GPIO_Init(GPIOB, &tmp);
  141.    
  142.     NVIC_Config();
  143.    
  144.     // Ustawienia ukladu podstawy czasu
  145.     TIM_TimeBaseStructure.TIM_Period = 65535;
  146.   TIM_TimeBaseStructure.TIM_Prescaler = 140;  //fclk = 72MHz/1440 = 50kHz
  147.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  148.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  149.  
  150.   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  151.  
  152.   // Konfiguracja kanalu 1
  153.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  154.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  155.   TIM_OCInitStructure.TIM_Pulse = CC1;
  156.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  157.   TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  158.  
  159.   TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Disable);
  160.  
  161.  
  162.  
  163.   // Wlaczenie przerwan od kanalow
  164.   TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
  165.  
  166.   // Wlaczenie timera
  167.   TIM_Cmd(TIM1, ENABLE);
  168.     while (1) ;
  169. }
  170.  
  171. void TIM1_CC_IRQHandler(void) {
  172.     //sprawdzanie statusow przerwan od poszczegolnych kanalow
  173.     if(TIM_GetITStatus(TIM1, TIM_IT_CC1) !=RESET) {
  174.         //wyczysc bit przerwania
  175.         TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);
  176.         //czestotliwosc LED1: 1,53Hz; zmiana stanu na przeciwny
  177.         GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)));
  178.         //ponowne ustawienie rejestru przepelnienia
  179.         TIM_SetCompare1(TIM1, TIM_GetCapture1(TIM1) + CC1);
  180.     }
  181. }
  182.  
  183. void NVIC_Config(void) {
  184.  
  185.   NVIC_InitTypeDef NVIC_InitStructure;
  186.  
  187. //Konfigurowanie kontrolera przerwan NVIC
  188. #ifdef  VECT_TAB_RAM  
  189.   // Jezeli tablica wektorow w RAM, to ustaw jej adres na 0x20000000
  190.   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  191. #else  // VECT_TAB_FLASH
  192.   // W przeciwnym wypadku ustaw na 0x08000000
  193.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
  194. #endif
  195.  
  196.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  197.  
  198.   // Wlacz przerwanie od TIM1
  199.   NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
  200.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  201.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  202.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  203.   NVIC_Init(&NVIC_InitStructure);
  204. }
  205. */
  206.  
  207. /*#include "stm32f10x.h"
  208.  
  209. void NVIC_Config(void);
  210.  
  211. TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  212. TIM_OCInitTypeDef  TIM_OCInitStructure;
  213.  
  214. uint16_t capture = 0;
  215. __IO uint16_t CC1 = 32768;
  216. __IO uint16_t CC2 = 16384;
  217. __IO uint16_t CC3 = 8192;
  218. __IO uint16_t CC4 = 4096;
  219.  
  220. int main(void) {
  221.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//wlacz taktowanie TIM1
  222.     //port B - diody LED
  223.     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);//wlacz taktowanie portu GPIO B
  224.     GPIO_InitTypeDef  tmp;
  225.     tmp.GPIO_Mode=GPIO_Mode_Out_PP;
  226.     tmp.GPIO_Speed=GPIO_Speed_50MHz;
  227.     tmp.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;//tmp.GPIO_Pin=GPIO_Pin_All;
  228.     GPIO_Init(GPIOB, &tmp);
  229.    
  230.     NVIC_Config();
  231.    
  232.     // Ustawienia ukladu podstawy czasu
  233.     TIM_TimeBaseStructure.TIM_Period = 65535;
  234.   TIM_TimeBaseStructure.TIM_Prescaler = 140;  //fclk = 72MHz/1440 = 50kHz
  235.   TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  236.   TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  237.  
  238.   TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  239.  
  240.   // Konfiguracja kanalu 1
  241.   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
  242.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  243.   TIM_OCInitStructure.TIM_Pulse = CC1;
  244.   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
  245.   TIM_OC1Init(TIM1, &TIM_OCInitStructure);
  246.  
  247.   TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Disable);
  248.  
  249.   // Konfiguracja kanalu 2
  250.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  251.   TIM_OCInitStructure.TIM_Pulse = CC2;
  252.   TIM_OC2Init(TIM1, &TIM_OCInitStructure);
  253.  
  254.   TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Disable);
  255.  
  256.   // Konfiguracja kanalu 3
  257.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  258.   TIM_OCInitStructure.TIM_Pulse = CC3;
  259.   TIM_OC3Init(TIM1, &TIM_OCInitStructure);
  260.  
  261.   TIM_OC3PreloadConfig(TIM1, TIM_OCPreload_Disable);
  262.  
  263.   // Konfiguracja kanalu 4
  264.   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  265.   TIM_OCInitStructure.TIM_Pulse = CC4;
  266.   TIM_OC4Init(TIM1, &TIM_OCInitStructure);
  267.  
  268.   TIM_OC4PreloadConfig(TIM1, TIM_OCPreload_Disable);
  269.  
  270.   // Wlaczenie przerwan od kanalow
  271.   TIM_ITConfig(TIM1, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);
  272.  
  273.   // Wlaczenie timera
  274.   TIM_Cmd(TIM1, ENABLE);
  275.     while (1) ;
  276. }
  277.  
  278. void TIM1_CC_IRQHandler(void) {
  279.     //sprawdzanie statusow przerwan od poszczegolnych kanalow
  280.     if(TIM_GetITStatus(TIM1, TIM_IT_CC1) !=RESET) {
  281.         //wyczysc bit przerwania
  282.         TIM_ClearITPendingBit(TIM1, TIM_IT_CC1);
  283.         //czestotliwosc LED1: 1,53Hz; zmiana stanu na przeciwny
  284.         GPIO_WriteBit(GPIOB, GPIO_Pin_8, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_8)));
  285.         //ponowne ustawienie rejestru przepelnienia
  286.         TIM_SetCompare1(TIM1, TIM_GetCapture1(TIM1) + CC1);
  287.     }
  288.     else if(TIM_GetITStatus(TIM1, TIM_IT_CC2) !=RESET) {
  289.         TIM_ClearITPendingBit(TIM1, TIM_IT_CC2);
  290.         GPIO_WriteBit(GPIOB, GPIO_Pin_9, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_9)));
  291.         TIM_SetCompare2(TIM1, TIM_GetCapture2(TIM2) + CC2);
  292.     }
  293.     else if(TIM_GetITStatus(TIM1, TIM_IT_CC3) !=RESET) {
  294.         TIM_ClearITPendingBit(TIM1, TIM_IT_CC3);
  295.         GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_10)));
  296.         TIM_SetCompare3(TIM1, TIM_GetCapture3(TIM2) + CC3);
  297.     }
  298.     else if(TIM_GetITStatus(TIM1, TIM_IT_CC4) !=RESET) {
  299.         TIM_ClearITPendingBit(TIM1, TIM_IT_CC4);
  300.         GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)(1-GPIO_ReadOutputDataBit(GPIOB, GPIO_Pin_11)));
  301.         TIM_SetCompare4(TIM1, TIM_GetCapture4(TIM2) + CC4);
  302.     }
  303. }
  304.  
  305. void NVIC_Config(void) {
  306.  
  307.   NVIC_InitTypeDef NVIC_InitStructure;
  308.  
  309. //Konfigurowanie kontrolera przerwan NVIC
  310. #ifdef  VECT_TAB_RAM  
  311.   // Jezeli tablica wektorow w RAM, to ustaw jej adres na 0x20000000
  312.   NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
  313. #else  // VECT_TAB_FLASH
  314.   // W przeciwnym wypadku ustaw na 0x08000000
  315.   NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);  
  316. #endif
  317.  
  318.   NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
  319.  
  320.   // Wlacz przerwanie od TIM1
  321.   NVIC_InitStructure.NVIC_IRQChannel = TIM1_CC_IRQn;
  322.   NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  323.   NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  324.   NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  325.   NVIC_Init(&NVIC_InitStructure);
  326. }//dziala */
Add Comment
Please, Sign In to add comment