document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /**
  2.  * Main code of firmware
  3.  */
  4. #include "stm32f10x.h"
  5. #include "core_cm3.h"
  6. #include "main.h"
  7. void main();
  8. /* Main function */
  9. void main(void) {
  10.         /* setup i/o port c */
  11.         RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
  12.         LED_PORT->CRH &= ~(GPIO_CRH_CNF8 | GPIO_CRH_CNF9);
  13.         LED_PORT->CRH |= GPIO_CRH_CNF8_1 | GPIO_CRH_CNF9_1;
  14.         LED_PORT->CRH |= GPIO_CRH_MODE8_0 | GPIO_CRH_MODE9_0;
  15.         /* setup i/o port a */
  16.         RCC->APB2ENR |= RCC_APB2ENR_IOPAEN | RCC_APB2ENR_AFIOEN;
  17.         /* setup AFIO andEXTI */
  18.         AFIO->EXTICR[0] |= AFIO_EXTICR1_EXTI0_PA;
  19.         EXTI->IMR |= (1 << 0);
  20.         EXTI->FTSR |= (1 << 0);
  21.         /* remap TIM3 to pc6..9 pins port C */
  22.         AFIO->MAPR |= AFIO_MAPR_TIM3_REMAP_FULLREMAP;
  23.         /* setup TIM3 counter */
  24.         RCC->APB1ENR |= RCC_APB1ENR_TIM3EN;
  25.         TIM3->PSC = 8000 - 1;
  26.         TIM3->ARR = 1000;
  27.         /* setup TIM3 compare block */
  28.         /** setup CC3..4 as output */
  29.         TIM3->CCMR2 &= ~(TIM_CCMR2_CC3S | TIM_CCMR2_CC4S);
  30.         /** setup CC3..4 to togle if compare */
  31.         TIM3->CCMR2 |= TIM_CCMR2_OC3M_1 | TIM_CCMR2_OC3M_2 | TIM_CCMR2_OC4M_1 | TIM_CCMR2_OC4M_2;
  32.         /** setup value to compare registers 3..4 */
  33.         if (RCC->CSR & RCC_CSR_PINRSTF) {
  34.             TIM3->CCR3 = 1000;
  35.             RCC->CSR &= ~RCC_CSR_PINRSTF;
  36.         }
  37.         else
  38.             TIM3->CCR3 = 500;
  39.         if (RCC->CSR & RCC_CSR_SFTRSTF) {
  40.             TIM3->CCR4 = 1000;
  41.             TIM3->CCR3 = 500;
  42.             RCC->CSR &= ~RCC_CSR_SFTRSTF;
  43.         }
  44.         else
  45.             TIM3->CCR4 = 500;
  46.         RCC->CSR |= RCC_CSR_RMVF;
  47.         /** setup channels 3..4 to corresponding output pin */
  48.         TIM3->CCER |= TIM_CCER_CC3E | TIM_CCER_CC4E;
  49.         /* enable TIM3 */
  50.         TIM3->CR1 |= TIM_CR1_CEN;
  51.         /* enable EXTI0 interrupt */
  52.         NVIC_EnableIRQ(EXTI0_IRQn);
  53.         /* infinity loop */
  54.         while (1);
  55. }
');