找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2154|回复: 0
打印 上一主题 下一主题
收起左侧

I2C调试记录(寄存器版本)_STM8L151

[复制链接]
跳转到指定楼层
楼主
ID:600674 发表于 2019-8-16 11:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近调STM8的I2C简直是爽呆呆,一直不成功,收不到从机寄存器的数据,最后终于完成,究其原因可以总结为以下几个方面:
1、I2C配置问题,一定要注意配置问题,特别的是I2C的时钟,SCL时钟的高低电平占空比,如果采用100kHz,占空比为1:1,若为400KHz,高低占空比为1:2,配置好之后直接应答使能,方便后面通讯过程。注意配置好之后,程序运行到这里SCL和SDA就会置1,并且能用电压表和示波器查看电压和波形;一定要去ST官网下载资料查看寄存器的配置,否则容易出错。
2、I2C读数据通讯过程一定是包含这样几个过程:起始位,判断CR1_SB,发送从机地址(7bit+1bit写操作),判断ADDR,读SR3清寄存器,发数据,判断BTF是否成功发送,重复起始,再读SB,读操作,ADDR,SR3,判断RXNE,保存接收数据,最后结束位和重新应答使能;适当的加nop延迟,I2C来不及应答,注意不要多操作也不要少操作,严格按照流程来,不然就会出错。只要写能成功,读肯定没问题。
3、通过I/O口实现模拟I2C通讯,若实在是I2C硬件功能调不通,可先用对应的I/O模拟出I2C的通讯过程。编程也是按照I2C通讯协议一步步走,不要漏掉和多出什么,否则容易出错。基本过程如下:1.配置系统时钟(关键,时钟决定了I2C通讯的速率);2.配置延时程序(这一点必须配置好,否者无法通讯成功);3.I2C初始化程序;4.起始信号程序;5.结束信号程序;6.接收从机应答程序(给从机一个应答位,保证接收到应答才能进行下一步操作);7.主机发送ack和Nack程序;8.检测是否接收到应答(对应第6步,保证I2C数据传输正确,也可不要)9.写一个字节程序;10.读一个字节程序。
将所有的这些程序编写好之后就能按照I2C通讯过程进行调用和编写,网上程序很多可以对着看,就不贴源代码了。

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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