#include "stm32f10x.h"
void Timer2_Init(void);
void ADC1_Init(void);

/*----------------------------------------------------------------------------
  MAIN function
 *----------------------------------------------------------------------------*/
int main (void) {
  int data;
  ADC1_Init();                           // ADC1 konfigurálás belsö hőmerőhöz
  Timer2_Init();                         // TIM2 konfigurálás: 1 Hz trigger
  while (1) {                            // végtelen ciklus
    while(!(ADC1->SR & ADC_SR_EOC));     // Konverzió végére várunk
    data = ADC1->DR;
  }
}
/*-------------------------------------------------
  TIMER2 CH2 konfigurálása 1 Hz-es triggereléshez
  -------------------------------------------------*/
void Timer2_Init() {
  RCC->APB1ENR |= RCC_APB1ENR_TIM2EN;    // TIM2 órajel engedélyezése
  TIM2->CR1 = 0;
  TIM2->CR2 = 0;
  TIM2->PSC = 7200 - 1;                  // 10 kHz-re osztjuk le az órajelet
  TIM2->ARR = 10000 - 1;                 // 10000-ig számlálunk (1000 ms)
  TIM2->CNT = 0;                         // Számláló nullázása
  TIM2->CCMR1 = 0x00006800;              // Ch2 PWM1 mód, preload enable
  TIM2->CCER = 0x0010;                   // Ch2 engedélyezés
  TIM2->CCR2 = 50 - 1; 
  TIM2->CR1 |= TIM_CR1_CEN;              // Számlálás engedélyezés
}

/*---------------------------------------------------------------
  ADC1 konfigurálása belsö höméröhöz és TIM2CH2 triggereléshez
  ---------------------------------------------------------------*/
void ADC1_Init() {
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN;    // ADC1 órajel engedélyezés 
  RCC->CFGR &= ~RCC_CFGR_ADCPRE_0;       // ADC prescaler = 6
  RCC->CFGR |= ~RCC_CFGR_ADCPRE_1;       // ADCCLK = 72/6 = 12 MHz                     // 
  ADC1->CR1 = 0;
  ADC1->CR2 = ADC_CR2_EXTTRIG |          // External trigger engedélyezés
              ADC_CR2_EXTSEL_0 |         // EXTSEL=011, TIM2 CC2 event
              ADC_CR2_EXTSEL_1;  
  ADC1->SMPR1 = ADC_SMPR1_SMP16;         // Mintavétel 239.5 ciklus
  ADC1->SQR3 = 16;                       // Ch 16. a belsö hömérö 
  ADC1->SQR1 = 0;                        // A konverzió sorozat hossza=1
  ADC1->CR2 |= ADC_CR2_ADON |            // ADC1 engedélyezése
               ADC_CR2_TSVREFE;          // A hőmérő bekapcsolása 
}
