STM32F072B-DISCO触摸感应示例代码类型冲突报错求助
解决STM32F072B-DISCO触摸感应编译类型冲突问题
问题根源
编译报错conflicting types for 'MyLinRots'的核心原因有两个:
extern TSL_LinRot_T MyLinRots[];被错误地放在了主循环内部,违反了C语言全局声明的作用域规则;- 编译器无法正确识别
TSL_LinRot_T类型,导致你的声明与触摸头文件(../TOUCHSENSING/App/tou开头的头文件)中MyLinRots的实际定义类型不匹配。
分步修复方案
调整extern声明位置
将extern TSL_LinRot_T MyLinRots[];从主循环的User Code Begin 3与End之间,移动到main.c文件的全局作用域——也就是所有函数(包括main())定义之前,最好放在所有#include头语句的下方。确保头文件正确包含
在main.c顶部添加触摸模块的核心头文件(通常是#include "tsl_user.h",或者报错提示的touxxx.h),让编译器能正确解析TSL_LinRot_T类型,避免类型不匹配。核对头文件中的定义
打开报错提及的触摸头文件,找到MyLinRots的定义行:- 如果头文件中定义为
TSL_LinRot_T MyLinRots[];(或带明确长度的数组),则你的extern声明无需修改; - 如果头文件中是其他类型(比如
TSL_Object_T MyLinRots[]),则需要将main.c中的extern声明改为对应类型。
- 如果头文件中定义为
正确放置触摸处理代码
手册中的触摸逻辑代码(比如触摸扫描、状态判断)确实应该放在主循环的User Code Begin 3与End之间,但全局声明绝对不能出现在循环或函数内部。
补充说明
手册标注“无需修改代码即可运行”,大概率是你复制代码时误将全局声明放到了循环内,或者漏包含了必要的触摸头文件。按上述步骤调整后,即可解决类型冲突问题。
内容的提问来源于stack exchange,提问作者Lyoner
相关产品推荐
相关产品推荐

