You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

STM32F072B-DISCO触摸感应示例代码类型冲突报错求助

解决STM32F072B-DISCO触摸感应编译类型冲突问题

问题根源

编译报错conflicting types for 'MyLinRots'的核心原因有两个:

  • extern TSL_LinRot_T MyLinRots[];被错误地放在了主循环内部,违反了C语言全局声明的作用域规则;
  • 编译器无法正确识别TSL_LinRot_T类型,导致你的声明与触摸头文件(../TOUCHSENSING/App/tou开头的头文件)中MyLinRots的实际定义类型不匹配。

分步修复方案

  1. 调整extern声明位置
    将extern TSL_LinRot_T MyLinRots[];从主循环的User Code Begin 3与End之间,移动到main.c文件的全局作用域——也就是所有函数(包括main())定义之前,最好放在所有#include头语句的下方。

  2. 确保头文件正确包含
    在main.c顶部添加触摸模块的核心头文件(通常是#include "tsl_user.h",或者报错提示的touxxx.h),让编译器能正确解析TSL_LinRot_T类型,避免类型不匹配。

  3. 核对头文件中的定义
    打开报错提及的触摸头文件,找到MyLinRots的定义行:

    • 如果头文件中定义为TSL_LinRot_T MyLinRots[];(或带明确长度的数组),则你的extern声明无需修改;
    • 如果头文件中是其他类型(比如TSL_Object_T MyLinRots[]),则需要将main.c中的extern声明改为对应类型。
  4. 正确放置触摸处理代码
    手册中的触摸逻辑代码(比如触摸扫描、状态判断)确实应该放在主循环的User Code Begin 3与End之间,但全局声明绝对不能出现在循环或函数内部。

补充说明

手册标注“无需修改代码即可运行”,大概率是你复制代码时误将全局声明放到了循环内,或者漏包含了必要的触摸头文件。按上述步骤调整后,即可解决类型冲突问题。

内容的提问来源于stack exchange,提问作者Lyoner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 10:12:51