[其他ST产品] CubeIDE 中自动生成的程序出错

[复制链接]
 楼主| cutfall 发表于 2025-4-6 11:00 | 显示全部楼层 |阅读模式
使用 Cube IDE 创建一个项目。编译时,由于自动生成的驱动程序中的错误,编译失败。为了解决这个问题,我删除了所有驱动程序并用 MX 再次导入,但错误仍然存在。
错误:
invalid type argument of '->' (have 'TIM_HandleTypeDef {aka struct <anonymous>}')        stm32f1xx_hal_tim.h        />Project</Drivers/STM32F1xx_HAL_Driver/Inc        line 1222        C/C++ Problem invalid type argument of '->' (have 'TIM_HandleTypeDef {aka struct <anonymous>}')        stm32f1xx_hal_tim.h        />Project</Drivers/STM32F1xx_HAL_Driver/Inc        line 1229        C/C++ Problem make: *** [Src/subdir.mk:73: Src/stm32f1xx_it.o] Error 1        >Project<         C/C++ Problem make: *** Waiting for unfinished jobs....        >Project<         C/C++ Problem
代码:
#define __HAL_TIM_SET_COUNTER(__HANDLE__, __COUNTER__)  ((__HANDLE__)->Instance->CNT = (__COUNTER__)) /**  * @brief  Get the TIM Counter Register value on runtime.  * @param  __HANDLE__ TIM handle.  * @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)  */#define __HAL_TIM_GET_COUNTER(__HANDLE__)  ((__HANDLE__)->Instance->CNT) /**  * @brief  Set the TIM Autoreload Register value on runtime without calling another time any Init function.  * @param  __HANDLE__ TIM handle.  * @param  __AUTORELOAD__ specifies the Counter register new value.  * @retval None  */
不知道哪里出了问题

公羊子丹 发表于 2025-4-7 07:25 | 显示全部楼层
我也遇到过这个错误,最后发现是我在某个地方把 TIM_HandleTypeDef 当结构体用了,少写了个 &,你检查一下传进去的是不是指针?
周半梅 发表于 2025-4-7 07:26 | 显示全部楼层
这个错通常是你传给 __HAL_TIM_SET_COUNTER 的不是指针,比如你写成了 htim1 而不是 &htim1。
帛灿灿 发表于 2025-4-7 07:27 | 显示全部楼层
有没有可能是你定义了另一个名为 htim1 的局部变量,把原来的 TIM_HandleTypeDef 给覆盖了?
童雨竹 发表于 2025-4-7 07:28 | 显示全部楼层
我上次遇到这个,是手动改了 IOC 文件外的 C 文件,结果重新生成代码的时候结构体不一致了。你试试把生成文件全删掉再重新生成一遍?
万图 发表于 2025-4-7 07:29 | 显示全部楼层
感觉像是头文件没完全更新,有没有清除一下项目的 Debug 文件夹再 Clean 一下?
Wordsworth 发表于 2025-4-7 07:31 | 显示全部楼层
如果你是从 F4 或 L 系列迁移过来的,注意 HAL 的结构体命名和定义方式可能不一样,要用 F1 的原始模板。
Bblythe 发表于 2025-4-7 07:32 | 显示全部楼层
看你的错误出在 stm32f1xx_hal_tim.h,有可能是你 project settings 引用了别的 HAL 头文件,建议确认 Includes 设置。
Pulitzer 发表于 2025-4-7 07:33 | 显示全部楼层
HAL 宏定义中用的是 ->,说明你得传个指针,如果你传的是 TIM_HandleTypeDef htim,就得写成 &htim。
Uriah 发表于 2025-4-7 07:34 | 显示全部楼层
如果你删掉了 HAL 文件后自己导入,有没有可能错导了别的版本?CubeMX 的版本要跟 HAL 驱动匹配。
Clyde011 发表于 2025-4-7 07:35 | 显示全部楼层
你可以试着贴一下你调用 __HAL_TIM_SET_COUNTER() 的具体代码,大家一起帮你分析是哪传参传错了。
duo点 发表于 2025-4-7 11:28 | 显示全部楼层
可能是 HAL 库版本不匹配或被错误修改。
laocuo1142 发表于 2025-4-7 13:26 | 显示全部楼层
检查 stm32f1xx_hal_tim.h 是否正确包含在项目中。
flycamelaaa 发表于 2025-4-7 15:23 | 显示全部楼层
htimX 是定时器句柄的变量名,通常在 main.c 或其他源文件中定义。如果 htimX 未正确定义或初始化,可能会导致编译器无法识别其类型。
powerantone 发表于 2025-4-7 20:23 | 显示全部楼层
清理和重建项目试试吧。
stormwind123 发表于 2025-4-7 22:00 | 显示全部楼层
手动检查和修复 stm32f1xx_hal_tim.h 文件中的宏定义。
probedog 发表于 2025-4-7 22:00 | 显示全部楼层
检查 htimX 的定义和初始化。
暖了夏天蓝了海 发表于 2025-4-8 01:15 | 显示全部楼层
这个错误表明在 stm32f1xx_hal_tim.h 文件中,宏定义 __HAL_TIM_SET_COUNTER __HAL_TIM_GET_COUNTER 尝试通过 -> 操作符访问 TIM_HandleTypeDef 结构体的成员,但编译器认为 __HANDLE__ 的类型不匹配(可能是匿名结构体或未正确定义)

江河千里 发表于 2025-4-8 02:27 | 显示全部楼层
可能是头文件的包含顺序错误,导致 TIM_HandleTypeDef 未正确定义,或者某些宏定义冲突

夜阑风雨 发表于 2025-4-8 03:17 | 显示全部楼层
确保 HAL_TIM_MODULE_ENABLED 已定义,确保没有重复定义或冲突的宏

您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

40

帖子

0

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

39

主题

40

帖子

0

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