根据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. 三星电池正在获取使用模式_三星Galaxy S10系列超大电池持久动力,解决电量烦恼...
  2. DeepMind网红博士300页论文出炉:面向NLP的神经迁移学习
  3. Javascript prototype理解
  4. 为什么static成员必须在类外初始化
  5. python-tkinter模块图形分布移动(可键盘操作)
  6. 使用TestContainers进行数据库测试
  7. 【Kafka】docker下kafka报错 IOException: Connection to xxx:19093 (id: 1002 rack: null) failed
  8. 苹果手机投屏软件_苹果手机怎么投屏到电脑上?支你一招
  9. kernal tch 下载 天正_【T20天正插件下载】T20天正插件最新版 v5.0 官方版-开心电玩...
  10. python 使用前馈神经网络处理IrIs数据集(BP)
  11. steam链接社区_如何通过Steam链接上的Xbox One控制器启用振动
  12. POI2000 病毒
  13. [转]机器视觉代码大全
  14. 自适应情侣纪念日记录网站源码
  15. 步步学习自定义View:Hencoder 精简版学习笔记(一)
  16. SSM+社区线上超市购物系统毕业设计-附源码211704
  17. Java mail 535鉴权失败或启动报错
  18. jquery操作样式
  19. 使用unity3d制作像素鸟游戏
  20. 整顿职场,从 ROC 曲线开始

热门文章

  1. php电销源码部署,【独家分享】最新价值4800接单运营版电销语音机器人完整版源码+文字安装教程...
  2. C语言实现扫雷(含展开,附源码)
  3. ​盘点几款国内外安全稳定的域名解析平台​
  4. 免费报名,好礼相送丨年度钜献ACOUG年会北京站邀你同行 内附大会全议程
  5. python 设计模式-2
  6. 网页中将Flash设为透明
  7. 只需几十行代码就可绘制酷炫的数据大屏,这个可视化框架真的绝了
  8. epass 1000ND 使用心得
  9. 什么是ROM-BIOS
  10. 女大学生创业卖粽子,日营业额1500元