设为首页收藏本站

Discuz! Board

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 8987|回复: 12
打印 上一主题 下一主题

关于stm32f429定时器的设置

[复制链接]

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
跳转到指定楼层
楼主
MrYan 发表于 2014-6-24 19:34:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    根据手册,定时器7的时钟是45Mhz,我是根据官方的时钟初始化来初始化时钟的,我看了一下,是设置的45MHz,我设置的定时器7的设置如下:
  TIM7->PSC = (450 - 1);                                                        //
  TIM7->ARR = 100;
  TIM7->CR1 |= (1 << 7);                                                        //
  TIM7->DIER |= (1 << 0);                                                        //使能中断
  TIM7->SR &= ~(1 << 0);                                                        //清楚中断标志位
  TIM7->CR1 |= (1 << 0);                                                        //开始计数

我设置的预分频是450,计数是100,根据计算,应该是1ms,可是我用USBee查看,发现时间是1.58多ms......我测试的方法是:
void TIM7_IRQHandler(void)
{
  if(TIM7->SR)
  {
    TIM7->SR = 0X0000;
    //++Test_GV;
    if(LED_RED_EXT)
    {
       LED_RED_RESET;
    }
    else
    {
      LED_RED_SET;
    }
  }
}
   现在不知道是不是我计算错误,还是我理解错误,差距咋这么大呢....求解释啊..............
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
分享才可以产生世界.....
回复

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
沙发
admin 发表于 2014-6-24 20:01:43 | 只看该作者
设置的什么中断方式?
回复 支持 反对

使用道具 举报

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
板凳
 楼主| MrYan 发表于 2014-6-24 20:03:20 | 只看该作者
admin 发表于 2014-6-24 20:01
设置的什么中断方式?

什么意思...这句话不太理解,可以解释一下么.....
分享才可以产生世界.....
回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
地板
admin 发表于 2014-6-24 20:05:20 | 只看该作者
MrYan 发表于 2014-6-24 20:03
什么意思...这句话不太理解,可以解释一下么.....

TIM7->SR你不是设置了么,这个知道是设置什么吗?
回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
5#
admin 发表于 2014-6-24 20:08:09 | 只看该作者
admin 发表于 2014-6-24 20:05
TIM7->SR你不是设置了么,这个知道是设置什么吗?

也就是中断是update Interrupt sourc、Capture Compare TIM Trigger Interrupt source、 Interrupt source、TIM Break Interrupt source等,看你设置的是update Interrupt 中断,你计数器初始值装的多少?
回复 支持 反对

使用道具 举报

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
6#
 楼主| MrYan 发表于 2014-6-24 20:15:17 | 只看该作者
admin 发表于 2014-6-24 20:08
也就是中断是update Interrupt sourc、Capture Compare TIM Trigger Interrupt source、 Interrupt sourc ...

呃......我看资料的时候,定时器7只有Update DMA request enable和Update interrupt enable,我把前者和谐掉....不就只有后者了么...至于说中断源,我看了一下...没有地方可以设置啊,难道是URS和UDIS设置的么........
分享才可以产生世界.....
回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
7#
admin 发表于 2014-6-24 20:28:30 | 只看该作者
MrYan 发表于 2014-6-24 20:15
呃......我看资料的时候,定时器7只有Update DMA request enable和Update interrupt enable,我把前者和 ...

TIM7->ARR = 99;你试试这样设置
回复 支持 反对

使用道具 举报

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
8#
 楼主| MrYan 发表于 2014-6-24 20:33:17 | 只看该作者
admin 发表于 2014-6-24 20:28
TIM7->ARR = 99;你试试这样设置

这个我已经试过了....我看了一下中断源,定时器7有三个:计数溢出,设置UG位,还有就是控制器(DMA);第2个是设置UG的时候,就会产生中断,第三个我中断禁止了......应该只有第一个是中断了......
分享才可以产生世界.....
回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
9#
admin 发表于 2014-6-24 20:35:06 | 只看该作者
MrYan 发表于 2014-6-24 20:33
这个我已经试过了....我看了一下中断源,定时器7有三个:计数溢出,设置UG位,还有就是控制器(DMA);第 ...

那中断嵌套是否设置正确?
回复 支持 反对

使用道具 举报

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
10#
 楼主| MrYan 发表于 2014-6-24 20:44:04 | 只看该作者
admin 发表于 2014-6-24 20:35
那中断嵌套是否设置正确?

中断嵌套???不是只有中断优先级么...这个到没怎么注意,这个怎么说的.............
分享才可以产生世界.....
回复 支持 反对

使用道具 举报

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
11#
 楼主| MrYan 发表于 2014-6-24 20:56:20 | 只看该作者
admin 发表于 2014-6-24 20:35
那中断嵌套是否设置正确?


我百度了一下,中断嵌套就是中断的两个方式,抢占式优先级和响应优先级,这两个我都设置了....我没有把这个列出而已,我把整个设置列出来吧!!!
void InitTimeSeven(void)
{
  NVIC_InitTypeDef NVIC_Init_IT;                                                //Use set time seven Priority
  
  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM7, ENABLE);                          //Open time seven periph clock
  
  NVIC_Init_IT.NVIC_IRQChannel = TIM7_IRQn;                                     //Time seven
  NVIC_Init_IT.NVIC_IRQChannelCmd = ENABLE;            
  NVIC_Init_IT.NVIC_IRQChannelPreemptionPriority = 0;
  NVIC_Init_IT.NVIC_IRQChannelSubPriority = 3;
  NVIC_Init(&NVIC_Init_IT);
  
  TIM7->PSC = (450 - 1);                                                        //
  TIM7->ARR = 99;
  TIM7->CR1 |= (1 << 7) | (1 << 2);                                                        //
  TIM7->DIER |= (1 << 0);                                                        //使能中断
  TIM7->SR &= ~(1 << 0);                                                        //清楚中断标志位
  TIM7->CR1 |= (1 << 0);                                                        //开始计数
}
分享才可以产生世界.....
回复 支持 反对

使用道具 举报

243

主题

1706

帖子

6151

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
6151
12#
admin 发表于 2014-6-24 21:11:42 | 只看该作者
MrYan 发表于 2014-6-24 20:56
我百度了一下,中断嵌套就是中断的两个方式,抢占式优先级和响应优先级,这两个我都设置了....我没有把 ...

那应该没有问题哦,TIM7->SR &= ~(1 << 0)最好放到中断里清除
回复 支持 反对

使用道具 举报

4

主题

56

帖子

301

积分

版主

分享的世界

Rank: 7Rank: 7Rank: 7

积分
301
QQ
13#
 楼主| MrYan 发表于 2014-6-24 22:08:31 | 只看该作者
admin 发表于 2014-6-24 21:11
那应该没有问题哦,TIM7->SR &= ~(1

这就蛋疼了..........难道工具的问题???可是连us级都可以检测的非常清楚啊.....郁闷啊....
分享才可以产生世界.....
回复 支持 反对

使用道具 举报

Archiver|手机版|小黑屋|Comsenz Inc.   

GMT+8, 2024-4-19 22:21 , Processed in 0.133557 second(s), 29 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

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