[STM32G0] 如何不编译 “stm32g0xx_it.c” 中的部分 HAL 函数

[复制链接]
52|8
地瓜patch 发表于 2026-3-9 14:13 | 显示全部楼层 |阅读模式
我想找到一种方法阻止 “stm32g0xx_it.c” 文件中的某个函数被编译 ,我在主程序代码中自行实现了这个函数。这个函数是void I2C2_IRQHandler(void)。
我目前的做法是删除该文件里的这个函数,但每次通过 CubeMX重新生成代码时,这个函数都会重新出现在文件中, 请问有没有办法让这个函数不被编译?
我不使用 HAL 库的原因是,HAL 库函数的执行耗时过长。
以下是该函数的代码:
void I2C2_IRQHandler(void)
{
  /* USER CODE BEGIN I2C2_IRQn 0 */

  /* USER CODE END I2C2_IRQn 0 */
  if (hi2c2.Instance->ISR & (I2C_FLAG_BERR | I2C_FLAG_ARLO | I2C_FLAG_OVR)) {
    HAL_I2C_ER_IRQHandler(&hi2c2);
  } else {
    HAL_I2C_EV_IRQHandler(&hi2c2);
  }
  /* USER CODE BEGIN I2C2_IRQn 1 */

  /* USER CODE END I2C2_IRQn 1 */
}



今天会画卧蚕吗 发表于 2026-3-9 14:19 | 显示全部楼层
修改CubeMX的模板文件,CubeMX允许用户自定义代码模板,这样在生成代码时,可以保留用户修改的部分。
故里说长安 发表于 2026-3-9 15:20 | 显示全部楼层
用弱符号,在C语言中,可以使用__attribute__((weak))来定义弱符号函数。如果用户在自己的代码中定义一个同名的强符号函数,那么链接器会优先使用强符号,从而覆盖弱符号。
classroom 发表于 2026-3-9 16:20 | 显示全部楼层
可以在CubeMX生成代码后,手动修改stm32g0xx_it.c文件,将自己的函数实现添加进去,并注释掉CubeMX生成的部分。但这种方法每次重新生成时都需要手动操作,不够高效。
cr315 发表于 2026-3-9 17:21 | 显示全部楼层
在CubeMX生成的文件中,使用预处理器宏来控制函数的定义。
duo点 发表于 2026-3-9 19:21 | 显示全部楼层
可以将自己的中断处理函数实现在另一个源文件中,并在stm32g0xx_it.c中声明为外部函数。然后,在CubeMX生成的文件中,使用条件编译或弱符号来避免冲突。
flycamelaaa 发表于 2026-3-9 19:22 | 显示全部楼层
在用户自己的代码中实现I2C2_IRQHandler函数。
jcky001 发表于 2026-3-9 21:23 | 显示全部楼层
在stm32g0xx_it.c中,修改CubeMX生成的I2C2_IRQHandler函数,添加__attribute__((weak)),使其成为弱符号。这样当定义强符号时,链接器会使用用户的实现。
onlycook 发表于 2026-3-9 21:23 | 显示全部楼层
在main.c中,定义同名的强符号函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:出一块TI-PLABS-AMP-EVM

2907

主题

17818

帖子

30

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