搜索
bottom↓
回复: 11

STM32F1的I2C调试卡死,在AI中问怎么写I2C,有个函数库里没有

[复制链接]

出0入4汤圆

发表于 2024-4-19 11:51:55 | 显示全部楼层 |阅读模式
在网上找的例程LL_I2C_IsActiveFlag_SB总是卡死。
uint8_t I2C_Read(uint8_t addr, uint8_t reg)
{
    uint8_t data;
   
    while(LL_I2C_IsActiveFlag_BUSY(I2C1));
   
    LL_I2C_HandleTransfer(I2C1, addr, LL_I2C_ADDRSLAVE_7BIT, 1, LL_I2C_MODE_AUTOEND, LL_I2C_GENERATE_START_WRITE);
    while(!LL_I2C_IsActiveFlag_TXE(I2C1));
    LL_I2C_TransmitData8(I2C1, reg);
    while(!LL_I2C_IsActiveFlag_TC(I2C1));
   
    LL_I2C_HandleTransfer(I2C1, addr, LL_I2C_ADDRSLAVE_7BIT, 1, LL_I2C_MODE_AUTOEND, LL_I2C_GENERATE_START_READ);
    while(!LL_I2C_IsActiveFlag_RXNE(I2C1));
    data = LL_I2C_ReceiveData8(I2C1);
    while(!LL_I2C_IsActiveFlag_STOP(I2C1));
   
    return data;
}
这个是AI的参考例程,F1的库里没有这个函数LL_I2C_HandleTransfer

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入4汤圆

 楼主| 发表于 2024-4-19 13:52:03 | 显示全部楼层
yuyu87 发表于 2024-4-19 13:41
其实很好解决的,在I2C初始化之前先将I2C两个引脚都初始化为普通 IO,并置高电平 ,然后再正常初始化I2C就 ...
(引用自5楼)

那个按照方法改了,正常是第一步LL_I2C_IsActiveFlag_BUSY就卡死了,按照你建议的,然后就后边_SB卡住。步步是坑

出0入4汤圆

 楼主| 发表于 2024-4-19 13:53:23 | 显示全部楼层
t3486784401 发表于 2024-4-19 13:48
2019 年就已经有回答了,结论就是不碰 STM32 硬件 I2C:
(引用自6楼)

我的mcu是GD的,用的ST的ll库。不行就模拟了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-17 11:54

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表