OpenEdv-开源电子网

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

大家帮我看看吧!两天了是在搞不懂,本来想TIM1_Handler_Init(9,7199);//定时1ms进入中断服务程序

[复制链接]

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
发表于 2015-5-21 14:09:03 | 显示全部楼层 |阅读模式
5金钱
大家帮我看看吧!两天了是在搞不懂,本来想TIM1_Handler_Init(9,7199);//定时1ms进入中断服务程序
但是实际时间太长,后来改成TIM1_Handler_Init(9,359),结果软仿真1.1ms进中断,下载后实际是7ms进一次
彻底混乱了



 

void TIM1_Handler_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//自定义结构体名,方便初始化定时器
 NVIC_InitTypeDef NVIC_InitStructure;//自定义结构体名,方便中断优先级NVIC初始化

 RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); ////TIME1时钟使能
 
 //定时器TIM3初始化
 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值,重载周期 
 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:其实就是数字滤波器
 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
 TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
 
 
TIM1_Handler_Init(9,359);//定时进入中断服务程序,调用站立程序




TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断

 //中断优先级NVIC设置
 NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //
 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占优先级0级
 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //从优先级3级
 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
 NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器

 TIM_Cmd(TIM1, ENABLE);  //使能TIMx     
}
//定时器1中断服务程序,MDK里面规定好的函数名,直接对应中断向量表,
//条件满足时CPU直接按照向量表执行中断,无需人工调用该函数
void TIM1_UP_IRQHandler(void)   //TIM1中断服务函数



大家帮我看看吧!是在搞不懂,本来想TIM1_Handler_Init(9,7199);//定时1ms进入中断服务程序
但是实际时间太长,后来改成TIM1_Handler_Init(9,359),结果软仿真1.1ms进中断,下载后实际是7ms进一次
彻底混乱了

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

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2015-5-21 18:31:20 | 显示全部楼层
这是递归吗? = =。。在初始化里面初始化
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
 楼主| 发表于 2015-5-21 20:50:42 | 显示全部楼层
回复【2楼】Scy:
---------------------------你说什么递归??没有递归呀
回复

使用道具 举报

20

主题

232

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
335
金钱
335
注册时间
2013-6-1
在线时间
0 小时
发表于 2015-5-22 11:46:55 | 显示全部楼层
回复【3楼】lwhqbd:
---------------------------------
TIM1_Handler_Init,你里面调用了函数自身
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
 楼主| 发表于 2015-5-23 09:47:43 | 显示全部楼层
o!!!!!!!!!!!真是的,这个代码复制过来的,原子代码,一直以为不会错,所以从来没怀疑过啊
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
 楼主| 发表于 2015-5-23 10:07:22 | 显示全部楼层
void TIM1_Handler_Init(u16 arr,u16 psc)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//自定义结构体名,方便初始化定时器
NVIC_InitTypeDef NVIC_InitStructure;//自定义结构体名,方便中断优先级NVIC初始化

RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); ////TIME1时钟使能

//定时器TIM3初始化
TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值,重载周期
TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:其实就是数字滤波器
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
 
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断

//中断优先级NVIC设置
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;  //先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;  //从优先级3级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能
NVIC_Init(&NVIC_InitStructure);  //初始化NVIC寄存器

TIM_Cmd(TIM1, ENABLE);  //使能TIMx  
}
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
 楼主| 发表于 2015-5-23 10:07:53 | 显示全部楼层
TIM1_Handler_Init(9,59);//定时进入中断服务程序,调用站立程序
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
 楼主| 发表于 2015-5-23 10:08:33 | 显示全部楼层
现在是这样,大概能1ms进一次中断。还是不对啊
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
 楼主| 发表于 2015-5-23 10:46:22 | 显示全部楼层
哎  好麻烦 ,不过也不影响用。谢谢楼上的兄弟啊
回复

使用道具 举报

13

主题

60

帖子

0

精华

初级会员

Rank: 2

积分
173
金钱
173
注册时间
2015-3-4
在线时间
14 小时
 楼主| 发表于 2015-6-3 21:48:06 | 显示全部楼层
这个也搞明白了,中断函数调用了一个函数,把它拿到和中断函数一个C文件里就好了,不明所以
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 15:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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