OpenEdv-开源电子网

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

关于Systick进行延时的疑惑

[复制链接]

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-22
在线时间
21 小时
发表于 2017-3-31 20:14:29 | 显示全部楼层 |阅读模式
10金钱
本帖最后由 zhubeilife 于 2017-3-31 20:20 编辑

最近在通过Mini的板子学习HAL库,想着把原子429上delay等库移植过来,但是发现了一个问题一直没想明白。
首先我是使用CubeMx生成的系统配置,然后初始化时钟什么的都没问题。

因为CubeMX生成的是利用systick的中断来实现延时,原子的在没有os的情况下是没有利用中断的,所以我就把原来系统初始化中的与systick先关的代码都注释掉了:
[mw_shl_code=c,true]/* Use systick as time base source and configure 1ms tick (default clock after Reset is MSI) */
HAL_InitTick(TICK_INT_PRIORITY);[/mw_shl_code]
[mw_shl_code=c,true]/* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);[/mw_shl_code]
并且把中断服务cubemx生成的中断服务程序给注释掉了
[mw_shl_code=c,true]void SysTick_Handler(void)
{
  HAL_IncTick();
  HAL_SYSTICK_IRQHandler();
}[/mw_shl_code]

然后按原子的程序进行初始化,配置完成之后运行发现程序只要进入delay就会调到下面这段代码,即Default_Handler.
[mw_shl_code=c,true]/**
* @brief  This is the code that gets called when the processor receives an
*         unexpected interrupt.  This simply enters an infinite loop, preserving
*         the system state for examination by a debugger.
*
* @param  None
* @retval : None
*/
    .section .text.Default_Handler,"ax",%progbits
Default_Handler:
Infinite_Loop:
  b Infinite_Loop
  .size Default_Handler, .-Default_Handler[/mw_shl_code]

然后我按照这个函数的意思,明白是说有一个中断无法响应,然后我试着把屏蔽到的中断服务程序给恢复了,但是是个空函数不执行任何内容,就是下面这样。
[mw_shl_code=c,true]void SysTick_Handler(void)
{
}[/mw_shl_code]

这样改动之后程序竟然正常运行了,我现在十分不理解是因为什么,希望大家能够帮我分析一下,十分感谢!

最佳答案

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

你确定你全部关闭了?那下图这里你关闭了吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-3-31 20:14:30 | 显示全部楼层
zhubeilife 发表于 2017-3-31 22:52
但是我基本上是按程序走了一遍,把跟systick有关的都给关了啊

你确定你全部关闭了?那下图这里你关闭了吗?
X$XFIL9JPJ$QVN@~_%`5F.png


开往春天的手扶拖拉机
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2017-3-31 21:23:51 | 显示全部楼层
你肯定开启了滴答定时器中断!HAL库里面会默认开启滴答定时器中断的,结果你开启了滴答定时器中断,但是滴答定时器中断服务函数Systick_Handler()被你给屏蔽掉了!
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-22
在线时间
21 小时
 楼主| 发表于 2017-3-31 22:52:01 | 显示全部楼层
zuozhongkai 发表于 2017-3-31 21:23
你肯定开启了滴答定时器中断!HAL库里面会默认开启滴答定时器中断的,结果你开启了滴答定时器中断,但是滴 ...

但是我基本上是按程序走了一遍,把跟systick有关的都给关了啊
回复

使用道具 举报

4

主题

346

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3657
金钱
3657
注册时间
2016-2-21
在线时间
542 小时
发表于 2017-4-1 09:27:46 | 显示全部楼层
HAL内部的延时也是用滴答定时器,所以他内部大概在什么地方初始化的时候,把他开了
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-22
在线时间
21 小时
 楼主| 发表于 2017-4-1 11:44:27 | 显示全部楼层
zuozhongkai 发表于 2017-4-1 10:16
你确定你全部关闭了?那下图这里你关闭了吗?

十分感谢,提醒了我,这个确实屏蔽了,但是应该是系统默认就把中断打开了,我得手动把中断这一位给置0
回复

使用道具 举报

6

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
89
金钱
89
注册时间
2012-9-22
在线时间
21 小时
 楼主| 发表于 2017-4-1 11:46:15 | 显示全部楼层
shikihane 发表于 2017-4-1 09:27
HAL内部的延时也是用滴答定时器,所以他内部大概在什么地方初始化的时候,把他开了

确实是我没完全关闭,十分感谢!
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-8-22 12:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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