说明
1、这个库文件主要功能是NVIC,MPU和Systick的配置。
2、这个驱动文件有个臃肿的地方,就是HAL库将ARM的CMSIS库各种API函数封装了一遍。其实就是为了换个名字,保证HAL的API都是以HAL开头的。
==============================================================================
##### 如何使用此驱动 #####
==============================================================================
1 、使用CORTEX HAL的API配置NVIC
(1)通过函数HAL_NVIC_SetPriorityGrouping设置NVIC优先级分组。
(2)通过函数HAL_NVIC_SetPriority设置中断的优先级。
(3)通过函数HAL_NVIC_EnableIRQ使能中断。
(4)系统上电默认是NVIC_PRIORITYGROUP_0,只有子优先级,没有抢占优先级。
a、抢占优先级数值越小,优先级越高
b、子优先级数值越小,同抢占优先级时,优先级越高。
c、同子优先级和和抢占优先级时,中断向量表中序号小的,在中断同时到来时,优先级执行。
NVIC详细介绍可以看此贴:http://www.armbbs.cn/forum.php?mod=viewthread&tid=21094
2、使用CORTEX HAL的API配置滴答定时器Systick
(1)函数HAL_SYSTICK_Config调用CMSIS库函数SysTick_Config配置滴答定时器
a、配置重装寄存器。
b、配置滴答定时器的优先级为最低0x0F。
c、复位滴答定时器计数器。
d、选择滴答定时器时钟源HCLK。
e、使能滴答定时器中断。
f、使能滴答定时器计数。
(2)滴答定时器的时钟源可以选择HCLK的8分频,方法是用户调用了函数HAL_SYSTICK_Config()再调用HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK_DIV8)。
函数HAL_SYSTICK_CLKSourceConfig是在文件stm32h7xx_hal_cortex.h里面定义。
(3)如果大家不使用滴答定时器默认的最低优先级,可以调用了函数HAL_SYSTICK_Config()后,再调用HAL_NVIC_SetPriority(SysTick_IRQn, X, X)进行修改。
(4)HAL_SYSTICK_Config() 函数的形参表示内核时钟多少个周期后触发一次Systick定时中断.
-- SystemCoreClock / 1000 表示定时频率为 1000Hz, 也就是定时周期为 1ms
-- SystemCoreClock / 500 表示定时频率为 500Hz, 也就是定时周期为 2ms
-- SystemCoreClock / 2000 表示定时频率为 2000Hz, 也就是定时周期为 500us
3、此文件里面还有一个重要的函数就是系统复位:HAL_NVIC_SystemReset |