OpenEdv-开源电子网

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

定时器中断函数内不能调用可以返回参数的函数

[复制链接]

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-8-5
在线时间
23 小时
发表于 2016-12-1 21:55:53 | 显示全部楼层 |阅读模式
1金钱
最近在用STM32F103R8T6做一个无刷电机的驱动程序,其中用TIM1高级定时器做了一个定时中断,方便做控制。程序的配置上,定时器1工作正常,如果只是调用普通函数是没有问题的,但是在调用有参数返回的函数的时候,中断函数并没有退出。
程序大概如下:

void TIM1_UP_IRQHandler(void)
{
      if(TIM_GetITStatus(TIM1 , TIM_IT_Update) == SET)
      {
              TIM_ClearITPendingBit(TIM1 , TIM_IT_Update);
              LED_On_Only(LED1);                                            //程序工作正常
              //angle = Get_Angle();                                          //加上这句的时候程序就死中断里面没有出来
      }
}

最佳答案

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

说明你这个函数执行时间太长了。。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-12-1 21:55:54 | 显示全部楼层
说明你这个函数执行时间太长了。。
回复

使用道具 举报

7

主题

185

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2729
金钱
2729
注册时间
2015-12-27
在线时间
469 小时
发表于 2016-12-1 22:00:54 | 显示全部楼层
代码哪边写的有问题吧,你看TIM_GetITStatus(TIM1 , TIM_IT_Update)不也是一个有返回参数的函数吗?
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-8-5
在线时间
23 小时
 楼主| 发表于 2016-12-1 22:44:41 | 显示全部楼层
钩月黄昏 发表于 2016-12-1 22:00
代码哪边写的有问题吧,你看TIM_GetITStatus(TIM1 , TIM_IT_Update)不也是一个有返回参数的函数吗?

可是要调用的函数是在正常工作的,需要调用的这个函数的功能是通过stm32的SPI访问磁编码器获得角度值。
目前这个函数是放在主函数中进行,返回的参数定义为全局变量,中断函数是通过这样的方式访问这些参数的。但是这样的方式采集的值并不是实际值(采集到编码器值的时候电机早就转过去很多了),做位置环控制就比较麻烦
回复

使用道具 举报

1

主题

43

帖子

0

精华

初级会员

Rank: 2

积分
152
金钱
152
注册时间
2015-10-8
在线时间
32 小时
发表于 2016-12-2 01:26:51 | 显示全部楼层
记住 带宽,这个 重要概念.  
如果中断频率1KHZ,   而你的 Get_Angle();  运行一遍  却要2mS, 你说 是不是会出问题?
另外 ,很有可能 你的Get_Angle();   函数 还有另外的问题.   
Get_Angle();  需要这么高的带宽????   
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-8-5
在线时间
23 小时
 楼主| 发表于 2016-12-5 10:06:07 | 显示全部楼层
lavion 发表于 2016-12-2 01:26
记住 带宽,这个 重要概念.  
如果中断频率1KHZ,   而你的 Get_Angle();  运行一遍  却要2mS, 你说 是不是 ...

磁编码器SPI通讯方式的限制,要询问两次才能得到上次询问的应答值。我尝试修改一下SPI时钟
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-12-5 10:20:17 | 显示全部楼层
用这样阻塞的方式是不行的,spi出错电机堵转怎么办
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
160
金钱
160
注册时间
2016-8-5
在线时间
23 小时
 楼主| 发表于 2016-12-5 11:30:29 | 显示全部楼层
xyl210xyl 发表于 2016-12-5 10:20
用这样阻塞的方式是不行的,spi出错电机堵转怎么办

阻塞的方式?请详解
回复

使用道具 举报

15

主题

406

帖子

0

精华

高级会员

Rank: 4

积分
795
金钱
795
注册时间
2015-3-26
在线时间
151 小时
发表于 2016-12-6 15:00:03 | 显示全部楼层
黄阿厉 发表于 2016-12-5 11:30
阻塞的方式?请详解

阻塞相对的是中断,这么说你应该理解了,你这种环境需要硬实时,软件运算超时会影响电机运转
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-26 00:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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