久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1128|回復: 0
打印 上一主題 下一主題
收起左側

用stm32讀取6050(4)

[復制鏈接]
跳轉到指定樓層
樓主
ID:335302 發(fā)表于 2018-11-22 17:35 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
不會發(fā)附件   有些被禁止 有些發(fā)不了  算了 還是Ctrlc  ctrlv 吧#include "i2c.h"


void I2C_GPIO_Init(void){ //I2C接口初始化
        GPIO_InitTypeDef  GPIO_InitStructure;        
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC,ENABLE);      
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE); //啟動I2C功能
    GPIO_InitStructure.GPIO_Pin = I2C_SCL | I2C_SDA; //選擇端口號                     
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_OD; //選擇IO接口工作方式      
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //設置IO接口速度(2/10/50MHz)   
        GPIO_Init(I2CPORT, &GPIO_InitStructure);
}

void I2C_Configuration(void){ //I2C初始化
        I2C_InitTypeDef  I2C_InitStructure;
        I2C_GPIO_Init(); //先設置GPIO接口的狀態(tài)
        I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;//設置為I2C模式
        I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
        I2C_InitStructure.I2C_OwnAddress1 = HostAddress; //主機地址(從機不得用此地址)
        I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;//允許應答
        I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit; //7位地址模式
        I2C_InitStructure.I2C_ClockSpeed = BusSpeed; //總線速度設置        
        I2C_Init(I2C1,&I2C_InitStructure);
        I2C_Cmd(I2C1,ENABLE);//開啟I2C                                       
}

void I2C_SAND_BUFFER(u8 SlaveAddr,u8 WriteAddr,u8* pBuffer,u16 NumByteToWrite){ //I2C發(fā)送數(shù)據(jù)串(器件地址,內部地址,寄存器,數(shù)量)
        I2C_GenerateSTART(I2C1,ENABLE);//產生起始位
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)); //清除EV5
        I2C_Send7bitAddress(I2C1,SlaveAddr,I2C_Direction_Transmitter);//發(fā)送器件地址
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//清除EV6
        I2C_SendData(I2C1,WriteAddr); //內部功能地址
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));//移位寄存器非空,數(shù)據(jù)寄存器已空,產生EV8,發(fā)送數(shù)據(jù)到DR既清除該事件
        while(NumByteToWrite--){ //循環(huán)發(fā)送數(shù)據(jù)       
                I2C_SendData(I2C1,*pBuffer); //發(fā)送數(shù)據(jù)
                pBuffer++; //數(shù)據(jù)指針移位
                while (!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));//清除EV8
        }
        I2C_GenerateSTOP(I2C1,ENABLE);//產生停止信號
}
void I2C_SAND_BYTE(u8 SlaveAddr,u8 writeAddr,u8 pBuffer){ //I2C發(fā)送一個字節(jié)(從地址,內部地址,內容)
        I2C_GenerateSTART(I2C1,ENABLE); //發(fā)送開始信號
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)); //等待完成       
        I2C_Send7bitAddress(I2C1,SlaveAddr, I2C_Direction_Transmitter); //發(fā)送從器件地址及狀態(tài)(寫入)
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED)); //等待完成       
        I2C_SendData(I2C1,writeAddr); //發(fā)送從器件內部寄存器地址
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //等待完成       
        I2C_SendData(I2C1,pBuffer); //發(fā)送要寫入的內容
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //等待完成       
        I2C_GenerateSTOP(I2C1,ENABLE); //發(fā)送結束信號
}
void I2C_READ_BUFFER(u8 SlaveAddr,u8 readAddr,u8* pBuffer,u16 NumByteToRead){ //I2C讀取數(shù)據(jù)串(器件地址,寄存器,內部地址,數(shù)量)
        while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
        I2C_GenerateSTART(I2C1,ENABLE);//開啟信號
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));        //清除 EV5
        I2C_Send7bitAddress(I2C1,SlaveAddr, I2C_Direction_Transmitter); //寫入器件地址
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));//清除 EV6
        I2C_Cmd(I2C1,ENABLE);
        I2C_SendData(I2C1,readAddr); //發(fā)送讀的地址
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED)); //清除 EV8
        I2C_GenerateSTART(I2C1,ENABLE); //開啟信號
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT)); //清除 EV5
        I2C_Send7bitAddress(I2C1,SlaveAddr,I2C_Direction_Receiver); //將器件地址傳出,主機為讀
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED)); //清除EV6
        while(NumByteToRead){
                if(NumByteToRead == 1){ //只剩下最后一個數(shù)據(jù)時進入 if 語句
                        I2C_AcknowledgeConfig(I2C1,DISABLE); //最后有一個數(shù)據(jù)時關閉應答位
                        I2C_GenerateSTOP(I2C1,ENABLE);        //最后一個數(shù)據(jù)時使能停止位
                }
                if(I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_RECEIVED)){ //讀取數(shù)據(jù)
                        *pBuffer = I2C_ReceiveData(I2C1);//調用庫函數(shù)將數(shù)據(jù)取出到 pBuffer
                        pBuffer++; //指針移位
                        NumByteToRead--; //字節(jié)數(shù)減 1
                }
        }
        I2C_AcknowledgeConfig(I2C1,ENABLE);
}
u8 I2C_READ_BYTE(u8 SlaveAddr,u8 readAddr){ //I2C讀取一個字節(jié)
        u8 a;
        while(I2C_GetFlagStatus(I2C1,I2C_FLAG_BUSY));
        I2C_GenerateSTART(I2C1,ENABLE);
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
        I2C_Send7bitAddress(I2C1,SlaveAddr, I2C_Direction_Transmitter);
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));
        I2C_Cmd(I2C1,ENABLE);
        I2C_SendData(I2C1,readAddr);
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_BYTE_TRANSMITTED));
        I2C_GenerateSTART(I2C1,ENABLE);
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_MODE_SELECT));
        I2C_Send7bitAddress(I2C1,SlaveAddr, I2C_Direction_Receiver);
        while(!I2C_CheckEvent(I2C1,I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));
        I2C_AcknowledgeConfig(I2C1,DISABLE); //最后有一個數(shù)據(jù)時關閉應答位
        I2C_GenerateSTOP(I2C1,ENABLE);        //最后一個數(shù)據(jù)時使能停止位
        a = I2C_ReceiveData(I2C1);
        return a;
}

/*
選擇IO接口工作方式:
GPIO_Mode_AIN 模擬輸入
GPIO_Mode_IN_FLOATING 浮空輸入
GPIO_Mode_IPD 下拉輸入
GPIO_Mode_IPU 上拉輸入
GPIO_Mode_Out_PP 推挽輸出
GPIO_Mode_Out_OD 開漏輸出
GPIO_Mode_AF_PP 復用推挽輸出
GPIO_Mode_AF_OD 復用開漏輸出
*/



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99久久久国产精品 | 日韩av在线中文字幕 | 午夜欧美| 久久蜜桃资源一区二区老牛 | 欧美一区二区三区在线 | 免费视频成人国产精品网站 | 国产综合视频 | 久草视频观看 | 欧美日韩国产精品激情在线播放 | 精品一区二区三区四区五区 | 国产成人精品免高潮在线观看 | 精品免费国产视频 | 日本午夜免费福利视频 | 国产亚洲久 | 亚洲日本乱码在线观看 | 大学生a级毛片免费视频 | 日日艹夜夜艹 | 久久久久成人精品亚洲国产 | 成人欧美一区二区 | 久久综合狠狠综合久久综合88 | 国产一级在线观看 | 日韩视频在线观看一区二区 | 天天色官网 | 干狠狠| 成人二区 | 一本一道久久a久久精品综合 | 亚洲国产成人精品久久久国产成人一区 | 国产精品久久久久久久久久 | 亚洲欧美国产一区二区三区 | 日韩中文字幕在线观看 | 日韩亚洲一区二区 | 日韩精品一区二区三区在线观看 | 久久国产综合 | 成人字幕网zmw | 欧美国产精品久久久 | 国产成人午夜精品影院游乐网 | 中文字幕国产视频 | 精品在线观看一区二区 | 欧美综合一区 | 麻豆国产一区二区三区四区 | 国产精品永久免费 |