[STM32F1] 将 Arduino 代码迁移至 STM32CubeIDE

[复制链接]
19|10
Hitomi22 发表于 2026-2-20 23:59 | 显示全部楼层 |阅读模式

用 STM32CubeIDE 开发I2C 相关的项目。我之前用 Arduino 编写了以下代码,但不知道如何将这些代码迁移到 STM32CubeIDE 中。
该如何调整以下代码,使其能在 STM32CubeIDE 中正常运行?
#define REGMAP_ORG 0x00
#define SLAVE_ADDRESS 0x32
#define CTRL_CMD 0x86
#define SAVE_CHECK_CRC 0x02
Wire.beginTransmission(SLAVE_ADDRESS); // transmit to device #0x32
Wire.write(REGMAP_ORG); // sends offset byte
Wire.write(00);
Wire.endTransmission(); // stop transmitting
Wire.beginTransmission(SLAVE_ADDRESS); // transmit to device #0x32
Wire.write(CTRL_CMD);
Wire.write(SAVE_CHECK_CRC);
Wire.endTransmission(); // stop transmitting
Wire.requestFrom(SLAVE_ADDRESS, 2); //2 bytes

公羊子丹 发表于 2026-2-22 09:05 | 显示全部楼层
首先得用STM32CubeMX配置好I2C外设,生成工程后替换掉Arduino的Wire库函数,用HAL库的HAL_I2C_Master_Transmit来发数据,HAL_I2C_Master_Receive来收数据,地址和字节数对应好就行。
周半梅 发表于 2026-2-22 09:06 | 显示全部楼层
我刚做过类似的迁移,提醒你一下STM32的I2C地址要注意是7位还是8位,Arduino里写0x32,CubeIDE里可能要右移一位,你先确认下外设的地址格式再写代码。
帛灿灿 发表于 2026-2-22 09:07 | 显示全部楼层
你先在CubeMX里开启对应的I2C引脚和外设,配置成主机模式,时钟频率选400kHz或者100kHz,生成工程后在main.c里直接调用HAL库的I2C函数,替换掉原来的Wire相关代码就可以。
童雨竹 发表于 2026-2-22 09:07 | 显示全部楼层
这迁移其实不难,就是把Arduino的封装函数换成STM32的HAL库原生函数,而且要注意CubeIDE里得先初始化I2C,不然直接调用收发函数会卡死,初始化代码CubeMX会自动生成的。
万图 发表于 2026-2-22 09:09 | 显示全部楼层
想问下你用的是STM32F1哪个具体型号?不同型号的I2C外设配置稍有差别,不过核心的HAL库函数是一样的,另外收发数据的缓冲区要自己定义,比Arduino的Wire库多这一步。
Wordsworth 发表于 2026-2-22 09:09 | 显示全部楼层
我建议你先写个简单的I2C收发测试代码,用HAL_I2C_IsDeviceReady检测下从设备是否在线,再移植你原来的逻辑,这样能先排除硬件和地址的问题,比直接移植更稳妥。
Bblythe 发表于 2026-2-22 09:10 | 显示全部楼层
笑了,我第一次迁移也盯着Wire库懵了半天,后来发现CubeIDE里HAL库的I2C函数逻辑更直白,就是传句柄、从地址、数据缓冲区、长度、超时时间,照着这个格式套你的数据就行。
Pulitzer 发表于 2026-2-22 09:11 | 显示全部楼层
你原来的代码里写了Wire.write(00),这个是八进制的0还是十进制的0?CubeIDE里写0就行,别写00容易出问题,另外endTransmission对应HAL库的单次发送,刚好能一一对应上。
Uriah 发表于 2026-2-22 09:13 | 显示全部楼层
迁移后要注意超时时间的设置,HAL库的I2C函数最后一个参数是超时,一般设1000就行,要是设0的话会一直等待,容易造成程序卡死,这个坑我之前踩过,提醒你一下。
Clyde011 发表于 2026-2-22 09:14 | 显示全部楼层
你可以把原来的I2C收发逻辑封装成单独的函数,放在main.c的USER CODE区,这样不会被CubeMX重新生成代码覆盖,而且后续调试和修改也方便,这是CubeIDE开发的小技巧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

104

主题

107

帖子

0

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