你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6567|回复: 3

关于定时器2通道2定时触发ADC1转换的程序,程序配置上好像有问题,请大家指教

[复制链接]

6

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2011-8-3 14:29:04 | 显示全部楼层 |阅读模式
*TIM2通道2作为ADC1转换的触发时钟200US转换一次--------------------------------- */
  TIM_DeInit(TIM2);                                                //重新将Timer设置为缺省值
  TIM_TimeBaseStructure.TIM_Period = 200;                          //1US*200=200US设置计数溢出大小,
  TIM_TimeBaseStructure.TIM_Prescaler = 20;                        //预分频系数为20 /20=1M(1US)
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;                     //设置时钟分割
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;      //设置计数器模式为向上计数模式
  TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);                   //将配置应用到TIM2中
   //PWM设置
  TIM_OCStructInit(&TIM_OCInitStructure);                          //设置缺省值
  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;                //PWM模式1输出(PWM2也行)
  TIM_OCInitStructure.TIM_Pulse = 15;                              //设置占空比
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;        //TIM输出比较极性高 (LOW也行)
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;    //使能输出状态
  TIM_OC2Init(TIM2, &TIM_OCInitStructure);                         //初始化TIM2的2通道
  TIM_ARRPreloadConfig(TIM2, ENABLE);                              //使能TIMx在ARR上的预装载寄存器
  TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);                //使能TIMx在CCR2上的预装载寄存器 
 ADC_InitStructure.ADC_Mode     = ADC_Mode_Independent;
  ADC_InitStructure.ADC_ScanConvMode   = ENABLE;
  ADC_InitStructure.ADC_ContinuousConvMode  = DISABLE;
  ADC_InitStructure.ADC_ExternalTrigConv  = ADC_ExternalTrigConv_T2_CC2;
  ADC_InitStructure.ADC_DataAlign    = ADC_DataAlign_Right;
  ADC_InitStructure.ADC_NbrOfChannel   = 9;
  ADC_Init(ADC1, &ADC_InitStructure);
  /* ADC1 Regular Channel1 Configuration                                      */
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10,  1, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_11,  2, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_12,  3, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1,   4, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_2,   5, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_1,   6, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_2,   7, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_10,  8, ADC_SampleTime_41Cycles5);
  ADC_RegularChannelConfig(ADC1, ADC_Channel_16,  9, ADC_SampleTime_239Cycles5);
  /* Enable ADC1 */
  ADC_TempSensorVrefintCmd(ENABLE);//
  ADC_Cmd(ADC1, ENABLE);
  /* Enable ADC1 reset calibaration register */  
  ADC_ResetCalibration(ADC1);
  /* Check the end of ADC1 reset calibration register */
  while(ADC_GetResetCalibrationStatus(ADC1));
  /* Start ADC1 calibaration */
  ADC_StartCalibration(ADC1);
  /* Check the end of ADC1 calibration */
  while(ADC_GetCalibrationStatus(ADC1));
  ADC_DMACmd(ADC1, ENABLE);             /* Enable ADC1's DMA interface        */
  ADC_Cmd   (ADC1, ENABLE);             /* Enable ADC1                        */
  ADC_ExternalTrigConvCmd(ADC1, ENABLE);
  //ADC_SoftwareStartConvCmd(ADC1,ENABLE);/* Start ADC1 Software Conversion     */
  TIM_Cmd(TIM2,ENABLE);
  TIM_CtrlPWMOutputs(TIM2,ENABLE);                                 //设置TIM2的PWM输出为使能
程序下载后只能转换一次后就不再定时转换了,是不是上面配置有问题,(我是通过DMA传送ADC转换结果的,DMA配置经验证是对的)
 
 
 
<
回复

使用道具 举报

134

主题

4489

回帖

239

蝴蝶豆

版主

最后登录
2020-12-9
发表于 2011-8-3 14:57:16 | 显示全部楼层

RE:关于定时器2通道2定时触发ADC1转换的程序,程序配置上好像有问题,请大家指教

是不是你的定时器中断没有清除中断标志位呢?这应该是你定时器配置的问题。还有就是,你使用定时器的时候,可以不开启PWM。
回复 支持 反对

使用道具 举报

6

主题

13

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
 楼主| 发表于 2011-8-3 15:12:55 | 显示全部楼层

RE:关于定时器2通道2定时触发ADC1转换的程序,程序配置上好像有问题,请大家指教

不好意思,我发现问题了,上面程序配置是对的,只是我在主程序中调用出错了,我在主程序中是定时读取AD数据的,定时计数没循环递减造成只读了以便,更改后就正常了。
回复 支持 反对

使用道具 举报

1

主题

2

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2013-10-24 17:53:51 | 显示全部楼层

回复:关于定时器2通道2定时触发ADC1转换的程序,程序配置上好像有问题,请大家指教

回复第 3 楼 于2011-08-03 15:12:55发表:
不好意思,我发现问题了,上面程序配置是对的,只是我在主程序中调用出错了,我在主程序中是定时读取AD数据的,定时计数没循环递减造成只读了以便,更改后就正常了。 

能把主程序源码发给我看一下吗 我最近做的这个和你的这个项目很像
回复 支持 反对

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版