/**
* 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);
}
}
}