본문 바로가기

WCH/CH32V035

CH32X035 SSM - ADC 테스트

 

 

 

CH32X035 는 12bit ADC가 11채널 (내부 1채널) 있다.
터치 키 정전 용량 감지 장치도 ADC로 처리 할수 있다고 한다.
참고: ADC의 채널 3, 채널 7, 채널 11 및 채널 15 기능은 제품에 사용할 수 없다. (로트번호의 끝에서 두 번째 5자리가 0이 되는 것)

 

일단 기본 예제로 테스트 해보자

 

CH32X035 ADC 초기화 함수

void ADC_Function_Init(void)
{
    ADC_InitTypeDef  ADC_InitStructure = {0};
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    ADC_DeInit(ADC1);
    ADC_CLKConfig(ADC1, ADC_CLK_Div6);

    ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;
    ADC_InitStructure.ADC_ScanConvMode = DISABLE;
    ADC_InitStructure.ADC_ContinuousConvMode = ENABLE;
    ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None;
    ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;
    ADC_InitStructure.ADC_NbrOfChannel = 1;
    ADC_Init(ADC1, &ADC_InitStructure);

    ADC_Cmd(ADC1, ENABLE);
}

 

 

ADC 변환 함수

u16 Get_ADC_Val(u8 ch)
{
    u16 val;

    ADC_RegularChannelConfig(ADC1, ch, 1, ADC_SampleTime_11Cycles);
    ADC_SoftwareStartConvCmd(ADC1, ENABLE);

    while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));
    val = ADC_GetConversionValue(ADC1);

    return val;
}

 

 

 

기본 예제는 잘 동작 한다. 나머지 예제들도 테스트 해 볼 필요가 있을것 같다.

int main(void)
{
    u16 i;
    SystemCoreClockUpdate();
    Delay_Init();
    USART_Printf_Init(115200);
    printf("SystemClk:%d\r\n", SystemCoreClock);
    printf( "ChipID:%08x\r\n", DBGMCU_GetCHIPID() );

    ADC_Function_Init();

    while(1)
    {
        printf("%d, ", Get_ADC_Val(ADC_Channel_8));
        printf("%d\r\n", Get_ADC_Val(ADC_Channel_9));
        Delay_Ms(100);

    }
}

 

반응형