還是Ch32V307觸摸的問題太難了


????不知道是那里出的問題,我是先獲取的電池的AD值 再 打開觸摸和 Buffer 然后觸摸代碼處理完后再關(guān)閉,就是電池 的ADC會獲取不到東西。

????????而且有時候MounRiver Studio這個軟件debug還會很奇怪。比如打斷點(diǎn)在337行 他會跑到另一個函數(shù)去,或者在一個斷點(diǎn)函數(shù)里面一直進(jìn)去 ,跳不到另一個打了斷點(diǎn)的函數(shù)。




先放配置代碼


void Touch_Key_Init(void)

{

? ? GPIO_InitTypeDef GPIO_InitStructure = {0};

//? ? ADC_InitTypeDef? ADC_InitStructure = {0};


? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

//? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);

//? ? RCC_ADCCLKConfig(RCC_PCLK2_Div8);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//通道2

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//通道1

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_Init(GPIOA, &GPIO_InitStructure);

}


void ADC_Function_Init(void)

{

? ? ADC_InitTypeDef ADC_InitStructure={0};

? ? GPIO_InitTypeDef GPIO_InitStructure={0};

//

//

? ? RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE );

? ? RCC_ADCCLKConfig(RCC_PCLK2_Div8);


? ? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;

? ? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

? ? GPIO_Init(GPIOC, &GPIO_InitStructure);

? ? Touch_Key_Init();


? ? ADC_DeInit(ADC1);

? ? ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;

? ? ADC_InitStructure.ADC_ScanConvMode = DISABLE;

? ? ADC_InitStructure.ADC_ContinuousConvMode = DISABLE;

? ? ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right;

? ? ADC_InitStructure.ADC_NbrOfChannel = 3;

? ? ADC_Init(ADC1, &ADC_InitStructure);


? ? ADC_Cmd(ADC1, ENABLE);


? ? ADC_BufferCmd(ADC1, DISABLE);? ?//disable buffer

? ? ADC_ResetCalibration(ADC1);

? ? while(ADC_GetResetCalibrationStatus(ADC1));

? ? ADC_StartCalibration(ADC1);

? ? while(ADC_GetCalibrationStatus(ADC1));


}



然后下面是我獲取AD值得步驟


先是獲取電池的??


? if(ADCBAT_TimeFlag !=0 )

? ? ? {

? ? ? ? ? ?ADCBAT_TimeFlag = 0;


? ? ? ? ? ?CntTime++;

? ? ? ? ? ?cntdisply++;


? ? ? ? ? ?if(CntTime >10)//200ms開啟一次轉(zhuǎn)換

? ? ? ? ? ?{

? ? ? ? ? ? ? ?CntTime = 0;

//? ? ? ? ? ? ? ?ADC_Cmd(ADC1, ENABLE);

//? ? ? ? ? ? ? ?ADC_BufferCmd(ADC1, DISABLE);? ?//disable buffer

? ? ? ? ? ? ? ADC_RegularChannelConfig(ADC1, ADC_Channel_10, 1, ADC_SampleTime_239Cycles5 );

? ? ? ? ? ? ? ADC_SoftwareStartConvCmd(ADC1, ENABLE);

? ? ? ? ? ? ? flag = 1;

? ? ? ? ? ?}


? ? ? }


? ? ? ?if(flag !=0)

? ? ? ?{


? ? ? ? ? ?if(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC )==SET)

? ? ? ? ? {

? ? ? ? ? ? ? ?flag = 0;

? ? ? ? ? ? ? Tmep_ADC? = ADC_GetConversionValue(ADC1);

? ? ? ? ? ? ? ADC_file =? BAT_ADC_Sliding_filter(Tmep_ADC);

? ? ? ? ? }

? ? ? ?}


然后再到? 觸摸按鍵


? if(Touch_ADC_Time_Flag != 0)//500ms

? ? {

? ? ? ? Touch_ADC_Time_Flag = 0;


? ? ? ? if(collect_OKFlag !=0)

? ? ? ? {

? ? ? ? ? ? collect_OKFlag = 0;


? ? ? ? ? ? ADC_Cmd(ADC1, ENABLE);

? ? ? ? ? ? TKey1->CTLR1 |= (1 << 26) | (1 << 24); // Enable TouchKey and Buffer


? ? ? ? ? ? ADCData[0] = Touch_Key1_Adc(ADC_Channel_1);

? ? ? ? ? ? ADCData[1] = Touch_Key2_Adc(ADC_Channel_2);


? ? ? ? ? ? TFTLCD_Show5x7num(5,50,ADCData[0],GREED_COLOR,BACK_MAIN_COLOR);


? ? ? ? ? ? TFTLCD_Show5x7num(5,60,ADCData[1],GREED_COLOR,BACK_MAIN_COLOR);


? ? ? ? ? ? TKey1->CTLR1 &= ~ (1 << 26) | (1 << 24); // Enable TouchKey and Buffer

? ? ? ? }


? ? }


//collect_OKFlag? 這個標(biāo)志位是獲取到了ADC的數(shù)據(jù)就賦值1 然后觸摸再開始


uint16_t BAT_ADC_Sliding_filter(uint16_t bat_val)

{

? ? ?static int filter_init = -1;

? ? ?uint32_t Return_num = 0,slid_Sum = 0;

? ? ?static uint16_t i = 0;

? ? ?uint8_t j = 0;


? ? ?buffer_val[i] = bat_val;

? ? ?i++;

? ? ?if(i >(MAX_VAL-1))

? ? ?{

? ? ? ? ?ADC_OK_Flag = 1;

? ? ? ? ?i = 0;

? ? ?}


? ? for(j =0;j

? ?{

? ? ? ?slid_Sum +=buffer_val[j];

? ?}


? ?Return_num = slid_Sum/MAX_VAL;


? ?collect_OKFlag = 1;



? ? ?return Return_num;


}



從觸摸切換到ADC以及從ADC切換到觸摸都要重新初始化,觸摸跟ADC共用一個模塊,要注意互相之間的影響。目前我們CH32V307的觸摸庫還在驗(yàn)證,你可以給我一個郵箱,發(fā)給你幫忙測試一下看看效果如何。我的郵箱ccs@wch.cn


只有登錄才能回復(fù),可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频