OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 7231|回复: 8

关于用定时器触发ADC采集外部电压的问题,请看一下我的问题

[复制链接]

11

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-1
在线时间
55 小时
发表于 2016-6-3 11:54:21 | 显示全部楼层 |阅读模式
1金钱
//time2初始化
void Tim2Config(void)
{
    TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;
    //´开时钟
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
   
    TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseInitStruct.TIM_Prescaler=42-1;
    TIM_TimeBaseInitStruct.TIM_Period=44;
    TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);
    //选择输出触发方式 ,这里选择了数据更新触发
    TIM_SelectOutputTrigger(TIM2,TIM_TRGOSource_Update);
    TIM_Cmd(TIM2,ENABLE); //使能
}
//初始化ADC
void Adc_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStruct;
    ADC_CommonInitTypeDef ADC_CommonInitStruct;
    ADC_InitTypeDef ADC_InitStruct;
   
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE); //
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);  //
   
   
    GPIO_InitStruct.GPIO_Pin=GPIO_Pin_5;  
    GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AN;
    GPIO_InitStruct.GPIO_PuPd=GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOA,&GPIO_InitStruct);
   
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,ENABLE);
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_ADC1,DISABLE);
   

    ADC_CommonInitStruct.ADC_Mode=ADC_Mode_Independent;
    ADC_CommonInitStruct.ADC_TwoSamplingDelay=ADC_TwoSamplingDelay_5Cycles
    ADC_CommonInitStruct.ADC_DMAAccessMode=ADC_DMAAccessMode_Disabled;
    ADC_CommonInitStruct.ADC_Prescaler=ADC_Prescaler_Div4;
    ADC_CommonInit(&ADC_CommonInitStruct);
  

    ADC_InitStruct.ADC_Resolution=ADC_Resolution_12b;
    ADC_InitStruct.ADC_ScanConvMode=DISABLE;
    ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
    ADC_InitStruct.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_Rising;
    ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_T2_TRGO
    ADC_InitStruct.ADC_NbrOfConversion=1;
    ADC_Init(ADC1,&ADC_InitStruct);
   
    ADC_Cmd(ADC1,ENABLE);
}

u16 Get_Adc(u8 ch)
{

    ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_480Cycles); //µÚÈý¸ö²ÎÊýΪ¹æÔò×é²ÉÑùµÚÒ»¸ö
    //ADC_SoftwareStartConv(ADC1);//ʹÄÜÖ¸¶¨µÄADC1µÄÈí¼þת»»Æô¶¯¹¦ÄÜ
    ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigInjecConv_T2_TRGO);
    ADC_ExternalTrigInjectedConvEdgeConfig(ADC1,ADC_ExternalTrigInjecConvEdge_Rising);
   
    while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
    return ADC_GetConversionValue(ADC1);
}


u16 Get_Adc_Average(u8 ch,u8 times)
{
    u32 temp_val=0;
    u8 t;
    for(t=0;t<times;t++)
    {
        temp_val+=Get_Adc(ch);
        delay_ms(5);
    }
    return temp_val/times;
}



大家帮忙看一下问题在哪里,定时器触发ADC采集,现在采集不到电压。

最佳答案

查看完整内容[请看2#楼]

已解决,将u16 Get_Adc(u8 ch) { ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_480Cycles); while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)); return ADC_GetConversionValue(ADC1); } 这样写就可以了 只需要把ADC规则通道配置一下就好了,直接可以采集到数据了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-1
在线时间
55 小时
 楼主| 发表于 2016-6-3 11:54:22 | 显示全部楼层
已解决,将u16 Get_Adc(u8 ch)
{

    ADC_RegularChannelConfig(ADC1,ch,1,ADC_SampleTime_480Cycles);
    while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));
    return ADC_GetConversionValue(ADC1);
}  这样写就可以了 只需要把ADC规则通道配置一下就好了,直接可以采集到数据了
回复

使用道具 举报

11

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-1
在线时间
55 小时
 楼主| 发表于 2016-6-3 12:17:12 | 显示全部楼层
没有人来吗
回复

使用道具 举报

11

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
133
金钱
133
注册时间
2016-3-1
在线时间
55 小时
 楼主| 发表于 2016-6-3 12:31:36 | 显示全部楼层
定时器触发ADC采集,定时器使用更新事件做为触发输出。ADC配置了外部定时器的触发。可是ADC没有采集到电压,这是什么问题呀
回复

使用道具 举报

5

主题

158

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
200
金钱
200
注册时间
2016-5-29
在线时间
5 小时
发表于 2016-6-4 16:07:35 | 显示全部楼层
路过帮顶
回复

使用道具 举报

16

主题

85

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2013-12-18
在线时间
64 小时
发表于 2016-6-4 17:15:28 | 显示全部楼层
路过帮顶
回复

使用道具 举报

17

主题

109

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
金钱
348
注册时间
2016-6-13
在线时间
65 小时
发表于 2017-5-7 09:48:41 | 显示全部楼层
楼主 为啥我按你一样配置不行呢 http://www.openedv.com/forum.php?mod=viewthread&tid=101144
回复

使用道具 举报

37

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
836
金钱
836
注册时间
2016-12-22
在线时间
165 小时
发表于 2017-5-7 10:30:01 | 显示全部楼层
谢楼主的代码,对我很有参考价值
回复

使用道具 举报

37

主题

146

帖子

0

精华

高级会员

Rank: 4

积分
836
金钱
836
注册时间
2016-12-22
在线时间
165 小时
发表于 2017-5-10 22:33:45 | 显示全部楼层
大神,你的这个定时器是怎么配置的?我怎么读出来的是0啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-17 18:04

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表