这个demo:LKS32MC08x_PeripDemo_v2p7.zip\4.ADC\ADC_UTimer_Triggerdemo里的代码如下:ADC代码:
void ADC0_init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
GPIO_StructInit(&GPIO_InitStruct); //初始化结构体
/* ADC_CHANNEL_7 P0.3 */
GPIO_InitStruct.GPIO_Mode = GPIO_Mode_ANA;
GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIO0, &GPIO_InitStruct);
ADC_InitTypeDef ADC_InitStructure;
ADC_StructInit(&ADC_InitStructure); //初始化结构体
ADC_InitStructure.IE = ADC_EOS0_IRQ_EN | ADC_DAT0_OV_IRQ_EN; //第一段扫描结束中断使能和ADC_DAT0超阈值中断
ADC_InitStructure.Align = ADC_LEFT_ALIGN; //ADC数据输出左对齐
ADC_InitStructure.UTIMER_Trigger_En = ADC_UTIMER_T0_TRG; //UTIMER_T0硬件触发ADC采样
ADC_InitStructure.MCPWM_Trigger_En = DISABLE; //关闭MCPWM的硬件中断
ADC_InitStructure.FirSeg_Ch = ADC_1_TIMES_SAMPLE; //第一段采样的总通道数: 1~20
ADC_InitStructure.Trigger_Cnt = 0; /*单段触发模式下触发一次采样所需要的事件数:0~15 0表示需要一次触发,15表示需要16次*/
ADC_InitStructure.Trigger_Mode = ADC_1SEG_TRG; /*ADC采样1段模式*/
ADC_InitStructure.DAT0_TH_Type = 1; //设置ADC比较上阈值中断
ADC0_DAT0_TH = 5000; //设置ADC0_DARA0大于ADC0_DAT0_TH值时,触发ADC数值比较中断
ADC_Init(ADC0, &ADC_InitStructure);
ADC0_IF = 0xff; //清中断标志位
ADC0_GAIN0 = 0x0; //开启2/3增益
ADC0_CHN0 = ADC_CHANNEL_7 | (ADC_CHANNEL_7 << 8); //采样电位器分压值
}
定时器代码:
void UTimer_init(void)
{
TIM_TimerInitTypeDef TIM_InitStruct;
TIM_TimerCmd(TIMER2, ENABLE); /* Timer2 模块使能 */
TIM_TimerStrutInit(&TIM_InitStruct); //Timer结构体初始化
TIM_InitStruct.Timer_CH0_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH0 为比较模式 */
TIM_InitStruct.Timer_CH0_CapMode = TIMER_CapMode_None;
TIM_InitStruct.Timer_CH0Output = 0; /* 计数器回零时,比较模式输出极性控制 */
TIM_InitStruct.Timer_CH1_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH1 为比较模式 */
TIM_InitStruct.Timer_CH1_CapMode = TIMER_CapMode_None;
TIM_InitStruct.Timer_CH1Output = 0; /* 计数器回零时,比较模式输出极性控制 */
TIM_InitStruct.Timer_TH = 48000; /* 定时器计数门限初始值1000*/
TIM_InitStruct.Timer_CMP0 = 24000; /* 设置比较模式的CH0比较初始值500 */
TIM_InitStruct.Timer_CMP1 = 24000; /* 设置比较模式的CH1比较初始值500 */
TIM_InitStruct.Timer_Filter0 = 0; /* 设置捕捉模式或编码器模式下对应通道的数字滤波值 */
TIM_InitStruct.Timer_Filter1 = 0;
TIM_InitStruct.Timer_ClockDiv = TIM_Clk_Div2; /* 设置Timer模块数据分频系数 */
TIM_InitStruct.Timer_IRQEna = Timer_IRQEna_CH0 | Timer_IRQEna_CH1 | Timer_IRQEna_Zero; /* 开启Timer模块比较中断和过零中断*/
TIM_TimerInit(TIMER2, &TIM_InitStruct);
TIM_TimerCmd(TIMER3, ENABLE); /* Timer3 模块使能 */
TIM_TimerStrutInit(&TIM_InitStruct); //Timer结构体初始化
TIM_InitStruct.Timer_CH0_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH0 为比较模式 */
TIM_InitStruct.Timer_CH0_CapMode = TIMER_CapMode_None;
TIM_InitStruct.Timer_CH0Output = 0; /* 计数器回零时,比较模式输出极性控制 */
TIM_InitStruct.Timer_CH1_WorkMode = TIMER_OPMode_CMP; /* 设置Timer CH1 为比较模式 */
TIM_InitStruct.Timer_CH1_CapMode = TIMER_CapMode_None;
TIM_InitStruct.Timer_CH1Output = 0; /* 计数器回零时,比较模式输出极性控制 */
TIM_InitStruct.Timer_TH = 48000; /* 定时器计数门限初始值1000*/
TIM_InitStruct.Timer_CMP0 = 24000; /* 设置比较模式的CH0比较初始值500 */
TIM_InitStruct.Timer_CMP1 = 24000; /* 设置比较模式的CH1比较初始值500 */
TIM_InitStruct.Timer_Filter0 = 0; /* 设置捕捉模式或编码器模式下对应通道的数字滤波值 */
TIM_InitStruct.Timer_Filter1 = 0;
TIM_InitStruct.Timer_ClockDiv = TIM_Clk_Div2; /* 设置Timer模块数据分频系数 */
TIM_InitStruct.Timer_IRQEna = Timer_IRQEna_CH0 | Timer_IRQEna_CH1 | Timer_IRQEna_Zero; /* 开启Timer模块比较中断和过零中断*/
TIM_TimerInit(TIMER3, &TIM_InitStruct);
}
----------------
看不懂啊:
1,定时器0到底是在哪使能的?
2,实际调试程序确实能跑。
有大佬能给解释解释吗?
|