ADC untuk STM32F103C8T6 di Keil Uvision

Untuk membaca data analog di mikrokontroler maka harus menggunakan fitur Analog Digital Converter atau yang biasa disebut ADC. Pada kesempatan kali ini, kita gunakan Mikrokontroler STM32F103C8T6 yang merupakan keluarga dari STM32 yang sudah banyak dijual di pasaran.
Ada 10 pin yang disediakan dengan menggunakan besar data 12bit, yaitu dari PIN A.0 sampai A.7 , B.0 dan B.1. bisa dilihat pada gambar berikut


untuk rangkaiannya bisa liat gambar berikut:

Perlu diinget, tegangan yang dipakai adalah 3.3v, karena pin ADC tidak toleran terhadap tegangan 5V. Sehingga, misal pake 5v maka bisa merusak PIN atau mikronya.


Berikut Source Code nya:

#include "stm32f10x.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_adc.h"

int dataAdc;

int main (void){
GPIO_InitTypeDef pGpio;
ADC_InitTypeDef padc;

pGpio.GPIO_Mode = GPIO_Mode_AIN;
pGpio.GPIO_Pin = GPIO_Pin_0;
GPIO_Init(GPIOA, &pGpio);

// clock adc
RCC_ADCCLKConfig(RCC_PCLK2_Div6);
RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

padc.ADC_Mode = ADC_Mode_Independent;
padc.ADC_ScanConvMode = DISABLE;
padc.ADC_ContinuousConvMode = ENABLE;
padc.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
padc.ADC_DataAlign = ADC_DataAlign_Right;
padc.ADC_NbrOfChannel = 1;

ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_28Cycles5);
ADC_Init(ADC1, &padc);

ADC_Cmd(ADC1, ENABLE);

ADC_ResetCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));
ADC_StartCalibration(ADC1);
while(ADC_GetCalibrationStatus(ADC1));

ADC_Cmd(ADC1,ENABLE);
ADC_SoftwareStartConvCmd(ADC1, ENABLE);

while(1){
dataAdc = ADC_GetConversionValue(ADC1);

}

}

Post a Comment

0 Comments