OpenEdv-开源电子网

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

在FreeRTOS中开启硬件中断为什么会死机?

[复制链接]

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
发表于 2017-11-1 15:35:40 | 显示全部楼层 |阅读模式
1金钱
我在FreeRTOS中开启TIM3,系统会跑进Harddfault里,关于FreeRTOS的硬件定时器有什么需要特别注意的吗?

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

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-11-1 15:38:51 | 显示全部楼层
检查你的中断服务函数
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 15:46:11 | 显示全部楼层
zuozhongkai 发表于 2017-11-1 15:38
检查你的中断服务函数

我只是开启TIM3,还没写中断服务函数(服务函数为空),我用的是HAL库,通过STM32CubeMX生成的FreeRTOS。
后来,我又尝试打开了TIM9、TIM6,不死机了,但是不管是TIM6还是TIM9,中断都进不去;
回复

使用道具 举报

0

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 2017-11-1 15:48:05 | 显示全部楼层
LoserMan 发表于 2017-11-1 15:46
我只是开启TIM3,还没写中断服务函数(服务函数为空),我用的是HAL库,通过STM32CubeMX生成的FreeRTOS。 ...

中断优先级调低
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 15:50:43 | 显示全部楼层
这是STM32CubeMX中FreeRTOS的内核配置,软件定时器配置,还有TIM3的配置
捕获.PNG
捕获2.PNG
捕获3.PNG
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 15:52:00 | 显示全部楼层
FreeRTOS的关于中断管理的配置
捕获4.PNG
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 16:00:46 | 显示全部楼层
jkd405 发表于 2017-11-1 15:48
中断优先级调低

定时器优先级调低?调到15?
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-11-1 16:32:42 | 显示全部楼层
LoserMan 发表于 2017-11-1 15:46
我只是开启TIM3,还没写中断服务函数(服务函数为空),我用的是HAL库,通过STM32CubeMX生成的FreeRTOS。 ...

你没写中断服务函数?!!那不出问题才怪了,定时器一旦开始每次中断都会去调用中断服务函数,你没写的话肯定会出问题!中断服务函数一定要写,而且中断服务函数里面要清除中断标志位,中断服务函数中其它的内容你不写都可以!
开往春天的手扶拖拉机
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 16:43:18 | 显示全部楼层
zuozhongkai 发表于 2017-11-1 16:32
你没写中断服务函数?!!那不出问题才怪了,定时器一旦开始每次中断都会去调用中断服务函数,你没写的话 ...

我不是用标准库3.5,我是用HAL库,不存在清除中断标志位的问题啊
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-11-1 16:47:58 | 显示全部楼层
LoserMan 发表于 2017-11-1 16:43
我不是用标准库3.5,我是用HAL库,不存在清除中断标志位的问题啊

你检查一下你的中断服务函数里面怎么写的,还有HAL库也要清除中断标志位,只是是别的函数给你干了
开往春天的手扶拖拉机
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 16:55:25 | 显示全部楼层
zuozhongkai 发表于 2017-11-1 16:47
你检查一下你的中断服务函数里面怎么写的,还有HAL库也要清除中断标志位,只是是别的函数给你干了

哥,HAL定时器服务函数不用的。。。

//定时器中断服务函数调用
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
        if(htim == ( &TIM3_Handler ))
        {
                //FreeRTOS Timer
                FreeRTOSRunTimeTicks++;
        }
}
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-11-1 17:06:43 | 显示全部楼层
LoserMan 发表于 2017-11-1 16:55
哥,HAL定时器服务函数不用的。。。

//定时器中断服务函数调用

哥,相信我,要的!都给你说了,你不用写是因为别的函数给你做了!

U$)ABKM`20HPL)TSWN9E_]H.png
开往春天的手扶拖拉机
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 17:29:46 | 显示全部楼层
zuozhongkai 发表于 2017-11-1 17:06
哥,相信我,要的!都给你说了,你不用写是因为别的函数给你做了!

用STM32CubeMX生成代码,HAL_TIM_IRQHandler()会自动生成在stm32f4xx_it.c中,无需用户去写,所以无需关心,这个会自动生成的,只需要在回调函数中添加自己的代码就可以了,但是我不添加代码也可以,现在的问题,就是我开启TIM3会导致系统死机,开启TIM6,TIM9,进不来中断
回复

使用道具 举报

1

主题

9

帖子

0

精华

新手上路

积分
26
金钱
26
注册时间
2017-11-1
在线时间
4 小时
 楼主| 发表于 2017-11-1 17:36:15 | 显示全部楼层
zuozhongkai 发表于 2017-11-1 17:06
哥,相信我,要的!都给你说了,你不用写是因为别的函数给你做了!

例如,自动生成的TIM4,在stm32f4xx_it.c中代码如下,并不是我写的,自动生成的
捕获.PNG
回复

使用道具 举报

0

主题

192

帖子

0

精华

高级会员

Rank: 4

积分
582
金钱
582
注册时间
2017-6-2
在线时间
192 小时
发表于 2017-11-2 10:51:13 | 显示全部楼层
LoserMan 发表于 2017-11-1 16:00
定时器优先级调低?调到15?

我之前用标准库碰到过这个问题,最后发现就是因为copy的原来不挂系统的初始化代码,优先级太高了,对比例程发现人家优先级低,具体调多少建议你自己测试,我当时是在最简单的例程里面试,只有三个简单任务,中断优先级设置到6可以正常工作。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-5-19 01:19

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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