[STM32F2] I2C驱动一个2行16字符的LCD 出错

[复制链接]
 楼主| SocialButterfly 发表于 2025-7-23 21:52 | 显示全部楼层 |阅读模式
用I2C驱动一个2行16字符的LCD的示例程序。编译(构建)时出现了4个错误,求助高手
错误:
error: 'for' loop initial declarations are only allowed in C99 or C11 mode
223 |  for(uint8_t i=0; i<offset;i++)
error: 'for' loop initial declarations are only allowed in C99 or C11 mode
234 |  for(uint8_t i=0; i<offset;i++)
error: 'for' loop initial declarations are only allowed in C99 or C11 mode
250 |  for(uint8_t i=0; i<strlen(stringArray) && i<16; i++)
"make -j8 all" terminated with exit code 2. Build might be incomplete.
昨天编译时没有错误,只是LCD没有显示内容。
这些错误是在我删除所有内容并重新编译后出现的。

公羊子丹 发表于 2025-7-24 07:18 | 显示全部楼层
你这是用的 C89 编译模式吧?把编译选项加上 -std=c99 就好了。
周半梅 发表于 2025-7-24 07:19 | 显示全部楼层
如果不想改编译选项,也可以把 for 里定义的 uint8_t i 挪到外面去。
帛灿灿 发表于 2025-7-24 07:20 | 显示全部楼层
CubeIDE 默认是 c99,你是不是换了别的 Makefile 或者手动改过编译器?
童雨竹 发表于 2025-7-24 07:22 | 显示全部楼层
这几个 for 报错都一样,本质是语法标准的问题,和 LCD I2C 驱动没啥关系。
万图 发表于 2025-7-24 07:25 | 显示全部楼层
之前能编译是因为编译选项里有 -std=c99,你新建后可能把选项弄丢了。
Wordsworth 发表于 2025-7-24 07:29 | 显示全部楼层
LCD 没显示内容有可能是时序或者地址错了,跟编译错误是两回事。
Bblythe 发表于 2025-7-24 07:31 | 显示全部楼层
把 for 改成:uint8_t i; for(i=0; i<offset; i++),编译也能过。
Pulitzer 发表于 2025-7-24 07:32 | 显示全部楼层
还有种方法,在 Project Properties 里把 C Compiler 的标准设置成 ISO C99。
Uriah 发表于 2025-7-24 07:33 | 显示全部楼层
看下是不是 Makefile 有 -ansi 参数,它会强制 c89,去掉就行了。
Clyde011 发表于 2025-7-24 07:34 | 显示全部楼层
建议先搞定能编译,再调 I2C 时序,不然连烧都烧不进去,白折腾。
jcky001 发表于 2025-7-28 16:39 | 显示全部楼层
在 STM32CubeIDE 中启用 C99 或 C11 模式。
elephant00 发表于 2025-7-28 16:40 | 显示全部楼层
检查 I2C_Init() 是否正确配置。
cr315 发表于 2025-7-28 17:40 | 显示全部楼层
如果不想改编译器标准,可以修改 for 循环,把变量声明移到函数开头。
flycamelaaa 发表于 2025-7-28 19:41 | 显示全部楼层
LCD 地址错误?
powerantone 发表于 2025-7-28 22:41 | 显示全部楼层
检查 I2C 引脚是否接对,上拉电阻是否已加。
小小蚂蚁举千斤 发表于 2025-7-28 23:44 | 显示全部楼层
I2C驱动一定要正确
您需要登录后才可以回帖 登录 | 注册

本版积分规则

40

主题

40

帖子

0

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