注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小盒子的小盒

知道的越多不知道的就越多

 
 
 

日志

 
 

【转】STM32 定时器的4通道计数器应用  

2011-08-17 22:41:57|  分类: STM32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

通用定时器确实比较强悍,功能极多我也比较晕

 此为在不牵扯PWMDMA下像C51那样计数点灯。

 当然你要配置一些IO口作为点灯用这里就不详细说了。

 

就如

#defineLED2_ON  GPIO_ResetBits(GPIOD,GPIO_Pin_7)
#define LED2_OFF GPIO_SetBits(GPIOD,GPIO_Pin_7)

这样的。

 

然后启用通用定时器2设置它的中断等3.0库;

  //Timer2中断*//

void NVIC_Configuration(void)
{
 NVIC_InitTypeDef NVIC_InitStructure;
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
 NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;//TIM2
全局中断3.0
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority= 0;
 NVIC_InitStructure.NVIC_IRQChannelSubPriority =0;
 NVIC_InitStructure.NVIC_IRQChannelCmd =ENABLE;
 NVIC_Init(&NVIC_InitStructure);

}

 //TIM2 clock enable

 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

 TIM_OCInitTypeDef TIM_OCInitStructure;

 

 TIM_TimeBaseStructure.TIM_Period =8000;   //计数值  
 TIM_TimeBaseStructure.TIM_Prescaler =7200-1;    //预分频,此值+1为分频的除数
 TIM_TimeBaseStructure.TIM_ClockDivision =0x0;   //
设置时钟分割
 TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up;  //
向上计数


********************************************************************************************** 
 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseStructure);

TIM_ClockDivision,设置时钟分割

它就是RCC控制寄存器1(TIMx_CR1)的位9:8CKD),具体含义如下:

CKD[1:0]: 时钟分频因子
定义在定时器时钟(CK_INT)频率与数字滤波器(ETR,TIx)使用的采样频率之间的分频比例。
0x00tDTS = 1 x tCK_INT
0x01
tDTS = 2 xtCK_INT
0x10
tDTS = 4 xtCK_INT

TIM_TimeBaseStructure中应该还有一个更新报告  uint8_t TIM_RepetitionCounter;不管他也行。

  72M/7200=10K分频后的结果就是,定时器速度为10K.计数器为向上计数,8000 溢出,所以溢出时间就是
8000/10K=0.8
.而捕获的比较值则为:
u16 CCR1_Val = 4000;
u16 CCR2_Val = 2000;
u16 CCR3_Val = 1000;
u16 CCR4_Val = 500;
也就是说,在定时器开始计数后,第一通道的中断发生在4000/10k=0.4,第二通道是0.2,第三
通道是0.1,第四是0.05*/

************************************************************************************************ 



   //比较设置*/              

  TIM_OCInitStructure.TIM_OCMode =TIM_OCMode_Inactive;       //输出比较非主动模式

  TIM_OCInitStructure.TIM_OCPolarity =TIM_OCPolarity_High;  //极性为正 

    //比较通道1*/           
  TIM_OCInitStructure.TIM_Pulse =CCR1_Val;  //
就是4000装入捕获比较寄存器的脉冲值

  TIM_OC1Init(TIM2,&TIM_OCInitStructure);             //写入配置
  TIM_OC1PreloadConfig(TIM2,TIM_OCPreload_Disable);  //
禁止OC1重装载,其实可以省掉这句,因为默是

 //4路都不重装的.

********************************************************************************************

typedef struct
{
  uint16_t TIM_OCMode; //
选择定时器模式比较多有的功能也比较相似
  uint16_t TIM_OutputState; //
使能通道 为了和2.0兼容吧我不管他
  uint16_tTIM_OutputNState; //失能??
  uint16_tTIM_Pulse;      //
待装入捕获比较寄存器的脉冲值
 uint16_t TIM_OCPolarity;  //输出极性
  uint16_t TIM_OCNPolarity; //
???
  uint16_tTIM_OCIdleState;  //???
  uint16_t TIM_OCNIdleState; //
???不懂得不管用默认就好
} TIM_OCInitTypeDef;

 

******************************************************************************************** 

 

    //比较通道2 /      
 TIM_OCInitStructure.TIM_Pulse =CCR2_Val; 
 
 TIM_OC2Init(TIM2,&TIM_OCInitStructure);
 TIM_OC2PreloadConfig(TIM2,TIM_OCPreload_Disable);
 
   //
比较通道3 /         
 TIM_OCInitStructure.TIM_Pulse =CCR3_Val; 
 
 TIM_OC3Init(TIM2,&TIM_OCInitStructure);
 TIM_OC3PreloadConfig(TIM2,TIM_OCPreload_Disable);
 
 //
比较通道4 /    
 TIM_OCInitStructure.TIM_Pulse =CCR4_Val; 
 
 TIM_OC4Init(TIM2,&TIM_OCInitStructure);
 TIM_OC4PreloadConfig(TIM2,TIM_OCPreload_Disable);

 

 

 //使能预装载/
 TIM_ARRPreloadConfig(TIM2,ENABLE);  //
这个历程中没有软件修改寄存器所以没他也行
  //
预先清除所有中断位防止一启用就有中断从九九那抄的/

 TIM_ClearITPendingBit(TIM2, TIM_IT_CC1 |TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update);

  //4个通道和溢出都配置中断/
 TIM_ITConfig(TIM2, TIM_IT_CC1 | TIM_IT_CC2 |TIM_IT_CC3 | TIM_IT_CC4|TIM_IT_Update, ENABLE);
  //
允许TIM2开始计数 /
 TIM_Cmd(TIM2, ENABLE);

 

服务中断函数比较简单直接抄来

 

void TIM2_IRQHandler(void)
{
 if (TIM_GetITStatus(TIM2, TIM_IT_CC1) !=RESET)
 {
  //
必须清空标志位/*/
  TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);

   //点亮LED5 一定要是中文的 不然中间的 内容就不见了 本想大家移植到自己的作品中方便 看来SINA不可这样用

  评论这张
 
阅读(3338)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017