Advertisement
AtomSoft

STM32F3 NO CMSIS

Mar 29th, 2013
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.64 KB | None | 0 0
  1. //INCLUDE & DEFINES
  2. #include "stm32f30x.h"
  3.  
  4. #define MODE_OUT 1
  5. #define MODE_AFN 2
  6. #define MODE_ANL 3
  7.  
  8. #define SPEED_2  2
  9. #define SPEED_10 1
  10. #define SPEED_50 3
  11.  
  12. //************************************************
  13. //                USER DEFINES
  14. //************************************************
  15. #define LED_GPIO GPIOE
  16.  
  17. #define BLUE 8
  18. #define RED 9
  19. #define ORANGE 10
  20. #define GREEN 11
  21.  
  22. #define BLUE2 12
  23. #define RED2 13
  24. #define ORANGE2 14
  25. #define GREEN2 15
  26.  
  27. #define BTN_GPIO GPIOA
  28. #define BTN 0
  29. //************************************************
  30.  
  31. //FUNCTIONS
  32. void CONFIG_F3(void);
  33. void GPIO_OUTPUT ( GPIO_TypeDef *GPIOx, uint32_t PIN, uint32_t SPEED);
  34. void GPIO_INPUT (GPIO_TypeDef *GPIOX, uint32_t PIN, uint32_t SPEED);
  35. void GPIO_SET(GPIO_TypeDef *GPIOX, uint32_t PIN);
  36. void GPIO_CLR(GPIO_TypeDef *GPIOX, uint32_t PIN);
  37. char IS_BTN_TGL(void);
  38. //CODE
  39. int myState = 0;
  40.  
  41. void delay(void)
  42. {
  43.     long x;
  44.     for(x = 0; x<200000; x++)
  45.     {
  46.       x = x + 1;
  47.       x = x - 1;
  48.     }
  49. }
  50. void main(void)
  51. {
  52.   CONFIG_F3();
  53.  
  54.   LED_GPIO->OTYPER = 0;            // ALL PUSH PULL on LED_GPIO
  55.   LED_GPIO->PUPDR = 0;             // ALL NO PU.PD on LED_GPIO
  56.  
  57.   GPIO_OUTPUT ( LED_GPIO, RED, SPEED_50 );
  58.   GPIO_OUTPUT ( LED_GPIO, RED2, SPEED_50 );
  59.   GPIO_OUTPUT ( LED_GPIO, GREEN, SPEED_50 );
  60.   GPIO_OUTPUT ( LED_GPIO, GREEN2, SPEED_50 );
  61.   GPIO_OUTPUT ( LED_GPIO, ORANGE, SPEED_50 );
  62.   GPIO_OUTPUT ( LED_GPIO, ORANGE2, SPEED_50 );
  63.   GPIO_OUTPUT ( LED_GPIO, BLUE, SPEED_50 );
  64.   GPIO_OUTPUT ( LED_GPIO, BLUE2, SPEED_50 );
  65.  
  66.   GPIO_INPUT ( BTN_GPIO, BTN, SPEED_50 );  
  67.  
  68.   LED_GPIO->BSRR = (((1<<ORANGE)|(1<<ORANGE2)|(1<<BLUE)|(1<<BLUE2)|(1<<RED)|(1<<RED2)|(1<<GREEN)|(1<<GREEN2))<<16);
  69.  
  70.   while(1)
  71.   {
  72.     RESTARTA:
  73.     if(myState == 0)
  74.     {
  75.         GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2))));
  76.         GPIO_SET (LED_GPIO, ((1<<RED)|(1<<RED2)));    
  77.         if(IS_BTN_TGL()) goto RESTARTA;
  78.         delay();
  79.    
  80.         GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<RED)|(1<<RED2))));
  81.         GPIO_SET (LED_GPIO, ((1<<ORANGE)|(1<<ORANGE2)));
  82.         if(IS_BTN_TGL()) goto RESTARTA;
  83.         delay();
  84.    
  85.         GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
  86.         GPIO_SET (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)));
  87.         if(IS_BTN_TGL()) goto RESTARTA;
  88.         delay();
  89.  
  90.         GPIO_CLR (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
  91.         GPIO_SET (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)));  
  92.         if(IS_BTN_TGL()) goto RESTARTA;
  93.         delay();
  94.     }
  95.     else
  96.     {
  97.  
  98.         GPIO_CLR (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
  99.         GPIO_SET (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)));  
  100.         if(IS_BTN_TGL()) goto RESTARTA;
  101.         delay();
  102.    
  103.         GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
  104.         GPIO_SET (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)));
  105.         if(IS_BTN_TGL()) goto RESTARTA;
  106.         delay();
  107.  
  108.         GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<RED)|(1<<RED2))));
  109.         GPIO_SET (LED_GPIO, ((1<<ORANGE)|(1<<ORANGE2)));
  110.         if(IS_BTN_TGL()) goto RESTARTA;
  111.         delay();
  112.  
  113.         GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2))));
  114.         GPIO_SET (LED_GPIO, ((1<<RED)|(1<<RED2)));    
  115.         if(IS_BTN_TGL()) goto RESTARTA;
  116.         delay();
  117.     }
  118.  
  119.  
  120.   }
  121. }
  122. char IS_BTN_TGL(void)
  123. {
  124.     if(BTN_GPIO->IDR & 0x01)
  125.     {
  126.         if(myState)
  127.           myState=0;
  128.         else
  129.           myState=1;
  130.  
  131.         delay();
  132.         delay();
  133.         return 1;
  134.     }
  135.     return 0;
  136. }
  137. void CONFIG_F3(void)
  138. {
  139.   //16MHZ / 2 = 8MHZ
  140.   //8MHZ * 9 = 72MHZ
  141.  
  142.   RCC->CFGR = 0x61F0002; //HSE, 9x PLL, HSE/2, HSE/PREDIV selected as PLL input clock, PLL CLOCK
  143.   RCC->CR = 0x1010000;   //PLL ENABLED, HSE ON
  144.  
  145.   while((RCC->CR & 0x2000000) == 0);  //WAIT UNTIL PLL LOCKED
  146.   //72MHZ from now on
  147.   RCC->AHBENR = 0x317E0057; //Enable all AHB Peripheral Clocks
  148. }
  149. void GPIO_OUTPUT (GPIO_TypeDef *GPIOX, uint32_t PIN, uint32_t SPEED)
  150. {
  151.   GPIOX->MODER &= ~(3<<(PIN*2));
  152.   GPIOX->MODER |=  (MODE_OUT<<(PIN*2));
  153.  
  154.   GPIOX->OSPEEDR &= ~(3<<(PIN*2));
  155.   GPIOX->OSPEEDR |= (SPEED<<(PIN*2));
  156.  
  157. }
  158. void GPIO_INPUT (GPIO_TypeDef *GPIOX, uint32_t PIN, uint32_t SPEED)
  159. {
  160.   GPIOX->MODER &= ~(3<<(PIN*2));
  161.  
  162.   GPIOX->OSPEEDR &= ~(3<<(PIN*2));
  163.   GPIOX->OSPEEDR |= (SPEED<<(PIN*2));
  164. }
  165. void GPIO_SET(GPIO_TypeDef *GPIOX, uint32_t PIN)
  166. {
  167.   GPIOX->BSRR = PIN;
  168. }
  169. void GPIO_CLR(GPIO_TypeDef *GPIOX, uint32_t PIN)
  170. {
  171.   GPIOX->BSRR = (PIN<<16);
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement