본문 바로가기

[ST_MICRO]/STM8

STM8S - ADC 테스트

STM8S - ADC 테스트




STM8S 는 10bit SAR ADC가 내장되어 있고 fADC = 1 to 4 or 6 MHz 로 동작한다.


STM8S003F3 의 경우 VREF는 VDD이다. 저렴한 만큼 ADC의 성능은 기대할 수준은 아닌것 같다.

LPC812와 같이 ADC없는것 보다는 나은것 같다.



STM8S ADC 블록도

STM8S003F3에서 ADC관련 핀맵은 아래와 같고 UART를 제외 하면 실제 2채널을 할당 할 수 있다.

STM8-SS EVM에서는 ADC가 PD2/AIN3에 연결되어 있다. ADC테스트는 가변저항에 따라 변화되는 ADC값을 LCD에 표시하는 예제를 작성해 보았다.


PD2(HS)/AIN3

PD3 (HS)/AIN4/TIM2_CH2/ADC_ETR


PD5(HS)/AIN5/UART1_TX

PD6(HS)/AIN6/UART1_RX

PB4/[ADC_ETR] I2C_SCL




ADC결과는 10bit ADC이지만 Alignment Mode로 좀더 유연하게 제어할 수 있다.





STM8S ADC 초기화 함수

void AdcInit(unsigned int AD_Chan)

{

ADC1_DeInit();

ADC1_Init(ADC1_CONVERSIONMODE_CONTINUOUS, ADC1_CHANNEL_3, ADC1_PRESSEL_FCPU_D2, \

ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_CHANNEL3,\

DISABLE);

ADC1_Cmd(ENABLE);

}



STM8S ADC Read 함수

unsigned int AdcRead(unsigned char port)

ADC1->CSR &= (uint8_t)(~ADC1_CSR_CH);

ADC1->CSR |= port;

ADC1_StartConversion();

while(RESET == ADC1_GetFlagStatus(ADC1_FLAG_EOC));

ADC1_ClearFlag(ADC1_FLAG_EOC);

    return ADC1_GetConversionValue();

}



반응형