HAL库中SysTick定时器中断配置函数调用关系

最近我在看我一个同事使用HAL编写的STM32F107RCT6芯片的代码,发现SysTick定时器已经开始运行,并且不断产生中断。因为在stm32f1xx_it.c中有中断服务函数的入口:

中断服务函数内部不断对全局变量uwTick进行读写操作。那现在就有一个问题了,SysTick定时器是在哪里配置的,并且中断使能是在哪里?

我找了好长时间也没有找到,不过我通过投机取巧的搜索找到了。

首先找到SysTick定时器对应中断服务号:SysTick_IRQn。然后使用vscode的搜索工具进行搜索(区分大小写、全字搜索),发现在源文件:stm32f1xx_hal.c源文件中的HAL_InitTick()函数内部调用了这个中断服务号:

这里对SysTick定时器的NVIC相关寄存器的优先级进行了配置。

剩下的就比较简单了,搜索关键字“HAL_InitTick”,也是区分大小写、全字搜索,发现存在2处调用,如下所示:

(1)main()---》SystemClock_Config()--->HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2)---》HAL_InitTick (TICK_INT_PRIORITY);---》HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);

(2)main()--->HAL_Init()---》HAL_InitTick(TICK_INT_PRIORITY)---》HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq));HAL_NVIC_SetPriority(SysTick_IRQn, TickPriority, 0U);

最后,看一下函数:HAL_SYSTICK_Config()函数内部

在SysTick_config()函数中使用了寄存器SysTick的相关寄存器。这里对寄存器进行了配置。

联想:

以上办法是使用关键字函数SysTick_IRQn搜索找到的相关调用关系,既然我们知道寄存器才是驱动的根源,能否通过搜索寄存器关键字呢?这里的关键字为“SysTick”。我测试了一下直接搜索相关寄存器还是一种比较便捷、捷径的方法。

如下所示:

搜索SysTick->CTRL寄存器的关键字

首先,我们知道STM32F103RCT6单片机是Cortex-M3内核,所以只需看core_cm3.c、stm32f1xx_hal_cortex.c、stm32f1xx_hal.c这3个源文件。

main()-->SystemClock_Config()--->HAL_InitTick(TICK_INT_PRIORITY)---》HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq))---》SysTick_Config()---》SysTick->CTRL

main()--->HAL_Init()---》 HAL_InitTick(TICK_INT_PRIORITY); ---》HAL_SYSTICK_Config(SystemCoreClock / (1000U / uwTickFreq))  ---》SysTick_Config(TicksNumb);---》SysTick->CTRL

以上2个调用关系其实都是确切到了“函数调用”而非“函数定义”上,具体过程:

如果搜索了某一个函数然后往前查看函数名是在哪个函数名内部,然后再搜索函数名,找到当前函数名所在第三个函数内部调用关系;

函数调用关系(省略了函数名所在主函数名)---》函数调用关系(省略了函数名所在主函数名)--->函数调用关系(省略了函数名所在主函数名)---》...---》函调用关系(省略了函数名所在主函数名)

搜索的时候使用键盘“上下箭头”可以往回或者往后 会到上一次搜索内容或者已经搜索内容。后面多练习。

以上函数调用关系---》函数调用关系,我现在用的不熟悉,后面多多练习。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值