HAL库最显著的特点是基于结构体从而利用句柄进而简化代码。
定时器初始化:
TIM6_DAC_IRQn是STM32G431单片机中定时器TIM6的中断请求名。TIM6是STM32G431的一个基本定时器,具有基本的定时功能。当累加的时钟脉冲数超过预定值时,TIM6能触发中断或触发DMA请求。此外,TIM6还被专门用于驱动数模转换器(DAC)。
在STM32G431中,TIM6的中断服务函数名为TIM6_DAC_IRQHandler(),而不是常见的TIM6_IRQHandler()。这是因为TIM6的中断不仅与TIM6自身的计时功能有关,还与DAC的转换完成有关。因此,当中断发生时,TIM6_DAC_IRQHandler()函数会被调用,以处理与TIM6和DAC相关的中断事件。
中断服务函数和中断回调函数的区别:
中断服务函数(ISR):
ISR是响应硬件中断而自动调用的函数。当特定的硬件事件(如定时器溢出、外部中断等)发生时,CPU会暂停当前正在执行的代码,跳转到与该硬件事件相关联的ISR执行。ISR通常是预先定义好的,并且在系统的初始化阶段配置到相应的中断向量表中。一旦中断发生,CPU会根据中断的类型查找中断向量表,然后跳转到相应的ISR执行。
中断回调函数(Interrupt Callback Function):
中断回调函数通常不是直接由硬件中断触发的,而是由某个库函数或框架在适当的时候调用的。它允许用户或开发者定义在某个特定事件发生时应该执行的代码。
中断回调函数通常用于异步事件处理,如网络请求完成、定时器到期、异步I/O操作完成等。当这些事件发生时,相应的回调函数会被调用。
中断回调函数通常不是由系统预先定义好的,而是由用户或开发者根据需要编写的,并通过某种机制(如注册回调函数)与事件处理框架关联起来。ISR是响应硬件中断而自动调用的函数,而中断回调函数是在特定事件发生时由框架或库调用的函数。
ISR通常是由系统预先定义并配置好的,而中断回调函数是由用户或开发者编写的。
ISR主要用于处理硬件事件,而中断回调函数主要用于处理异步事件。
无需手工调用,HAL库中已经对HAL_TIM_PeriodElapsedCallback做好了调用机制。