document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /**
  2.  * Main code of firmware
  3.  */
  4. #include "stm32f10x.h"
  5. /* General defines */
  6. #define LED_PORT GPIOC
  7. #define IO_PORT GPIOA
  8. #define BUTTON (1 << 0)
  9. #define LED_BLUE (1 << 8)
  10. #define LED_GREEN (1 << 9)
  11. void main();
  12. /* provided by linker script */
  13. extern unsigned long _estack;
  14. /* Reset handler */
  15. void Reset_Handler(void) {
  16.     main();
  17. }
  18. /* Table of Cortex vectors */
  19. void *vector_table[] __attribute__ ((section(".vectors"))) = {
  20.     &_estack,
  21.     Reset_Handler,
  22. };
  23. /* Simple delay function */
  24. void delay_ms(unsigned int delay) {
  25.     volatile unsigned int delay_tick = delay * 2000;
  26.     while (delay_tick--);
  27. }
  28. /* Main function */
  29. void main(void) {
  30.     /* setup i/o port c */
  31.     RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
  32.     LED_PORT->CRH |= GPIO_CRH_MODE8_0 | GPIO_CRH_MODE9_0;
  33.     LED_PORT->CRH &= ~(GPIO_CRH_CNF8 | GPIO_CRH_CNF9);
  34.         /* setup i/o port a */
  35.         RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
  36.         IO_PORT->CRL &= ~(GPIO_CRL_CNF0);
  37.         IO_PORT->CRL |= GPIO_CRL_CNF0_1;
  38.         /* pull-down to pin 0 port a */
  39.         IO_PORT->ODR &= BUTTON;
  40.     /* enable leds */
  41.     LED_PORT->ODR = LED_BLUE | LED_GREEN;
  42.     /* infinity loop */
  43.     while (1) {
  44.             if (IO_PORT->IDR & BUTTON) {
  45.                 /* disable leds */
  46.                 LED_PORT->ODR &= ~LED_BLUE;
  47.                 LED_PORT->ODR |= LED_GREEN;
  48.                 /* delay ~500ms */
  49.                 delay_ms(500);
  50.                 /* enable leds */
  51.                 LED_PORT->ODR |= LED_BLUE;
  52.                 LED_PORT->ODR &= ~LED_GREEN;
  53.                 /* delay ~500ms */
  54.                 delay_ms(500);
  55.             }
  56.             else {
  57.                 /* disable leds */
  58.                 LED_PORT->ODR &= ~(LED_BLUE | LED_GREEN);
  59.                 /* delay ~500ms */
  60.                 delay_ms(500);
  61.                 /* enable leds */
  62.                 LED_PORT->ODR |= LED_BLUE | LED_GREEN;
  63.                 /* delay ~500ms */
  64.                 delay_ms(500);
  65.             }
  66.         }
  67. }
');