根据PDF资料描述,没有想到还是翻车了,改芯片PDF描述简直精简的需要靠猜测来编程,翻看官方提供的I2C都是软件模拟发送(至少我没有找到硬件的),也许软件模拟的I2C更有灵魂!

先看最终效果,这里我读取的是LTC4151 模块

虽然经过计算400KHz的时钟,但是逻辑分析仪读出始终偏小;


//#define I2C_BASE  (HR_APB_BASE_ADDR + 0x0000)
//
//typedef struct
//{
//  __IOM uint32_t PRESCALE_L;
//  __IOM uint32_t PRESCALE_H;//4
//  __IOM uint32_t CTR;//8
//  __IOM uint32_t TXR_RXR;//c
//  __IOM uint32_t CR_SR;//10
//  __IM  uint32_t TXR;
//  __IM  uint32_t CR;
//} I2C_TypeDef;#define i2cReg      ((I2C_TypeDef*)I2C_BASE)
void Soc_i2cInit(void)
{__HAL_RCC_I2C_CLK_ENABLE();__HAL_AFIO_REMAP_I2C_SCL(GPIOA,GPIO_PIN_1);__HAL_AFIO_REMAP_I2C_SDA(GPIOA,GPIO_PIN_4);uint32_t i2cClk =400;//设置时钟:400Khzuint32_t prescale=(40*1000)/(5*i2cClk)-1 ;//= 16’d19i2cReg->PRESCALE_L =prescale&0xff;i2cReg->PRESCALE_H =(prescale>>8)&0xff;i2cReg->CTR =(1UL<<7);//使能i2c
}#define        I2C_Stop(){i2cReg->CR_SR=(1UL<<6);}
//向I2c 写入一个字节
//uint8_t haddr,硬件地址
//uint8_t cmd,软件地址,16bit需要修改
//uint8_t data,写入数据
//return 不等于0 失败
int I2C_Write_Byte(uint8_t haddr,uint8_t cmd,uint8_t data )
{int err =-1;uint8_t datas[3] ={haddr&0xfe,cmd,data};uint8_t start =(1UL<<7);for(int i=0;i<3;i++){i2cReg->TXR_RXR =datas[i];i2cReg->CR_SR=(1UL<<4)|(1UL<<0)|start;//写入开始、清空中断start=0;while((i2cReg->CR_SR&(1UL<<0))==0){;}//等待完成if((i2cReg->CR_SR&(1UL<<7))!=0){//判断设备响应goto exit;}    }err =0;
exit:I2C_Stop();//发送停止
return err;
}
//i2C连续读取寄存器
//uint8_t haddr :硬件地址
//uint8_t cmd:软件地址,8位,16bit需要修改
//uint8_t *data:接收地址
//int blen:读取字节数
//return 不等于0 失败
int I2C_Read_Byte(uint8_t haddr ,uint8_t cmd,uint8_t *data,int blen)
{int err =-1;uint8_t datas[3] ={haddr&0xfe,cmd,haddr|1};uint8_t start =0;for(int i=0;i<3;i++){i2cReg->TXR_RXR =datas[i];//装载数据start=(i==1)?0:(1UL<<7);//硬件地址需要发送开始i2cReg->CR_SR=(1UL<<4)|(1UL<<0)|start;//写入开始、清空中断while((i2cReg->CR_SR&(1UL<<0))==0){;}//等待完成if((i2cReg->CR_SR&(1UL<<7))!=0){//判断设备响应goto exit;}    }start=0;while(blen--){if(blen==0){start=(1UL<<3);//NACK}i2cReg->CR_SR=(1UL<<5)|(1UL<<0)|start;//读取+开始,清空中断while((i2cReg->CR_SR&(1UL<<0))==0){;}//等待完成*data++ =i2cReg->TXR_RXR;//接收数据}err =0;
exit:I2C_Stop();//发送停止
return err;
}int main(void)
{uint8_t data[16];xSoc_i2cInit();do{int ret =I2C_Read_Byte(0xde,0,data,8);}while(0);
return 0;
}

国产W806 I2C硬件模块相关推荐

  1. STM32’s I2C 硬件BUG引发的血案

    2010-4-8 1: 45 下面的函数中有一个BUG, 也就是SR2不能用WHILE来轮询,而应直接读出.如下面代码段,因此,在这里说的这是STM32的BUG其实是我的代码的错误:     I2C2 ...

  2. STM32’s I2C 硬件BUG引发的血案(qzm)

    2010-4-8 1: 45 下面的函数中有一个BUG, 也就是SR2不能用WHILE来轮询,而应直接读出.如下面代码段, 因此,在这里说的这是STM32的BUG其实是我的代码的错误:     I2C ...

  3. 基于STC8G2K64S4单片机通过I2C硬件控制OLED屏幕

    #前言 本文主要是讲解了如何使用STC8G2K64S4单片机自带I2C硬件来控制OLED屏幕 写这篇文章主要是为了之后的模拟量光敏调节参数,使参数直接显示在OLED屏幕中更方便调节 在刚学习之时,查遍 ...

  4. 基于I2C硬件协议的AHT20温湿度传感器的数据采集

    基于I2C的温湿度采集 硬件I2C和软件I2C 温湿度采集 任务要求 硬件连接 添加代码 最终效果 硬件I2C和软件I2C 硬件I2C对应芯片上的baiI2C外设,有相应I2C驱动电路,其所使用的I2 ...

  5. HDLBits答案(6)_硬件模块设计的思考方式

    硬件模块设计的思考方式 HDLBits链接 基本的逻辑门操作 题目描述1:将输入端口in和输出端口out连接. Solution1: module top_module (input in,outpu ...

  6. 无线联网功能硬件模块无法拆除的计算机禁止,2021年保密知识竞赛抢答题库及答案(共120题).docx...

    2021年保密知识竞赛抢答题库及答案(共120题) 1 涉密计算机不得安装使用无线键盘.无线鼠标.蓝牙.红外和无线网卡.答案:正确2 涉密便携式计算机应当拆除具有无线联网功能的硬件模块.答案:正确3 ...

  7. 《STM32从零开始学习历程》——I2C向EEPROM写入一字节数据(I2C硬件)

    <STM32从零开始学习历程>@EnzoReventon I2C向EEPROM写入一字节数据(I2C硬件) 相关链接: I2C物理层介绍 I2C协议层介绍 I2C固件库介绍 STM32的I ...

  8. linux优化网页加载过程,【zz】Linux起步过程中硬件模块的加载

    [zz]Linux起步过程中硬件模块的加载 [zz]Linux起步过程中硬件模块的加载 日期:2014-05-16 浏览次数:20354 次 [zz]Linux启动过程中硬件模块的加载 文章来源不详. ...

  9. 拆机观察自己电脑中的各个硬件模块

    目标 最近有需求要运送或邮寄自己的台式机,可能需要拆掉一些部件分开运送.这对于我来说还有些困难,因为我在硬件方面的知识很少,没有自己从零开始装过机.我担心自己拆完之后装不回来... 因此,我想提前进行 ...

最新文章

  1. rocketmq 组监听_最全的RocketMQ学习指南,程序员必备的中间件技能
  2. oracle 多条执行语句同时执行
  3. linux 交叉编译 生成模块 makefile
  4. 使用LiveGBS将GB28181流转成RTSP流上大屏
  5. 一个比较牛的Js写的五子棋
  6. Caused by: java.lang.IncompatibleClassChangeError: Implementing class
  7. USTC 2011 homework list [现代软件工程 作业]
  8. C语言 define 防止头文件重复包含 - C语言零基础入门教程
  9. 翻译:包含列的索引:通往SQL Server索引级别5的阶梯
  10. 手把手教你用C语言实现求质数(素数),5大方法任君挑选
  11. 在Windows下配置svn服务端钩子程序
  12. 2022PMP考试敏捷知识点(2)
  13. 机房工程主要施工方法和机房工程验收
  14. 关于Altium Designer PCB元器件的3D封装
  15. 第三方支付系统简易版支付系统部署
  16. 杭电2154-跳舞毯
  17. 腾讯云TCA运维认证考试题库
  18. 利用网络爬虫爬取知乎回答者的信息及回答内容
  19. 视频背景不好看?想要给视频里的人物抠出来换背景?教你轻松实现
  20. windows10下使用Ubuntu子系统

热门文章

  1. 关于学习Java是应该是自学还是选择培训班
  2. linux执行语句命令done,Linux学习笔记:while…do…done的用法与注意
  3. 无线调试 ADB 使用配对码链接Android
  4. 李嘉诚的经典演讲:打工才是最愚蠢的投资
  5. 投资组合--蒙特卡洛模拟(Python)
  6. mysql 全连接_MySQL全连接(Full Join)实现,union和union all用法
  7. arcmap 线矢量批量提取多图层剖面线
  8. 一图看懂SAP仓储单位SU的应用
  9. 类型多样的线性图标素材,速来收藏
  10. linux开发板测试,Linux 开发板常规测试