OpenEdv-开源电子网

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

关于F4的TIM2-32位定时器的不解,大于65535计数就不准,小于则准确

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
9
金钱
9
注册时间
2019-8-12
在线时间
1 小时
发表于 2021-6-7 17:47:25 | 显示全部楼层 |阅读模式
2金钱
最近做一个脉冲发生器,使用到了TIM2的32位定时器,但是很奇怪32位定时器在给定16位以内的数时执行的都是正确的,但是只要数值超过16位,数据就不准了
是不是使用的时候有什么细节没注意,还是说不要使用32位的定时器

现在不知道问题出在哪里
IDE 是keil 5.30


以下是配置代码
  1. //脉冲通道1                -->        TIM1做主定时器,输出通道CH1,TIM2做从定时器
  2. void TIM1_Init(u32 Cycle)
  3. {       
  4.         TIM_OCInitTypeDef        TIM_OCInitStructure;
  5.         TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;               
  6.        
  7.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);        // 开启定时器时钟,即内部时钟CK_INT=72M
  8.        
  9.         TIM_TimeBaseStructure.TIM_Period=Cycle-1;        // 自动重装载寄存器的值,累计TIM_Period+1个频率后产生一个更新或者中断       
  10.         TIM_TimeBaseStructure.TIM_Prescaler= 3;        // 时钟预分频数       
  11.         TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;        // 时钟分频因子 ,没用到不用管               
  12.         TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;         // 计数器计数模式,设置为向上计数               

  13.         TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);        // 根据结构体,初始化定时器

  14.         TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
  15.         TIM_OCInitStructure.TIM_Pulse=Cycle/2;                                                                 //设置占空比时间                 
  16.         TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;        //比较输出使能
  17.         TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low;                //输出极性

  18.         TIM_OC1Init(TIM1, &TIM_OCInitStructure);        //PWM输出引脚

  19.         /*TIM1主模式设置*/
  20.         TIM_SelectMasterSlaveMode(TIM1,TIM_MasterSlaveMode_Enable);

  21.         TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update);

  22.         /*从模式设置,指定从定时器*/
  23.         TIM_SelectInputTrigger(TIM2, TIM_TS_ITR0);                        //连接关系请查表
  24.         TIM_SelectSlaveMode(TIM2,TIM_SlaveMode_External1);        //设置从模式寄存器

  25.         TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);        //使能CCR预装载寄存器
  26.        
  27.         TIM_ARRPreloadConfig(TIM1, ENABLE);  //使能或者失能 TIMx 在 ARR 上的预装载寄存器
  28.        
  29.         TIM_CtrlPWMOutputs(TIM1, ENABLE);  //主输出使能

  30. }

  31. /***定时器2从模式***/
  32. void TIM2_Config(u32 PulseNum)
  33. {
  34.     TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

  35.     TIM_TimeBaseStructure.TIM_Period = PulseNum-1; //设置自动重装载周期值
  36.     TIM_TimeBaseStructure.TIM_Prescaler =0;   
  37.     TIM_TimeBaseStructure.TIM_ClockDivision = 0;     
  38.     TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  
  39.     TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);      
  40.     TIM_ITConfig(TIM2,TIM_IT_Update,DISABLE);
  41. }

  42. /***定时器2从模式***/
  43. void TIM2_Init(u32 PulseNum)
  44. {
  45.     NVIC_InitTypeDef NVIC_InitStructure;
  46.     RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

  47.     TIM2_Config(PulseNum);

  48.     NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);
  49.     NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;  //全局中断      
  50.    
  51.     NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
  52.     NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;     
  53.     NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  54.     NVIC_Init(&NVIC_InitStructure);
  55. }
复制代码
以上是配置代码
下面的是计数完成后的中断

  1. //通道1中断        --> TIM1主TIM2从
  2. void TIM2_IRQHandler(void) //Pulse通道1计数器中断
  3. {
  4.     if (TIM_GetITStatus(TIM2, TIM_IT_Update) != RESET)     // TIM_IT_CC1
  5.     {
  6.         TIM_ClearITPendingBit(TIM2, TIM_IT_Update); // 清除中断标志位
  7.         TIM_Cmd(TIM1, DISABLE); // 关闭定时器
  8.         TIM_Cmd(TIM2, DISABLE); // 关闭定时器
  9.         F_PulseBusy1 = 0;
  10.         TIM_ITConfig(TIM2, TIM_IT_Update, DISABLE);         
  11.     }
  12. }
复制代码





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

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 17:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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