OpenEdv-开源电子网

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

用定时器4的4个不同通道,产生4个不同的时间基准,这四个通道可以分别开启和关闭吗

[复制链接]

52

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2012-4-26
在线时间
17 小时
发表于 2013-4-1 17:19:47 | 显示全部楼层 |阅读模式

下面是配置程序:

 void TIM4_Configuration(void)
 {
  TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
  TIM_OCInitTypeDef  TIM_OCInitStructure;


 /* ---------------------------------------------------------------
 TIM3CLK 即PCLK1=72MHz
 TIM3CLK = 72 MHz, Prescaler = 7200, TIM3 counter clock = 10K,计一个数为0.1ms
 --------------------------------------------------------------- */
 rescalerValue =7200-1;


 /* Time base configuration */
 TIM_TimeBaseStructure.TIM_Period = 65535; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值  计数到5000为500ms
 TIM_TimeBaseStructure.TIM_Prescaler =0; //设置用来作为TIMx时钟频率除数的预分频值  10Khz的计数频率 
 TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
 
    TIM_PrescalerConfig(TIM4, PrescalerValue, TIM_PSCReloadMode_Immediate);
 
   /* 配置通道1 */
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_Pulse = CCR1_Val;
   TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High;
   TIM_OC1Init(TIM4, &TIM_OCInitStructure);
   TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Disable);

   /*配置通道2*/
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_Pulse = CCR2_Val;
   TIM_OC2Init(TIM4, &TIM_OCInitStructure);
   TIM_OC2PreloadConfig(TIM4, TIM_OCPreload_Disable);
 
   /*配置通道4*/
   TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Timing;
   TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
   TIM_OCInitStructure.TIM_Pulse = CCR4_Val;
   TIM_OC4Init(TIM4, &TIM_OCInitStructure);
   TIM_OC4PreloadConfig(TIM4, TIM_OCPreload_Disable);
   TIM_ITConfig(TIM4, TIM_IT_CC1|TIM_IT_CC2|TIM_IT_CC4, ENABLE);

   TIM_Cmd(TIM4, ENABLE);
 }


我想让四个通道的定时,分别可以随时开启和关闭,如何才可以实现

TIM4的4个通道想分别用在不同的事件处理中,但是似乎只有TIM_Cmd()这函数可以用,就是把所有通道同时开启或关闭, 而想用TIM_CCxCmd()来分别操作各个通道则完全不起作用。
比如说TIM_Cmd(TIM4, ENABLE); 了之后,再TIM_CCxCmd(TIM4, TIM_Channel_1, TIM_CCx_Disable);就没办法关闭这个通道,还是会不停的进定时器中断。如果TIM_Cmd(TIM4, DISABLE); 了,则TIM_CCxCmd(TIM2, TIM_Channel_1, TIM_CCx_Enable);
也没办法把这个通道开启。请问该怎么解决这种问题。。。

努力?奋斗
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-1 17:57:31 | 显示全部楼层
你这都是用的一个CNT计数器啊...
怎么产生不同的时钟基准?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

52

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2012-4-26
在线时间
17 小时
 楼主| 发表于 2013-4-2 08:11:17 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
一个定时器有四个通道,将其配置为输出比较定时模式,并且打开相应的中断就可以产生4种不同的时间基准。
STM32例程中也有啊,我现在就是不知道如何可以单独控制每个通道的开关。

顺便问一下,配置定时器4的没有重映像的管脚PB6~PB9,应该配置为推挽输出还是复用推挽输出,我这两种试过好像都可以。
努力?奋斗
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-4-2 11:21:18 | 显示全部楼层
回复【3楼】原味_郭:
---------------------------------
既然是靠中断做的,把中断关了,总不会再跑了吧?
一般是复用输出
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

52

主题

214

帖子

0

精华

高级会员

Rank: 4

积分
504
金钱
504
注册时间
2012-4-26
在线时间
17 小时
 楼主| 发表于 2013-4-2 13:23:40 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我也是这样想的,试过之后,当只有一个通道时,可以。
当把四个通道都开启,然后单独控制某一路就会有问题。
努力?奋斗
回复 支持 反对

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2014-3-14
在线时间
0 小时
发表于 2014-4-3 09:48:14 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
那可不可以使用TIM1->CCER&=0xfffe; 将TIM1的第零位清零呢?即关闭TIM1的第一通道输出,而不影响其他通道呢?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-4-3 16:38:21 | 显示全部楼层
回复【6楼】STM32学徒:
---------------------------------
可以
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

15

主题

78

帖子

0

精华

初级会员

Rank: 2

积分
159
金钱
159
注册时间
2014-3-14
在线时间
0 小时
发表于 2014-4-4 21:44:56 | 显示全部楼层
回复【楼主位】原味_郭:
---------------------------------
使用TIM1->CCER&=0xfffe;可以关闭TIM1的第一通道,我试过的。
回复 支持 反对

使用道具 举报

11

主题

46

帖子

0

精华

初级会员

Rank: 2

积分
121
金钱
121
注册时间
2014-6-25
在线时间
5 小时
发表于 2014-9-11 16:45:57 | 显示全部楼层
库函数怎么去实现这个啊!???
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 20:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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