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();
}