OpenEdv-开源电子网

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

TIM5无法进入中断

[复制链接]

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
发表于 2014-11-20 16:59:14 | 显示全部楼层 |阅读模式
5金钱
写了一个简单的跑马灯程序,结果让我很无语,搞了两天了也不知道什么原因。只能求助了。
我想用TIM5进行延时,结果程序老是死在while(!(TIM5->SR & 0x00000001));里面。
[mw_shl_code=c,true]/* * File Name: delay.c * Description:延时文件。选择Timer5为基准,定义了以us,ms为单位的延时函数 * Author:wlw * Date:2014-11-17 15:03:57 */ #include "delay.h" #include "sys.h" #include "system_stm32f10x.h" /* * Function name:delay_init * Description:初始化时钟,选择Timer5,向下计数模式,开启时钟中断 * Parameter:none * Return:none */ void delay_init(void) { RCC->APB1ENR |= 1<<3;//开启TIM5时钟 TIM5->DIER |= 0x00000001;//允许更新中断 TIM5->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0) NVIC_configuration(1,3,TIM5_IRQn,2); } /* * Function name:delay_us * Description:us级延时函数。延时时间最大为65535us * Parameter: @time_us -要延时的时间 * Return:none */ void delay_us(u16 time_us) { TIM5->SC = 71;//TIM5的时钟源是APB1时钟2倍频,进行71分频后,TIM5时钟频率为1MHz TIM5->ARR = time_us;//加载计数值 TIM5->CR1 |= 0x00000011;//打开计数器,向下计数模式 while(!(TIM5->SR & 0x00000001)); TIM5->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0) TIM5->CR1 &= 0xFFFFFFFE;//关闭计数器 } /* * Function name: * Brief:ms级延时函数,延时最大时间为6553ms * Parameter: @time_ms -要延时的时间 * Return:none */ void delay_ms(u16 time_ms) { TIM5->SC = 7199;//TIM5的时钟源是APB1时钟2倍频,进行71分频后,TIM5时钟频率为10KHz TIM5->ARR = time_ms*10;//加载计数值 TIM5->CR1 |= 0x00000011;//打开计数器,向下计数模式 while(!(TIM5->SR & 0x00000001)); TIM5->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0) TIM5->CR1 &= 0xFFFFFFFE;//关闭计数器 } [/mw_shl_code]

MDK project.rar

84.81 KB, 下载次数: 153

最佳答案

查看完整内容[请看2#楼]

已解决!时钟配置有些问题!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-20 16:59:15 | 显示全部楼层
已解决!时钟配置有些问题!
回复

使用道具 举报

60

主题

225

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
483
金钱
483
注册时间
2013-7-27
在线时间
4 小时
发表于 2014-11-20 17:17:58 | 显示全部楼层
楼主,建议用库函数操作
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-20 17:22:00 | 显示全部楼层
回复【2楼】sara9999:
---------------------------------
库函数确实比较方便,也比较规范,只是我觉得学习的时候用寄存器了解的更清楚些,以后再用库函数也知道他们做了些什么。
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2014-11-20 19:34:36 | 显示全部楼层
你先用原子的好使的代码来做,然后再进行改动,最好仿真看下哪个寄存器出了问题。
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复

使用道具 举报

0

主题

14

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2014-11-11
在线时间
0 小时
发表于 2014-11-20 21:30:24 | 显示全部楼层
没用过寄存器,实在不行,用滴答定时器吧!
回复

使用道具 举报

3

主题

2170

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5782
金钱
5782
注册时间
2013-11-22
在线时间
1212 小时
发表于 2014-11-20 22:41:52 | 显示全部楼层
你开启了更新中断 
中断函数写了么?
或者把更新中断去掉
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-11-20 23:10:51 | 显示全部楼层
楼主,什么开发板?确定有TIM5?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-21 09:07:44 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
f103RCT6,有的!
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-21 09:13:46 | 显示全部楼层
回复【6楼】lycreturn:
---------------------------------
我没写中断服务函数,因为用不到。关闭了更新中断,怎么产生中断?
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-21 09:17:30 | 显示全部楼层
回复【5楼】立白洗衣粉:
---------------------------------
滴答定时器确实是不错的选择,但是原子已经做了,如果再用就陷入了原子的思维,我恐怕离开了原子的例程,以后就不知道写程序怎么下手了。所以还是先随便搞搞,这样遇到了各种奇葩问题,就知道改进方向了,以后再遇到也不会那么紧张了。
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-21 09:19:22 | 显示全部楼层
回复【4楼】ST-FAE-SALE:
---------------------------------
看配置好像也没什么不对的哦!嗯,我用原子的定时器中断例程的时候是可以进入中断的。
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2014-11-21 10:47:43 | 显示全部楼层
仿真看寄存器了吗?计数器正常工作了吗?
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-21 10:58:33 | 显示全部楼层
回复【12楼】ST-FAE-SALE:
---------------------------------
计数器没有工作,不知道什么原因
回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-21 11:03:57 | 显示全部楼层
[mw_shl_code=c,true]改成TIM3后,计数器可以工作了,SR也置位了,if(TIM3->SR & 0x01)竟然还是过不去,我吐血了!我写的真的是C语言吗?[/mw_shl_code] [mw_shl_code=c,true]/* * Function name:delay_init * Description:初始化时钟,选择Timer5,向下计数模式,开启时钟中断 * Parameter:none * Return:none */ void delay_init(void) { RCC->APB1ENR |= 1<<1;//开启TIM5时钟 TIM3->CR1 &= 0xFFFFFF00;//清除CEN,UDIS,URS,OPM,DIR,CMS,ARPE位。 TIM3->CR1 |= 1<<4;//重新设置DIR位,向下计数模式 TIM3->DIER |= 0x00000001;//允许更新中断 TIM3->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0) NVIC_configuration(1,3,TIM3_IRQn,2); } /* * Function name: * Brief:ms级延时函数,延时最大时间为6553ms * Parameter: @time_ms -要延时的时间 * Return:none */ void delay_ms(u16 time_ms) { TIM3->SC = 7199;//TIM5的时钟源是APB1时钟2倍频,进行71分频后,TIM5时钟频率为10KHz TIM3->ARR = time_ms*10;//加载计数值 TIM3->CR1 |= 0x00000001;//打开计数器,向下计数模式 while(1) { if(TIM3->SR & 0x01) { TIM3->SR &= 0xFFFFFFFE;//清除更新中断标记(UIF=0) TIM3->CR1 &= 0xFFFFFFFE;//关闭计数器 return; } } } [/mw_shl_code]


回复

使用道具 举报

7

主题

63

帖子

0

精华

初级会员

Rank: 2

积分
142
金钱
142
注册时间
2013-1-23
在线时间
4 小时
 楼主| 发表于 2014-11-21 11:40:39 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥,经过进一步的验证发现,将TIM5直接换成TIM2后可以正确运行,即只更改
RCC->APB1ENR |= 1<<0;//开启TIM2时钟
剩下的配置中将TIM5更为TIM2即可。
这种情况是什么原因引起的.
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2014-11-21 21:59:01 | 显示全部楼层
ok,解决就ok
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-28 19:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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