版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include,myiic.hn#includedelay.hu8isBMI160=0,isPMU6050=0;voidl2C_delay(void)_NOP();初始化lievoidllCJnit(void)RCC-APB2ENR|=13;/先使能外设10PORTB时钟GPIOB-CRH&二OXFFFFOOFF;/PB1/11推挽输出GPIOB-CRH|=0X00003300;GPIOB-ODR|=310;/PB10J1输出高/lie起始信号u8IIC_Start(void)#ifdefBMI160SDA_H;SCL.H;l2C_delay();if(!SDA_read)returnFAL
2、SE;/SDA线为低电平则总线忙,退出SDA_L;l2C_delay();if(SDA_read)returnFALSE;/SDA线为高电平则总线岀错,退出SDA_L;l2C_delay();#elseSDA_OUT();/sda线输出IIC_SDA=1;IIC_SCL=1;Delay_us(l2C_Delayus);IIC_SDA=0;/START:whenCLKishigh,DATAchangeformhightolowDelay_us(l2C_Delayus);IIC_SCL=O;/钳住IIC总线,准备发送或接收数据#endif/lie停止信号voidIIC_Stop(void)#ifd
3、efBMI160SCL.L;l2C_delay();SDA_L;l2C_delay();SCL.H;l2C_delay();SDA_H;l2C_delay();#elseSDA_OUT();/sda线输出IIC_SCL=0;IIC_SDA=0;/STOP:whenCLKishighDATAchangeformlowtohighDelay_us(l2C_Delayus);IIC_SCL=1;IIC_SDA=1;/发送IIC总线结束信号Delay_us(l2C_Delayus);#endif*FunctionName:l2C_NoAckDescriptionInputOutputReturn:Ma
4、sterSendNoAcknowledgeSingle:None:None:None*/voidl2C_NoAck(void)#ifdefBMI160SCL_L;l2C_delay();SDA_H;l2C_delay();SCL_H;l2C_delay();SCL.L;l2C_delay();#elseIIC_SCL=O;l2C_delay();IIC_SDA=1;l2C_delay();IIC_SCL=1;l2C_delay();IIC_SCL=O;l2C_delay();#endif/)K*p*p*p)K*p*p*p*p*p*p)K*4c*4c*p)c*4c*p/lie发送应答信号入【I参
5、数:ack(O:ACKl:NAK)/)K*p*p*p)K*p*p*p*p*p*p)K*4c*4c*p)c*4c*pvoidIIC_SendACK(void)#ifdefBMI160SCL_L;l2C_delay();SDA_L;l2C_delay();SCL.H;l2C_delay();SCL_L;l2C_delay();写应答信号拉高时钟线延时拉低时钟线延时#elseIIC_SDA=1;IIC_SCL=1;Delay_us(5);IIC_SCL=O;Delay_us(5);#endif/)K*p*p*p)K*p*p*p*p*p*p)K*4c*4c*p)c*4c*p/lie接收应答信号/)K*
6、p*p*p)K*p*p*p*p*p*p)K*4c*4c*p)c*4c*pu8IIC_RecvACK(void)#ifdefBMI160SCL_L;l2C_delay();SDA_H;l2C_delay();SCL.H;l2C_delay();if(SDA_read)SCL.L;l2C_delay();returnFALSE;SCL_L;l2C_delay();return0;#elseu8ucErrTime=0;SDAJN();/SDA设置为输入IIC_SDA=l;Delay_us(l2C_Delayus);IIC_SCL=l;Delay_us(l2C_Delayus);while(READ_
7、SDA)ucErrTime+;if(ucErrTime250)IIC_Stop();return1;IIC_SCL=O;时钟输出0return0;#endif向lie总线发送一个字节数据/4c*p*p*p)K*p*p*p*p*p*4c*4c*p)K*4c*)K*p)K*4c*pvoidIIC_SendByte(u8dat)#ifdefBMI160u8i=8;while(i-)SCL.L;l2C_delay();if(dat&0 x80)SDA_H;elseSDA_L;dat=l;l2C_delay();SCL_H;l2C_delay();SCL_L;#elseu81;SDA_OUT();IIC
8、_SCL=O;/拉低时钟开始数据传输for(t=0;t7;dat=l;Delay_us(l2C_Delayus);对TEA5767这三个延时都是必须的IIC_SCL=1;Delay_us(l2C_Delayus);IIC_SCL=O;Delay_us(l2C_Delayus);IIC_RecvACK();#endif从lie总线接收一个字节数据u8IIC_RecvByte(void)#ifdefBMI160u8i=8;u8ReceiveByte=O;SDA_H;while(i-)ReceiveByte=l;SCL.L;l2C_delay();SCL_H;l2C_delay();if(SDA_r
9、ead)ReceiveByte|=0 x01;SCL_L;returnReceiveByte;#elseunsignedcharizreceive=O;SDA_IN();/SDA设置为输入for(i=0;iIIC_Start()/UART:l_Put_Char;returnFALSE;IIC_SendByte(SlaveAddress);/l2C_SendByte(REG_Address&0 x0700)7)|REG_Address&OxFFFE);设置高起始地址+器件地址if(川C_RecvACK()IIC_Stop();returnFALSE;IIC_SendByte(u8)REG_Add
10、ress);设置低起始地址IIC_RecvACK();IIC_Start();IIC_SendByte(SlaveAddress+l);IIC_RecvACK();REG_data=IIC_RecvByte();l2C_NoAck();IIC_Stop();/returnTRUE;returnREG_data;#elseu8REG_data;IIC_Start();IIC_SendByte(SlaveAddress);IIC_SendByte(REG_Address);IIC_Start();IIC_SendByte(SlaveAddress+l);REG_data=IIC_RecvByte(
11、);IIC_SendACK();IIC_Stop();returnREG_data;#endif起始信号发送设备地址+写信号发送存储单元地址,从0开始起始信号发送设备地址+读信号读出寄存器数据接收应答信号停止信号ThisisasamplecodeforreadandwritethedatabyusingI2C/SPIUseeitherI2CorSPIbasedonyourneedConfigurethebelowcodetoyourSPIorI2Cdriver*/*Brief:ThefunctionisusedasI2CbusreadReturn:StatusoftheI2Creadparam
12、dev_addr:Thedeviceaddressofthedeviceparamreg_addr:Addressoftheregisterparamreg_data:Thevalueoftheregisterparament:Thenoofdatatoberead*/s8i2c_bus_read(u8dev_addrzu8reg_addrzu8*reg_data,u8ent)#ifdefBMI160u8i;/起始信号IIC_Start();/发送设备地址IIC_SendByte(dev_addr);IIC_RecvACK();发送存储单元地址IIC_SendByte(reg_addr);II
13、C_RecvACK();/起始信号IIC_Start();发送设备地址+读信号IIC_SendByte(dev_addr+l);IIC_RecvACK();连续读取6个地址数据,存储中BUF/BUF0存储数据最后一个数据需要回回应ACK停止信号for(i=0;icnt;i+)*(reg_data+i)=IIC_RecvByte();if(i=cnt-1)l2C_NoAck();NOACKelseIIC_SendACK();IIC_Stop();l2C_delay();return0;#elses32ierror=0;u8stringpos=0;IIC_Start();IIC_SendByte(
14、dev_addr);IIC_SendByte(reg_addr);起始信号发送设备地址+写信号发送存储单元地址,从0开始IIC_Start();IIC_SendByte(dev_addr+l);起始信号发送设备地址+读信号for(stringpos=0;stringposent;stringpos+)reg_datastringpos=IIC_RecvByte();读出寄存器数据IIC_SendACK();接收应答信号IIC_Stop();停止信号return(s8)ierror;#endif/*Brief:ThefunctionisusedasI2CbuswriteReturn:StatusoftheI2Cwriteparamdev_addr:Thedeviceaddressofthedeviceparamreg_addr:Addressoftheregisterparamreg_data:Thevalueoftheregisterparament:Thenoofdatatoberead*/s8i2c_bus_write(u8dev_addou8reg_addGu8*reg_data,u8ent)s32ierror=0;u8stringpos=0;IIC
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合规转利润:降本增效全指南(2026)《GBT 35909-2018猪肺炎支原体PCR检测方法》
- 奶油行业的影响分析报告
- 政策风险防控与医院绩效适应性调整
- 智能电网与绿色能源人工智能在电力系统中的应用研究报告
- AI辅助下心外科手术术式优化
- 医院政风行风年底工作总结
- 河南省青桐鸣2027届高三上学期9月2-3日学情调研 物理
- 拉片分析实操题库:10个经典段落限时分析训练
- 2025届阳江市阳春市数学三下期末监测模拟试题含解析
- 2026年索尔维(中国)校招试题及答案
- 超声波化学应用原理与技术进展
- 4-11-01-01 国家职业标准供电服务员 (2025年版)
- 鞋材厂环保培训
- 应急物流管理 课件 第4-7章 应急物资的需求预测与储备-应急供应链
- 2025年广东省广州美术学院招聘事业编综合岗27人历年高频重点提升(共500题)附带答案详解
- 电烙铁焊接培训资料
- 2024年湖南省公民信息管理局招聘笔试冲刺题含答案解析
- pk摇粒绒的工艺
- 缺血性心肌病护理查房课件
- 智能家居设备安装与调试高职全套教学课件
- 工资条(标准模版)
评论
0/150
提交评论