/** * Main code of firmware */ #include "stm32f10x.h" #include "core_cm3.h" /* General defines */ #define LED_PORT GPIOC #define IO_PORT GPIOA #define BUTTON (1 << 0) #define LED_BLUE (1 << 8) #define LED_GREEN (1 << 9) /* user status flag */ volatile unsigned char status_flag; void main(); /* Simple delay function */ void delay_ms(unsigned int delay) { volatile unsigned int delay_tick = delay * 2000; while (delay_tick--); } /* chage user flag */ void change_flag(void) { status_flag ^= 1; delay_ms(100); } /* Main function */ void main(void) { //status_flag = 0; /* setup i/o port c */ RCC->APB2ENR |= RCC_APB2ENR_IOPCEN; LED_PORT->CRH |= GPIO_CRH_MODE8_0 | GPIO_CRH_MODE9_0; LED_PORT->CRH &= ~(GPIO_CRH_CNF8 | GPIO_CRH_CNF9); /* setup i/o port a */ RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN; /* setup AFIO andEXTI */ AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PA; EXTI->IMR |= (1 << 0); EXTI->FTSR |= (1 << 0); /* enable EXTI0 interrupt */ NVIC_EnableIRQ(EXTI0_IRQn); /* enable leds */ LED_PORT->ODR = LED_BLUE;// | LED_GREEN; /* infinity loop */ //while (1); while (1) { if (status_flag & 1) { /* disable leds */ LED_PORT->ODR &= ~LED_BLUE; LED_PORT->ODR |= LED_GREEN; /* delay ~500ms */ delay_ms(500); /* enable leds */ LED_PORT->ODR |= LED_BLUE; LED_PORT->ODR &= ~LED_GREEN; /* delay ~500ms */ delay_ms(500); } else { /* disable leds */ LED_PORT->ODR &= ~(LED_BLUE | LED_GREEN); /* delay ~500ms */ delay_ms(500); /* enable leds */ LED_PORT->ODR |= LED_BLUE | LED_GREEN; /* delay ~500ms */ delay_ms(500); } } }