OpenEdv-开源电子网

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

STM32F103C8T6的TIM4为什么不工作呢?

[复制链接]

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2012-9-20
在线时间
19 小时
发表于 2013-7-29 13:28:02 | 显示全部楼层 |阅读模式
问题如题啊,TIM3库代码,用在STM32F103C8上,TIM2,TIM3都好用,改为TIM4就出问题了,进入不了中断,求解呢?
代码如下:
void TIM3_NVIC_Configuration(void)
{
    NVIC_InitTypeDef NVIC_InitStructure;     
    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                                                                  NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn;          
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;        
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
}
void TIM3_Configuration(unsigned char timedata)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , ENABLE);
    TIM_DeInit(TIM3);
TIM_TimeBaseStructure.TIM_Period=10000/timedata;//(10000-timedata);//5*timedata;                                                 /* 自动重装载寄存器周期的值(计数值)介于0x0000到0xffff之间 */
    /* 累计 TIM_Period个频率后产生一个更新或者中断 */
    TIM_TimeBaseStructure.TIM_Prescaler= (72 - 1);                                /* 时钟预分频数 72M/72 介于0x0000到0xffff之间 */
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;                 /* 采样分频 */
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;         /* 向上计数模式 */
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    TIM_ClearFlag(TIM3, TIM_FLAG_Update);                                                /* 清除溢出中断标志 */
    TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE);
    TIM_Cmd(TIM3, ENABLE);                                                                                /* 开启时钟 */   
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3 , DISABLE);                /*先关闭等待使用*/    
}
中断函数:
void TIM3_IRQHandler(void)
{        if ( TIM_GetITStatus(TIM3 , TIM_IT_Update) != RESET ) 
        {        
                TIM_ClearITPendingBit(TIM3 , TIM_FLAG_Update);    
                   tim3_factor++;
                GPIO_ResetBits(GPIOB,GPIO_Pin_0 |GPIO_Pin_1); 
        }
        if(tim3_factor==100)  tim3_factor=0;                                                                                }
Main中:
        TIM3_NVIC_Configuration();
        TIM3_Configuration(50);
        START_TIME3;
TIM2,TIM3都好用,改为TIM4就出问题了,TIM4不工作,求解~
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2012-9-20
在线时间
19 小时
 楼主| 发表于 2013-7-29 13:38:01 | 显示全部楼层
用原子哥的改成如下TIM4也不行,郁闷啊~~~
void Timerx_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能

TIM_TimeBaseStructure.TIM_Period = 5000; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值  计数到5000为500ms
TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); //设置用来作为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_ITConfig(  //使能或者失能指定的TIM中断
TIM4, //TIM2
TIM_IT_Update  |  //TIM 中断源
TIM_IT_Trigger,   //TIM 触发中断源 
ENABLE  //使能
);
NVIC_InitStructure.NVIC_IRQChannel = TIM4_IRQn;  //TIM3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;  //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;  //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure);  //根据NVIC_InitStruct中指定的参数初始化外设NVIC寄存器

TIM_Cmd(TIM4, ENABLE);  //使能TIMx外设
 
}
回复 支持 反对

使用道具 举报

20

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2012-12-22
在线时间
24 小时
发表于 2013-7-29 14:15:41 | 显示全部楼层
会不会是低级错误 中断入口没改
TIM4_IRQHandler
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2012-9-20
在线时间
19 小时
 楼主| 发表于 2013-7-29 14:41:30 | 显示全部楼层
回复【3楼】whjambo:
---------------------------------
改了
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-29 16:58:55 | 显示全部楼层
回复【4楼】eternity86:
---------------------------------
那可以仿真看下寄存器状态了.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2012-9-20
在线时间
19 小时
 楼主| 发表于 2013-7-29 23:54:58 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
哦,谢谢原子哥提醒!
回复 支持 反对

使用道具 举报

20

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2012-12-22
在线时间
24 小时
发表于 2013-8-2 09:32:07 | 显示全部楼层
还有一个可能就是你的初始化程序是有了,但在主程序里面并没有加进去,我也常犯这样的低级错误,看看有没这可能
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2012-9-20
在线时间
19 小时
 楼主| 发表于 2013-8-15 02:40:09 | 显示全部楼层
回复【7楼】whjambo:
-------------------------------
姐姐,你他头像可以换个不,太吓人了
那个定时器3我不用了,用一个高级定时器代替
回复 支持 反对

使用道具 举报

20

主题

100

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
297
金钱
297
注册时间
2012-12-22
在线时间
24 小时
发表于 2013-8-15 09:02:21 | 显示全部楼层
回复【8楼】eternity86:
---------------------------------
这个。。。你不觉得这个头像很萌吗。。。
回复 支持 反对

使用道具 举报

4

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
179
金钱
179
注册时间
2012-9-20
在线时间
19 小时
 楼主| 发表于 2013-8-16 23:13:59 | 显示全部楼层
回复【9楼】whjambo:
---------------------------------
好吓人!
回复 支持 反对

使用道具 举报

2

主题

7

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2016-4-27
在线时间
4 小时
发表于 2016-6-1 10:41:23 | 显示全部楼层
我想问下你是怎么解决的,我现在234定时器都可以用,换成5就不行了
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-7
在线时间
1 小时
发表于 2016-7-7 11:37:58 | 显示全部楼层
您好  问题解决了吗?  我也遇到和您一样的问题了呢,方便告诉一下怎么解决的吗?在线等
回复 支持 反对

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
发表于 2016-7-7 13:18:01 | 显示全部楼层
zhd 发表于 2016-7-7 11:37
您好  问题解决了吗?  我也遇到和您一样的问题了呢,方便告诉一下怎么解决的吗?在线等

可能出问题的地方再仔细看看,有没有漏改的地方,.h文件里改没改,是否忘记初始化
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-7
在线时间
1 小时
发表于 2016-7-7 13:42:00 | 显示全部楼层
迪拜大呲花 发表于 2016-7-7 13:18
可能出问题的地方再仔细看看,有没有漏改的地方,.h文件里改没改,是否忘记初始化

哪个  .h 啊?  时钟,中断,timer参数都配置,就和time2、timer3配置一模一样,但是timer4就是不行
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-7
在线时间
1 小时
发表于 2016-7-7 13:42:52 | 显示全部楼层
zhd 发表于 2016-7-7 13:42
哪个  .h 啊?  时钟,中断,timer参数都配置,就和time2、timer3配置一模一样,但是timer4就是不行

您当时是怎么解决的啊?
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-7
在线时间
1 小时
发表于 2016-7-7 15:00:28 | 显示全部楼层
zhd 发表于 2016-7-7 13:42
您当时是怎么解决的啊?

找到问题了,谢谢!!!!
回复 支持 反对

使用道具 举报

6

主题

94

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1581
金钱
1581
注册时间
2016-7-2
在线时间
277 小时
发表于 2016-7-7 15:12:58 | 显示全部楼层
zhd 发表于 2016-7-7 15:00
找到问题了,谢谢!!!!

问题出在哪儿~
回复 支持 反对

使用道具 举报

0

主题

5

帖子

0

精华

新手入门

积分
12
金钱
12
注册时间
2016-7-7
在线时间
1 小时
发表于 2016-7-7 17:27:39 | 显示全部楼层

NVIC_Init(&NVIC_InitStructure);       写错位置了  我开了好多个中断,都写一起了,然后TIM4那个的NVIC_Init(&NVIC_InitStructure);  这句写到别的后边了
回复 支持 反对

使用道具 举报

25

主题

138

帖子

0

精华

高级会员

Rank: 4

积分
612
金钱
612
注册时间
2016-6-7
在线时间
59 小时
发表于 2016-9-13 09:40:04 | 显示全部楼层
zhd 发表于 2016-7-7 17:27
NVIC_Init(&NVIC_InitStructure);       写错位置了  我开了好多个中断,都写一起了,然后TIM4那个的NVIC ...

据说中断还是越少用越好啊
回复 支持 反对

使用道具 举报

0

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2016-11-29
在线时间
31 小时
发表于 2017-2-6 09:37:13 | 显示全部楼层
zhd 发表于 2016-7-7 17:27
NVIC_Init(&NVIC_InitStructure);       写错位置了  我开了好多个中断,都写一起了,然后TIM4那个的NVIC ...

我现在遇到同样问题,NVIC_Init(&NVIC_InitStructure);  卡死,应该写到哪里?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 19:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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