OpenEdv-开源电子网

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

定时器一打开。程序就会跑飞。为什么啊??

[复制链接]

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-23
在线时间
0 小时
发表于 2015-4-28 17:53:13 | 显示全部楼层 |阅读模式
5金钱
如果我程序加速TIM_Cmd(TIM1, ENABLE);这个函数。。调试的时候程序就会出错。。。暂停下来就会停在


而且R14(LR)寄存器也变成0XFFFFFFF9了
但如果屏蔽掉TIM_Cmd就可以正常运行了

最佳答案

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

找到错误了。。。因为我的定时器中断函数写错名字了。写成void TIM1_UP_IRQnHandler(void)了。。。多打了个n。。 程序没找到函数入口。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-23
在线时间
0 小时
 楼主| 发表于 2015-4-28 17:53:14 | 显示全部楼层
找到错误了。。。因为我的定时器中断函数写错名字了。写成void TIM1_UP_IRQnHandler(void)了。。。多打了个n。。
程序没找到函数入口。
回复

使用道具 举报

109

主题

1606

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2222
金钱
2222
注册时间
2011-12-15
在线时间
37 小时
发表于 2015-4-28 18:00:31 | 显示全部楼层
这个定时器难道配置错误了吗?
专业制作STM32 物联网通信模块板,模块交流群:369840039。
回复

使用道具 举报

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-23
在线时间
0 小时
 楼主| 发表于 2015-4-28 18:07:31 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
memset(&TIM_OCInitStructure,0,sizeof(TIM_OCInitStructure));
memset(&TIM_BaseInitStructure,0,sizeof(TIM_BaseInitStructure));

/*外设使能*/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);

TIM_DeInit(TIM1);

//中断NVIC设置:允许中断,设置优先级
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;     
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority =1;   
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;          
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;             
NVIC_Init(&NVIC_InitStructure);

//预分频设置,以及模式设置
TIM_BaseInitStructure.TIM_Period =1000; //周期设定,电机启动时会修改

//设定定时器预分频,
TIM_BaseInitStructure.TIM_Prescaler =CPU_FREQUENCE/F2TIME_PARA-1; 

  //PWM模式的设置
TIM_BaseInitStructure.TIM_ClockDivision = 0;
TIM_BaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
TIM_BaseInitStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM1, &TIM_BaseInitStructure);



TIM_OCInitStructure.TIM_OCMode       = TIM_OCMode_PWM1;       //PWM2模式
TIM_OCInitStructure.TIM_OutputState  = TIM_OutputState_Enable;  //信号输出到对应的输出引脚
TIM_OCInitStructure.TIM_OutputNState = TIM_OutputNState_Enable; //互补信号输出到对应的输出引脚
TIM_OCInitStructure.TIM_Pulse =50;   //脉冲宽度
TIM_OCInitStructure.TIM_OCPolarity   = TIM_OCPolarity_Low;   //互补输出高电平有效
TIM_OCInitStructure.TIM_OCNPolarity  = TIM_OCNPolarity_High;    //互补输出高电平有效
TIM_OCInitStructure.TIM_OCIdleState  = TIM_OCIdleState_Reset;  //输出空闲状态为1
TIM_OCInitStructure.TIM_OCNIdleState = TIM_OCIdleState_Reset;   //互补输出空闲状态为0
TIM_OC1Init(TIM1,&TIM_OCInitStructure);   //OC1通道初始化

TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM1, ENABLE);


//清中断,以免一启用中断后立即产生中断
TIM_ClearFlag(TIM1, TIM_FLAG_Update);

TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);//使能TIM1中断源

TIM_Cmd(TIM1, DISABLE);
TIM_CtrlPWMOutputs(TIM1,ENABLE); //使能PWM输出
回复

使用道具 举报

13

主题

31

帖子

0

精华

初级会员

Rank: 2

积分
104
金钱
104
注册时间
2014-12-23
在线时间
0 小时
 楼主| 发表于 2015-4-28 18:09:28 | 显示全部楼层
回复【2楼】ST-FAE-SALE:
---------------------------------
在其他地方有改变定时器的周期和占空比。 就这么多设置。。实在不知道哪里错了
TIM1->ARR =period;  //设置周期
TIM1->CCR1 =on;       //设置占空比
回复

使用道具 举报

5

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
61
金钱
61
注册时间
2015-5-12
在线时间
0 小时
发表于 2015-8-3 20:59:51 | 显示全部楼层
楼主还在吗?这句有什么用?:memset(&TIM_OCInitStructure,0,sizeof(TIM_OCInitStructure));
回复

使用道具 举报

15

主题

95

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
267
金钱
267
注册时间
2012-11-5
在线时间
11 小时
发表于 2015-8-4 10:32:54 | 显示全部楼层
回复【6楼】xiaoyuge:
---------------------------------
memset是将TIM_OCInitStructure成员的值都设置成0的意思吧
学习之路漫长而修远......
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-18 22:42

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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