OpenEdv-开源电子网

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

定时器触发 ADC采集

[复制链接]

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-8-11
在线时间
0 小时
发表于 2013-8-15 11:24:10 | 显示全部楼层 |阅读模式

定时器TIM2 定时触发AD采集 但我不太明白 TIM2的配置  TIM2的配置如下:

void ADC_Sample_Frequency_Set(void)
{
  TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;
  TIM_ICInitTypeDef   TIM_ICInitStructure;


  TIM_DeInit(TIM2);
 
/* Time base configuration */

  TIM_TimeBaseStructure.TIM_Period = 35999; 
  TIM_TimeBaseStructure.TIM_Prescaler = 1999;
  TIM_TimeBaseStructure.TIM_ClockDivision = 0;
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
 
/* TIM_OCMode_Toggle Mode configuration: Channel2 */

  TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Toggle;    //TIM ????±?????·?
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse = 30000;
  TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;
  TIM_OC2Init(TIM2, &TIM_OCInitStructure);

  TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
  TIM_ICInit(TIM2, &TIM_ICInitStructure);
 
  TIM_ARRPreloadConfig(TIM2, ENABLE);
  TIM_Cmd(TIM2, ENABLE);

}

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-15 11:35:07 | 显示全部楼层
找库函数手册,看定时器配置这些参数的意义。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-8-11
在线时间
0 小时
 楼主| 发表于 2013-8-15 12:25:47 | 显示全部楼层
---------------------------------
回复【2楼】正点原子:
---------------------------------
TIM_TimeBaseStructure.TIM_Period = 35999;  
TIM_TimeBaseStructure.TIM_Prescaler = 1999; 
 
改了这两个数怎么 AD采集的速率都不变的?
回复 支持 反对

使用道具 举报

6

主题

24

帖子

0

精华

初级会员

Rank: 2

积分
74
金钱
74
注册时间
2013-8-13
在线时间
1 小时
发表于 2013-8-15 12:35:16 | 显示全部楼层

      给你我自己的一段定时器中断的程序,学习时候自己编的,功能:每一秒钟a+1;

#include "time.h"
#include "stm32f10x.h"
//#include "key.h"
//#include "SysTickDelay.h"
u8 a;
u16 i=0;
void TIME_Configuration(void)
{
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE); //时钟配置

 TIM_DeInit(TIM2); //复位定时器

 TIM_TimeBaseStructure.TIM_Prescaler = 1;       //预分频(时钟分频)72M/(1+1)=36M
  TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;   //向上计数
  TIM_TimeBaseStructure.TIM_Period = 35999;        //装载值36M/36000=1000hz
  TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_RepetitionCounter = 0x0;

 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure); //初始化定时器的值

 TIM_ClearFlag(TIM2,TIM_FLAG_Update); //清除定时器中断标志
 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); //使能中断

 TIM_Cmd(TIM2,ENABLE); //开启时钟
}

void NVIC_Configuration(void)//嵌套中断配置
{
 NVIC_InitTypeDef  NVIC_InitStructure;

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

 NVIC_InitStructure.NVIC_IRQChannel=TIM2_IRQn; //选择TIM2中断
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;//
 NVIC_InitStructure.NVIC_IRQChannelSubPriority=0; //
 NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;//使能

 NVIC_Init(&NVIC_InitStructure);
}

void TIM2_IRQHandler(void)//定时器中断函数
{
 if(TIM_GetITStatus(TIM2,TIM_IT_Update)!=RESET)  //判断是否定时中断
  {
  i++;
  if(i==1000) {i=0;a++;}
  }
 TIM_ClearITPendingBit(TIM2, TIM_FLAG_Update);//必须清除中断标志位否则一直中断
}                     

 

 

回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-15 14:46:24 | 显示全部楼层
回复【3楼】奥特曼5507:
---------------------------------
你设置为多少?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-8-11
在线时间
0 小时
 楼主| 发表于 2013-8-15 19:23:26 | 显示全部楼层
回复【4楼】凌霄青云:
---------------------------------
谢谢了
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-8-11
在线时间
0 小时
 楼主| 发表于 2013-8-15 19:29:56 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
 原子老师 其实我是想用定时器来启动AD采集的 一般AD启动不都是软件启动的么?   这样定时器不就可以控制采样率了么
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-8-15 20:32:49 | 显示全部楼层
回复【7楼】奥特曼5507:
---------------------------------
在中断里面采集就是了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-7-16
在线时间
0 小时
发表于 2013-8-15 22:43:42 | 显示全部楼层
回复【7楼】奥特曼5507:
---------------------------------
这个可以啊,我现在就在做   把ADC1设置为外部触发模式,然后用一个定时器的PWM输出去作为外部触发信号,把这个PWM方波的输入到EXTI 11 上  然后就可以AD就可以采集数据了   采样频率可以自己设置(根据改变PWM波的周期,外部触发为上升沿有效)
STM32 学习中
回复 支持 反对

使用道具 举报

7

主题

23

帖子

0

精华

初级会员

Rank: 2

积分
71
金钱
71
注册时间
2013-8-11
在线时间
0 小时
 楼主| 发表于 2013-8-16 08:47:50 | 显示全部楼层
回复【9楼】xc1989:
---------------------------------
把这个PWM方波的输入到EXTI 11 上 这句话不太明白?
回复 支持 反对

使用道具 举报

8

主题

57

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-7-16
在线时间
0 小时
发表于 2013-8-16 12:46:34 | 显示全部楼层
回复【10楼】奥特曼5507:
---------------------------------
ADC的外部触发只能是在外部中断11 这根线上  所以你的波要输入到这个口  就是把PF11和你的PWM输出口连载一起
STM32 学习中
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-15 01:14

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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