现在想用定时器来触发ADC转换,每隔一段时间(20ms)触发一次AD,手册上讲有很多的外部触发方式,但是除了在ADC初始化时设置一下T1_CC1作为触发源之外,我就不知道定时器的程序应该怎样设置了:
ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_T1_CC1;//T1_CC1作为AD触发源
以下是我的定时器设置,是参照网上的,实时仿真没有反应,没有看到ADC在工作。。。
void ADC_TIM1_Set(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
//******************Time BASE configutation
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
TIM_TimeBaseStructInit(&TIM_TimeBaseStructure); //初始化结构体成员的值
TIM_TimeBaseStructure.TIM_Period = 2000; //1us*2000=2ms
TIM_TimeBaseStructure.TIM_Prescaler = 71; //72M/(71+1)=1M
TIM_TimeBaseStructure.TIM_ClockDivision = 0x0; //TIM_CKD_DIV1
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //递增计数模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
//******************TIM1_Channel1 PWM mode
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //比较输出模式为PWM1模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //输出状态使能
TIM_OCInitStructure.TIM_Pulse = 0x7F; //占空比
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //时钟空闲时为底
TIM_OC1Init(TIM1, &TIM_OCInitStructure);
//TIM_Cmd(TIM1, ENABLE); /* TIM1 counter enable */}
红 {MOD}部分放在主函数里面了,代替// ADC_SoftwareStartConvCmd(ADC1, ENABLE);//ADC1转换开始,这样行吗?
除了时基配置之外,我还配置了输出模式为PWM1模式,这样行吗??
谢谢各位啦!!!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
另外,可以参考ST的DEMO:TIMTrigger_AutoInjection
好东西!收下了!
一周热门 更多>