[其他ST产品] 什么是HAL(Hardware Abstraction Layer)?

[复制链接]
2174|54
 楼主| 雨果喝水 发表于 2023-8-27 17:29 | 显示全部楼层
仔细阅读完代码后,我们不难发现HAL_UART_IRQHandler()中还调用了 HAL_UARTEx_RxEventCallback(huart, nb_rx_data); HAL_UART_ErrorCallback(huart)等回调函数,在keil中右键点击go to Defination,我们发现这些函数前均有weak关键字
 楼主| 雨果喝水 发表于 2023-8-27 17:29 | 显示全部楼层
  1. /**
  2.   * @brief  Rx Transfer completed callbacks.
  3.   * @param  huart  Pointer to a UART_HandleTypeDef structure that contains
  4.   *                the configuration information for the specified UART module.
  5.   * @retval None
  6.   */
  7. __weak void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
  8. {
  9.   /* Prevent unused argument(s) compilation warning */
  10.   UNUSED(huart);
  11.   /* NOTE: This function should not be modified, when the callback is needed,
  12.            the HAL_UART_RxCpltCallback could be implemented in the user file
  13.    */
  14. }

  15. /**
  16.   * @brief  Rx Half Transfer completed callbacks.
  17.   * @param  huart  Pointer to a UART_HandleTypeDef structure that contains
  18.   *                the configuration information for the specified UART module.
  19.   * @retval None
  20.   */
  21. __weak void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart)
  22. {
  23.   /* Prevent unused argument(s) compilation warning */
  24.   UNUSED(huart);
  25.   /* NOTE: This function should not be modified, when the callback is needed,
  26.            the HAL_UART_RxHalfCpltCallback could be implemented in the user file
  27.    */
  28. }
 楼主| 雨果喝水 发表于 2023-8-27 17:29 | 显示全部楼层
什么是weak关键字呢?其实函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”。
加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错。所以我们可以在别的地方定义一个相同名字的函数,而不必也尽量不要修改原始函数,于是这便实现了回调,回调给用户,使中断服务程序最终由用户设计,这种方式增强了代码的逻辑性:中断发生后先由内部硬件托管给HAL,HAL调用用户自己编写的回调函数实现功能,增加了文件的嵌套程度
 楼主| 雨果喝水 发表于 2023-8-27 17:29 | 显示全部楼层
(四)HAL库编程方式

HAL库提供了三种编程方式,分别是轮询模式、中断模式、DMA模式。
具体三种方式的编程案例详见STM32 ppp调试经验
Bowclad 发表于 2024-5-12 23:03 | 显示全部楼层
hal库移植起来确实是很方便
Clyde011 发表于 2024-9-16 07:24 | 显示全部楼层

它们之间的间距应至少为0.5mm。
公羊子丹 发表于 2024-9-16 08:17 | 显示全部楼层

会占用PCB的空间,成本也会更高。
万图 发表于 2024-9-16 09:20 | 显示全部楼层

对于信号回路的峰值电压防护电路不应动作,通常在信号回路中,防护电路的动作电压是信号回路的峰值电压的1.3~1.6倍。
Uriah 发表于 2024-9-16 10:23 | 显示全部楼层

它们通常用于分线板或小模块。
帛灿灿 发表于 2024-9-16 12:19 | 显示全部楼层

开关管T交替工作于通/断两种状态,当开关管关断时,脉冲变压器处于“空载”状态,其中储存的磁能将被积累到下一个周期
Bblythe 发表于 2024-9-16 13:22 | 显示全部楼层

在印刷电路板制造中
周半梅 发表于 2024-9-16 15:18 | 显示全部楼层

选择测试方法和测试参数是检测过程中的重要步骤
Pulitzer 发表于 2024-9-16 16:21 | 显示全部楼层

它产生的噪声是对地噪声
童雨竹 发表于 2024-9-16 18:17 | 显示全部楼层

对于环氧树脂而言,一般把导热系数为0.5W/M·K的导热性能已经被定义为高导热
Wordsworth 发表于 2024-9-16 19:20 | 显示全部楼层

抑制各种高速信号产生的电磁波向外发射
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部