OpenEdv-开源电子网

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

TIM1定时器进不了中断?

[复制链接]

1

主题

2

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-5-22
在线时间
1 小时
发表于 2013-5-23 14:41:47 | 显示全部楼层 |阅读模式

 我用TIM1进不了中断,麻烦大家帮我看看

#include "stm32f10x.h"
void TIM1_IRQHandler(void);
void TIM1_Config(void);
void LED_GPIO_Config(void);

int main(void)
{   
 SystemInit();
 LED_GPIO_Config();
 TIM1_Config();
 while(1)
 {
 }
}
void LED_GPIO_Config(void)

 GPIO_InitTypeDef  GPIO_InitStructure; 
 /*开启GPIO的外设时钟*/
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE); 
 /*选择要用的GPIO引脚*/   
 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; 
 /*设置引脚模式*/    
 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;   
 /*设置引脚速度*/
 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 /*调用库函数,初始化GPIO*/
 GPIO_Init(GPIOD, &GPIO_InitStructure);

 /*GPIO脚输出高低电平*/
 GPIO_SetBits(GPIOD,GPIO_Pin_3);             
 
}
void TIM1_Config(void)
{
 TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
 NVIC_InitTypeDef         NVIC_InitStructure;
 /*使能TIM2时钟*/
 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);            //选择组1
 NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;            //TIM2中断
 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寄存器

 /*自动重装载值5000*/
 TIM_TimeBaseStructure.TIM_Period = 5000;
 /*预分频值,+1为分频系数*/
 TIM_TimeBaseStructure.TIM_Prescaler =(7200-1); 
 TIM_TimeBaseStructure.TIM_ClockDivision = 0;
 /*TIM向上计数模式*/
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
 /*根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位*/ 
 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);
  /*使能TIM2中断源*/
 TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
 /*使能TIMx外设*/
 TIM_Cmd(TIM1, ENABLE); 
         
}
void TIM1_IRQHandler(void)
{
 if ( TIM_GetITStatus(TIM1 , TIM_IT_Update) != RESET ) //是否发生中断
 { 
  TIM_ClearITPendingBit(TIM1, TIM_FLAG_Update);    //清除中断待处理位
    GPIO_WriteBit(GPIOD, GPIO_Pin_3, 1-(BitAction)GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_3));
 }    
}

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

使用道具 举报

1

主题

2

帖子

0

精华

新手上路

积分
29
金钱
29
注册时间
2013-5-22
在线时间
1 小时
 楼主| 发表于 2013-5-23 14:58:10 | 显示全部楼层
刚刚找到原因了,原来是中断的入口函数名错了,应该是 TIM1_UP_IRQHandler(void),自己顶一个
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-23 18:08:47 | 显示全部楼层
回复【2楼】liang678780:
---------------------------------
谢谢分享
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
48
金钱
48
注册时间
2015-2-12
在线时间
3 小时
发表于 2015-3-23 17:11:22 | 显示全部楼层
谢谢楼主分享,我今天也反了同样的错误。
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-4-30 20:30:17 | 显示全部楼层
回复【3楼】正点原子:
---------------------------------
我在用中心对其模式递增递减计数 想要进行在递减计数时候进行中断溢出  请问原子哥 我应该选什么入口函数  谢谢
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-4-30 22:42:10 | 显示全部楼层
回复【5楼】wangky2014:
---------------------------------
用带UP的那个
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-5-3 09:44:58 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥 我用中心对齐模式  进行计数  在84MHZ  5分频后为16.8MHZ  自动重载值设置为1000  显示的技术频率为16.8KHZ 为什么不是8.4KHZ  不是先计数到1000而后从1000计数到1 进行中断溢出吗?  谢谢 原子哥
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-5 00:40:54 | 显示全部楼层
回复【7楼】wangky2014:
---------------------------------
你看看模式是不是没设置对了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-5-5 11:08:25 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
 TIM_TimeBaseStructure.TIM_Period = arr; //1000
TIM_TimeBaseStructure.TIM_Prescaler=psc;  //5
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_CenterAligned3; //
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; 
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
这个模式没有错吧
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-5-5 11:21:27 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
使用的中断是按照你说的update NVIC_InitStructure.NVIC_IRQChannel= TIM1_UP_TIM10_IRQn; 
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x03; //
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x02; //
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-5 23:24:41 | 显示全部楼层
回复【9楼】wangky2014:
---------------------------------
饿,貌似对的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-5-6 10:42:15 | 显示全部楼层
void TIM1_UP_TIM10_IRQHandler(void)
{
if((TIM_GetITStatus(TIM1,TIM_IT_Update)==SET)&&((TIM1->CR1 & 0x10) !=0)) //
{
TIM_SetCompare1(TIM1,Ta1);
TIM_SetCompare2(TIM1,Tb1);
TIM_SetCompare3(TIM1,Tc1);

LED1=!LED1;

}
TIM_ClearITPendingBit(TIM1,TIM_IT_Update);  //
}这是我进中断的程序  这里加了计数的方向 和中断更新 现在LED1是8.4KHZ  但是输出的波形还是 16.8KHZ  是不是TIM_IT_Update中我有什么没有关闭掉
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-5-13 10:22:23 | 显示全部楼层
回复【11楼】正点原子:
---------------------------------
void TIM1_UP_TIM10_IRQHandler(void) 

if((TIM_GetITStatus(TIM1,TIM_IT_Update)==SET)&&((TIM1->CR1 & 0x10) !=0)) // 

TIM_SetCompare1(TIM1,Ta1); 
TIM_SetCompare2(TIM1,Tb1); 
TIM_SetCompare3(TIM1,Tc1); 

LED1=!LED1; 


TIM_ClearITPendingBit(TIM1,TIM_IT_Update);  // 
}这是我进中断的程序  这里加了计数的方向 和中断更新 现在LED1是8.4KHZ  但是输出的波形还是 16.8KHZ  是不是TIM_IT_Update中我有什么没有关闭掉
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-13 23:37:19 | 显示全部楼层
回复【13楼】wangky2014:
---------------------------------
不是这个问题,应该是你分频没搞好
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-5-15 10:06:10 | 显示全部楼层
回复【14楼】正点原子:
------------------------------
TIM_TimeBaseStructure.TIM_Period = arr; //1000   
这个设置的是定时器的周期 但这个arr总是和计数器count的值相同 也就是count总是计数到1000再开始向下计数  怎么设置让计数器计数到500就开始向下计数        为什么设置了TIM_Period就同时设置了计数器count的上限
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-5-15 23:33:49 | 显示全部楼层
回复【15楼】wangky2014:
---------------------------------
CNT最大就计数到ARR
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

0

主题

11

帖子

0

精华

新手上路

积分
33
金钱
33
注册时间
2014-12-5
在线时间
0 小时
发表于 2015-5-16 08:51:47 | 显示全部楼层
回复【16楼】正点原子:
---------------------------------
有没有可能 在中断更新的时候 UEV   在进行软件仿真的时候  我发现DIR变化频率是UIF频率的好几倍   分析结果就是 几个三角波的周期UIF才变化一次  这个就好难理解
回复 支持 反对

使用道具 举报

6

主题

26

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
275
金钱
275
注册时间
2014-1-27
在线时间
75 小时
发表于 2016-1-10 18:38:28 | 显示全部楼层
建议在TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); 之前加个TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;不然定时不准确
回复 支持 反对

使用道具 举报

1

主题

6

帖子

0

精华

新手上路

积分
25
金钱
25
注册时间
2018-4-11
在线时间
1 小时
发表于 2018-4-11 10:41:44 | 显示全部楼层
liang678780 发表于 2013-5-23 14:58
**** 作者被禁止或删除 内容自动屏蔽 ****

我用的TIM3,也进不了中断,是怎么回事啊
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-17 05:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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