Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //INCLUDE & DEFINES
- #include "stm32f30x.h"
- #define MODE_OUT 1
- #define MODE_AFN 2
- #define MODE_ANL 3
- #define SPEED_2 2
- #define SPEED_10 1
- #define SPEED_50 3
- //************************************************
- // USER DEFINES
- //************************************************
- #define LED_GPIO GPIOE
- #define BLUE 8
- #define RED 9
- #define ORANGE 10
- #define GREEN 11
- #define BLUE2 12
- #define RED2 13
- #define ORANGE2 14
- #define GREEN2 15
- #define BTN_GPIO GPIOA
- #define BTN 0
- //************************************************
- //FUNCTIONS
- void CONFIG_F3(void);
- void GPIO_OUTPUT ( GPIO_TypeDef *GPIOx, uint32_t PIN, uint32_t SPEED);
- void GPIO_INPUT (GPIO_TypeDef *GPIOX, uint32_t PIN, uint32_t SPEED);
- void GPIO_SET(GPIO_TypeDef *GPIOX, uint32_t PIN);
- void GPIO_CLR(GPIO_TypeDef *GPIOX, uint32_t PIN);
- char IS_BTN_TGL(void);
- //CODE
- int myState = 0;
- void delay(void)
- {
- long x;
- for(x = 0; x<200000; x++)
- {
- x = x + 1;
- x = x - 1;
- }
- }
- void main(void)
- {
- CONFIG_F3();
- LED_GPIO->OTYPER = 0; // ALL PUSH PULL on LED_GPIO
- LED_GPIO->PUPDR = 0; // ALL NO PU.PD on LED_GPIO
- GPIO_OUTPUT ( LED_GPIO, RED, SPEED_50 );
- GPIO_OUTPUT ( LED_GPIO, RED2, SPEED_50 );
- GPIO_OUTPUT ( LED_GPIO, GREEN, SPEED_50 );
- GPIO_OUTPUT ( LED_GPIO, GREEN2, SPEED_50 );
- GPIO_OUTPUT ( LED_GPIO, ORANGE, SPEED_50 );
- GPIO_OUTPUT ( LED_GPIO, ORANGE2, SPEED_50 );
- GPIO_OUTPUT ( LED_GPIO, BLUE, SPEED_50 );
- GPIO_OUTPUT ( LED_GPIO, BLUE2, SPEED_50 );
- GPIO_INPUT ( BTN_GPIO, BTN, SPEED_50 );
- LED_GPIO->BSRR = (((1<<ORANGE)|(1<<ORANGE2)|(1<<BLUE)|(1<<BLUE2)|(1<<RED)|(1<<RED2)|(1<<GREEN)|(1<<GREEN2))<<16);
- while(1)
- {
- RESTARTA:
- if(myState == 0)
- {
- GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2))));
- GPIO_SET (LED_GPIO, ((1<<RED)|(1<<RED2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<RED)|(1<<RED2))));
- GPIO_SET (LED_GPIO, ((1<<ORANGE)|(1<<ORANGE2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
- GPIO_SET (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- GPIO_CLR (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
- GPIO_SET (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- }
- else
- {
- GPIO_CLR (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
- GPIO_SET (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|(1<<ORANGE)|(1<<ORANGE2)|(1<<RED)|(1<<RED2)));
- GPIO_SET (LED_GPIO, ((1<<GREEN)|(1<<GREEN2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<RED)|(1<<RED2))));
- GPIO_SET (LED_GPIO, ((1<<ORANGE)|(1<<ORANGE2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- GPIO_CLR (LED_GPIO, ((1<<BLUE)|(1<<BLUE2)|((1<<GREEN)|(1<<GREEN2)|(1<<ORANGE)|(1<<ORANGE2))));
- GPIO_SET (LED_GPIO, ((1<<RED)|(1<<RED2)));
- if(IS_BTN_TGL()) goto RESTARTA;
- delay();
- }
- }
- }
- char IS_BTN_TGL(void)
- {
- if(BTN_GPIO->IDR & 0x01)
- {
- if(myState)
- myState=0;
- else
- myState=1;
- delay();
- delay();
- return 1;
- }
- return 0;
- }
- void CONFIG_F3(void)
- {
- //16MHZ / 2 = 8MHZ
- //8MHZ * 9 = 72MHZ
- RCC->CFGR = 0x61F0002; //HSE, 9x PLL, HSE/2, HSE/PREDIV selected as PLL input clock, PLL CLOCK
- RCC->CR = 0x1010000; //PLL ENABLED, HSE ON
- while((RCC->CR & 0x2000000) == 0); //WAIT UNTIL PLL LOCKED
- //72MHZ from now on
- RCC->AHBENR = 0x317E0057; //Enable all AHB Peripheral Clocks
- }
- void GPIO_OUTPUT (GPIO_TypeDef *GPIOX, uint32_t PIN, uint32_t SPEED)
- {
- GPIOX->MODER &= ~(3<<(PIN*2));
- GPIOX->MODER |= (MODE_OUT<<(PIN*2));
- GPIOX->OSPEEDR &= ~(3<<(PIN*2));
- GPIOX->OSPEEDR |= (SPEED<<(PIN*2));
- }
- void GPIO_INPUT (GPIO_TypeDef *GPIOX, uint32_t PIN, uint32_t SPEED)
- {
- GPIOX->MODER &= ~(3<<(PIN*2));
- GPIOX->OSPEEDR &= ~(3<<(PIN*2));
- GPIOX->OSPEEDR |= (SPEED<<(PIN*2));
- }
- void GPIO_SET(GPIO_TypeDef *GPIOX, uint32_t PIN)
- {
- GPIOX->BSRR = PIN;
- }
- void GPIO_CLR(GPIO_TypeDef *GPIOX, uint32_t PIN)
- {
- GPIOX->BSRR = (PIN<<16);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement