HAL 编程问题手记

来源:互联网 发布:科技网络宽带客服电话 编辑:程序博客网 时间:2024/06/05 03:26

HAL 库使用注意点:

1、底层配置如时钟失能,引脚配置,中断配置等曹志伟放在HAL_XXX_MapInit 中, 在初始化外设时会进行调用该函数。例如:串口配置时就可以将引脚的TX,RX 配置放置在函数 void HAL_UART_MspInit(UART_HandleType)中, 在调用HAL_UART_Init 时会调用该函数进行配置。


2、定时器和串口中断服务函数

当触发中断时会调用对应的中断函数  例如定时器2中断: TIM2_IRQHandler(void) HAL 库中对中断的类型进行了分类处理,每一种类型的中断方式对应一个回调函数; 例如定时器有五种中断方式,对应着五个回调函数:

Timer Period elapsed callback   HAL_TIM_PeriodElapsedCallback()

Timer Output Compare callback HAL_TIM_OC_DelayElapsedCallback()

Timer Input capture callback HAL_TIM_IC_CaptureCallback()

Timer Trigger callback HAL_TIM_TriggerCallback()

Timer Error callback HAL_TIM_ErrorCallback()

在中断触发函数 TIM2_IRQHandler(void) 调用HAL_TIM_IRQHandler() 进行回调触发。


3、DMA 配置时无需设置内存地址,在启用外设是对应的外设接口函数的参数给出内存地址即可: 例如ADC的DMA模式启用:

HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t  Length); 

      其中参数 pData :内存地址, 参数 Length:内存大小。


4、__weak

如果函数名加__weak 修饰符,用户就可以重新定义同名函数,编译时会选择用户定义的函数,如果没有定义则编译器会执行__weak 声明的函数。如上面第一点提到的 HAL_UART_MspInit 在头文件中就有对应该函数的__weak 声明。


--------------------------------------------------------

定时器使用问题:

问题1:定时器配置后,启用定时器中断模式(HAL_TIM_Base_Start_IT) 中断立即触发。

解决: 在初始化后清除中断标志:

__HAL_TIM_CLEAR_FLAG(&TIMX_Handler,TIM_IT_UPDATE);


原创粉丝点击