打印
[其他ST产品]

CubeIDE 中自动生成的程序出错

[复制链接]
375|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 给覆盖了?

使用特权

评论回复
5
童雨竹| | 2025-4-7 07:28 | 只看该作者
我上次遇到这个,是手动改了 IOC 文件外的 C 文件,结果重新生成代码的时候结构体不一致了。你试试把生成文件全删掉再重新生成一遍?

使用特权

评论回复
6
万图| | 2025-4-7 07:29 | 只看该作者
感觉像是头文件没完全更新,有没有清除一下项目的 Debug 文件夹再 Clean 一下?

使用特权

评论回复
7
Wordsworth| | 2025-4-7 07:31 | 只看该作者
如果你是从 F4 或 L 系列迁移过来的,注意 HAL 的结构体命名和定义方式可能不一样,要用 F1 的原始模板。

使用特权

评论回复
8
Bblythe| | 2025-4-7 07:32 | 只看该作者
看你的错误出在 stm32f1xx_hal_tim.h,有可能是你 project settings 引用了别的 HAL 头文件,建议确认 Includes 设置。

使用特权

评论回复
9
Pulitzer| | 2025-4-7 07:33 | 只看该作者
HAL 宏定义中用的是 ->,说明你得传个指针,如果你传的是 TIM_HandleTypeDef htim,就得写成 &htim。

使用特权

评论回复
10
Uriah| | 2025-4-7 07:34 | 只看该作者
如果你删掉了 HAL 文件后自己导入,有没有可能错导了别的版本?CubeMX 的版本要跟 HAL 驱动匹配。

使用特权

评论回复
11
Clyde011| | 2025-4-7 07:35 | 只看该作者
你可以试着贴一下你调用 __HAL_TIM_SET_COUNTER() 的具体代码,大家一起帮你分析是哪传参传错了。

使用特权

评论回复
12
duo点| | 2025-4-7 11:28 | 只看该作者
可能是 HAL 库版本不匹配或被错误修改。

使用特权

评论回复
13
laocuo1142| | 2025-4-7 13:26 | 只看该作者
检查 stm32f1xx_hal_tim.h 是否正确包含在项目中。

使用特权

评论回复
14
flycamelaaa| | 2025-4-7 15:23 | 只看该作者
htimX 是定时器句柄的变量名,通常在 main.c 或其他源文件中定义。如果 htimX 未正确定义或初始化,可能会导致编译器无法识别其类型。

使用特权

评论回复
15
powerantone| | 2025-4-7 20:23 | 只看该作者
清理和重建项目试试吧。

使用特权

评论回复
16
stormwind123| | 2025-4-7 22:00 | 只看该作者
手动检查和修复 stm32f1xx_hal_tim.h 文件中的宏定义。

使用特权

评论回复
17
probedog| | 2025-4-7 22:00 | 只看该作者
检查 htimX 的定义和初始化。

使用特权

评论回复
18
这个错误表明在 stm32f1xx_hal_tim.h 文件中,宏定义 __HAL_TIM_SET_COUNTER __HAL_TIM_GET_COUNTER 尝试通过 -> 操作符访问 TIM_HandleTypeDef 结构体的成员,但编译器认为 __HANDLE__ 的类型不匹配(可能是匿名结构体或未正确定义)

使用特权

评论回复
19
江河千里| | 2025-4-8 02:27 | 只看该作者
可能是头文件的包含顺序错误,导致 TIM_HandleTypeDef 未正确定义,或者某些宏定义冲突

使用特权

评论回复
20
夜阑风雨| | 2025-4-8 03:17 | 只看该作者
确保 HAL_TIM_MODULE_ENABLED 已定义,确保没有重复定义或冲突的宏

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

12

帖子

0

粉丝