CH32V003F4P6芯片外部觸發(fā)延遲函數ADC_ExternalTrig_DLY()不起作用

實例代碼如下

/**********************************?(C)?COPYRIGHT?*******************************
*?File?Name??????????:?main.c
*?Author?????????????:?WCH
*?Version????????????:?V1.0.0
*?Date???????????????:?2024/02/20
*?Description????????:?Main?program?body.
*********************************************************************************
*?Copyright?(c)?2021?Nanjing?Qinheng?Microelectronics?Co.,?Ltd.
*?Attention:?This?software?(modified?or?not)?and?binary?are?used?for?
*?microcontroller?manufactured?by?Nanjing?Qinheng?Microelectronics.
*******************************************************************************/

/*
?*@Note
?*TIM?trigger?ADC?conversion?routine:
?*ADC?channel?2?(PC4)?-?injection?group?channel,?TIM1?CH3?pin?(PC3)??TIM?trigger,
?*In?this?mode,?an?ADC?conversion?is?triggered?by?an?event?on?TIM1?CH3?TIM?trigger,?and?a?JEOC?interrupt?is?generated?after
?*the?conversion?is?completed.
?*
?*/

#include?"debug.h"

/*?Global?Variable?*/

/*********************************************************************
?*?@fn??????ADC_Function_Init
?*
?*?@brief???Initializes?ADC?collection.
?*
?*?@return??none
?*/
void?ADC_Function_Init(void)
{
????ADC_InitTypeDef??ADC_InitStructure?=?{0};
????GPIO_InitTypeDef?GPIO_InitStructure?=?{0};
????NVIC_InitTypeDef?NVIC_InitStructure?=?{0};

????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,?ENABLE);
????RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,?ENABLE);
????RCC_ADCCLKConfig(RCC_PCLK2_Div6);

????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_4;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AIN;
????GPIO_Init(GPIOC,?&GPIO_InitStructure);

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

????ADC_InjectedSequencerLengthConfig(ADC1,?1);
????ADC_InjectedChannelConfig(ADC1,?ADC_Channel_2,?1,?ADC_SampleTime_9Cycles);
????ADC_ExternalTrigInjectedConvCmd(ADC1,?ENABLE);

????NVIC_InitStructure.NVIC_IRQChannel?=?ADC_IRQn;
????NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority?=?0;
????NVIC_InitStructure.NVIC_IRQChannelSubPriority?=?1;
????NVIC_InitStructure.NVIC_IRQChannelCmd?=?ENABLE;
????NVIC_Init(&NVIC_InitStructure);

????ADC_ExternalTrig_DLY(ADC1,?ADC_ExternalTrigInjec_DLY,?0x80);??/*?external?trigger?sources?delay?time?*/
????ADC_Calibration_Vol(ADC1,?ADC_CALVOL_50PERCENT);
????ADC_ITConfig(ADC1,?ADC_IT_JEOC,?ENABLE);
????ADC_Cmd(ADC1,?ENABLE);

????ADC_ResetCalibration(ADC1);
????while(ADC_GetResetCalibrationStatus(ADC1));
????ADC_StartCalibration(ADC1);
????while(ADC_GetCalibrationStatus(ADC1));
}

/*********************************************************************
?*?@fn??????EXTI_Event_Init
?*
?*?@brief???Initializes?EXTI.
?*
?*?@return??none
?*/
void?TIM1_PWM_In(u16?arr,?u16?psc,?u16?ccp)
{
????GPIO_InitTypeDef????????GPIO_InitStructure?=?{0};
????TIM_OCInitTypeDef???????TIM_OCInitStructure?=?{0};
????TIM_TimeBaseInitTypeDef?TIM_TimeBaseInitStructure?=?{0};

????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC?|?RCC_APB2Periph_TIM1,?ENABLE);

????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_3;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_AF_PP;//
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_30MHz;
????GPIO_Init(GPIOC,?&GPIO_InitStructure);

????TIM_TimeBaseInitStructure.TIM_Period?=?arr;
????TIM_TimeBaseInitStructure.TIM_Prescaler?=?psc;
????TIM_TimeBaseInitStructure.TIM_ClockDivision?=?TIM_CKD_DIV1;
????TIM_TimeBaseInitStructure.TIM_CounterMode?=?TIM_CounterMode_Up;
????TIM_TimeBaseInit(TIM1,?&TIM_TimeBaseInitStructure);

????TIM_OCInitStructure.TIM_OCMode?=?TIM_OCMode_PWM1;
????TIM_OCInitStructure.TIM_OutputState?=?TIM_OutputState_Enable;
????TIM_OCInitStructure.TIM_Pulse?=?ccp;
????TIM_OCInitStructure.TIM_OCPolarity?=?TIM_OCPolarity_High;
????TIM_OC3Init(TIM1,?&TIM_OCInitStructure);

????TIM_CCxCmd(TIM1,?TIM_Channel_3,?TIM_CCx_Enable);

????TIM_CtrlPWMOutputs(TIM1,?ENABLE);
????TIM_OC3PreloadConfig(TIM1,?TIM_OCPreload_Disable);
????TIM_ARRPreloadConfig(TIM1,?ENABLE);
????TIM_SelectOutputTrigger(TIM1,?TIM_TRGOSource_Update);
????TIM_Cmd(TIM1,?ENABLE);
}


/*********************************************************************
?*?@fn??????main
?*
?*?@brief???Main?program.
?*
?*?@return??none
?*/
int?main(void)
{
????SystemCoreClockUpdate();
????Delay_Init();
#if?(SDI_PRINT?==?SDI_PR_OPEN)
????SDI_Printf_Enable();
#else
????USART_Printf_Init(115200);
#endif
????printf("SystemClk:%d\r\n",?SystemCoreClock);
????printf(?"ChipID:%08x\r\n",?DBGMCU_GetCHIPID()?);

????RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,?ENABLE);

????GPIO_InitTypeDef????????GPIO_InitStructure?=?{0};
????GPIO_InitStructure.GPIO_Pin?=?GPIO_Pin_2;
????GPIO_InitStructure.GPIO_Mode?=?GPIO_Mode_Out_PP;//
????GPIO_InitStructure.GPIO_Speed?=?GPIO_Speed_50MHz;
????GPIO_Init(GPIOD,?&GPIO_InitStructure);

????ADC_Function_Init();
????TIM1_PWM_In(4800,100,2400);
????while(1)
????{

????}
}

void?ADC1_IRQHandler(void)?__attribute__((interrupt("WCH-Interrupt-fast")));

/*********************************************************************
?*?@fn??????ADC1_IRQHandler
?*
?*?@brief???ADC1_2?Interrupt?Service?Function.
?*
?*?@return??none
?*/
void?ADC1_IRQHandler(void)
{

????if(ADC_GetITStatus(ADC1,?ADC_IT_JEOC))
????{
????????//printf("ADC?Extline?trigger?conversion...\r\n");
????????//ADC_val?=?ADC_GetInjectedConversionValue(ADC1,?ADC_InjectedChannel_1);
????????//printf("JADC-%04d\r\n",?ADC_val);
????????GPIO_SetBits(GPIOD,?GPIO_Pin_2);
????????GPIO_ResetBits(GPIOD,?GPIO_Pin_2);
????}

????ADC_ClearITPendingBit(ADC1,?ADC_IT_JEOC);
}

當延時設置為0x00時:

ADC_ExternalTrig_DLY(ADC1,?ADC_ExternalTrigInjec_DLY,?0x00);

波形如下:

1715681692387.png

當延時設置為0x40時:

ADC_ExternalTrig_DLY(ADC1,?ADC_ExternalTrigInjec_DLY,?0x40);

波形如下:

1715681937356.png

大約都是3.8us,與預期不符。

代碼附件:

icon_rar.gifTIM_Trigger.zip


您好,ch32v00x_adc.h文件中關于DLY宏定義參考下圖修改一下即可,你再測試一下應該就沒問題了。后面版本會進行更新,后續(xù)若有問題,可郵箱(lzs@wch.cn)溝通

image.png



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

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