国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

STM32F407系列硬件I2C筆記

這篇具有很好參考價(jià)值的文章主要介紹了STM32F407系列硬件I2C筆記。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

STM32F407系列有3個(gè)硬件I2C:

I2C1:該接口位于GPIOB引腳上,包括PB6(I2C1_SCL)和PB7(I2C1_SDA)。

I2C2:該接口位于GPIOB引腳上,包括PB10(I2C2_SCL)和PB11(I2C2_SDA)。

I2C3:該接口位于GPIOA和GPIOC引腳上,包括PA8(I2C3_SCL)和PC9(I2C3_SDA)。
?

硬件I2C的速度比軟件I2C更快,硬件I2C通??梢赃_(dá)到幾百kHz甚至更高的速度,軟件I2C幾十kHz

I2C1.C文件

#include "I2C1.h"


// I2C1初始化函數(shù)
void I2C1_Init(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    I2C_InitTypeDef I2C_InitStructure;
    
    // 使能GPIOB和I2C1時(shí)鐘
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);
    
    // 配置GPIOB的引腳為復(fù)用模式
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    
    // 配置引腳復(fù)用映射
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_I2C1);  // SCL
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_I2C1);  // SDA
    
    // 配置I2C1
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = 0x00;  // 設(shè)置自身設(shè)備地址
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_InitStructure.I2C_ClockSpeed = 100000;  // 設(shè)置通信速度,這里為100kHz
    
    I2C_Init(I2C1, &I2C_InitStructure);
    I2C_Cmd(I2C1, ENABLE);
}




void I2C1_Start(void)
{
    I2C_GenerateSTART(I2C1, ENABLE);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_MODE_SELECT));
}

void I2C1_Stop(void)
{
    I2C_GenerateSTOP(I2C1, ENABLE);
    while (I2C_GetFlagStatus(I2C1, I2C_FLAG_STOPF));
}

void I2C1_SendData(uint8_t slaveAddr, uint8_t* data, uint8_t len)
{
    I2C1_Start();
    I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED));

    for (uint8_t i = 0; i < len; i++)
    {
        I2C_SendData(I2C1, data[i]);
        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_TRANSMITTED));
    }

    I2C1_Stop();
}

void I2C1_ReceiveData(uint8_t slaveAddr, uint8_t* data, uint8_t len)
{
    I2C1_Start();
    I2C_Send7bitAddress(I2C1, slaveAddr, I2C_Direction_Receiver);
    while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

    for (uint8_t i = 0; i < len; i++)
    {
        if (i == len - 1)
            I2C_AcknowledgeConfig(I2C1, DISABLE);

        while (!I2C_CheckEvent(I2C1, I2C_EVENT_MASTER_BYTE_RECEIVED));
        data[i] = I2C_ReceiveData(I2C1);
    }

    I2C1_Stop();
}


I2C1.H文件

#ifndef __I2C1_H
#define __I2C1_H
#include "sys.h" 


void I2C1_Init(void);// I2C1初始化函數(shù)
void I2C1_Start(void);
void I2C1_Stop(void);
void I2C1_SendData(uint8_t slaveAddr, uint8_t* data, uint8_t len);
void I2C1_ReceiveData(uint8_t slaveAddr, uint8_t* data, uint8_t len);


#endif



I2C2.C文件

#include "I2C2.h"



// I2C2初始化函數(shù)
void I2C2_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    I2C_InitTypeDef I2C_InitStructure;

    // 打開(kāi)I2C2和GPIOB的時(shí)鐘
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C2, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);

    // 配置GPIOB的引腳為I2C2功能
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10 | GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    // 配置GPIO引腳復(fù)用功能
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource10, GPIO_AF_I2C2);
    GPIO_PinAFConfig(GPIOB, GPIO_PinSource11, GPIO_AF_I2C2);

    // I2C2配置
    I2C_InitStructure.I2C_ClockSpeed = 100000;  // 設(shè)置時(shí)鐘速度為100kHz
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = 0x00;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_Init(I2C2, &I2C_InitStructure);

    // 使能I2C2
    I2C_Cmd(I2C2, ENABLE);
}

// I2C2發(fā)送數(shù)據(jù)函數(shù)
void I2C2_WriteData(uint8_t address, uint8_t reg, uint8_t data)
{
    // 等待I2C2處于空閑狀態(tài)
    while (I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY))
        ;

    // 發(fā)送START信號(hào)
    I2C_GenerateSTART(I2C2, ENABLE);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT))
        ;

    // 發(fā)送目標(biāo)設(shè)備地址和寫(xiě)指令
    I2C_Send7bitAddress(I2C2, address, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
        ;

    // 發(fā)送寄存器地址
    I2C_SendData(I2C2, reg);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
        ;

    // 發(fā)送數(shù)據(jù)
    I2C_SendData(I2C2, data);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
        ;

    // 發(fā)送STOP信號(hào)
    I2C_GenerateSTOP(I2C2, ENABLE);
}

// I2C2接收數(shù)據(jù)函數(shù)
uint8_t I2C2_ReadData(uint8_t address, uint8_t reg)
{
    uint8_t data;

    // 等待I2C2處于空閑狀態(tài)
    while (I2C_GetFlagStatus(I2C2, I2C_FLAG_BUSY))
        ;

    // 發(fā)送START信號(hào)
    I2C_GenerateSTART(I2C2, ENABLE);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT))
        ;

    // 發(fā)送目標(biāo)設(shè)備地址和寫(xiě)指令
    I2C_Send7bitAddress(I2C2, address, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
        ;

    // 發(fā)送寄存器地址
    I2C_SendData(I2C2, reg);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
        ;

    // 重新發(fā)送START信號(hào),切換到接收模式
    I2C_GenerateSTART(I2C2, ENABLE);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT))
        ;

    // 發(fā)送目標(biāo)設(shè)備地址和讀指令
    I2C_Send7bitAddress(I2C2, address, I2C_Direction_Receiver);
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
        ;

    // 開(kāi)啟ACK
    I2C_AcknowledgeConfig(I2C2, ENABLE);

    // 接收數(shù)據(jù)
    while (!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_BYTE_RECEIVED))
        ;
    data = I2C_ReceiveData(I2C2);

    // 發(fā)送STOP信號(hào)
    I2C_GenerateSTOP(I2C2, ENABLE);

    return data;
}




I2C2.h文件

#ifndef __I2C2_H
#define __I2C2_H
#include "sys.h" 


// I2C2初始化函數(shù)
void I2C2_Init(void);

// I2C2發(fā)送數(shù)據(jù)函數(shù)
// 參數(shù):
//   address: 目標(biāo)設(shè)備地址
//   reg: 寄存器地址
//   data: 要發(fā)送的數(shù)據(jù)
void I2C2_WriteData(uint8_t address, uint8_t reg, uint8_t data);

// I2C2接收數(shù)據(jù)函數(shù)
// 參數(shù):
//   address: 目標(biāo)設(shè)備地址
//   reg: 寄存器地址
// 返回值:
//   讀取到的數(shù)據(jù)
uint8_t I2C2_ReadData(uint8_t address, uint8_t reg);




#endif


I2C3.C文件

#include "I2C3.h"

// I2C3初始化函數(shù)
void I2C3_Init(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    I2C_InitTypeDef I2C_InitStructure;

    // 打開(kāi)I2C3和GPIOA的時(shí)鐘
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C3, ENABLE);
    RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);

    // 配置GPIOA的引腳為I2C3功能
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置GPIO引腳復(fù)用功能
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource8, GPIO_AF_I2C3);
    GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_I2C3);

    // I2C3配置
    I2C_InitStructure.I2C_ClockSpeed = 100000;  // 設(shè)置時(shí)鐘速度為100kHz
    I2C_InitStructure.I2C_Mode = I2C_Mode_I2C;
    I2C_InitStructure.I2C_DutyCycle = I2C_DutyCycle_2;
    I2C_InitStructure.I2C_OwnAddress1 = 0x00;
    I2C_InitStructure.I2C_Ack = I2C_Ack_Enable;
    I2C_InitStructure.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
    I2C_Init(I2C3, &I2C_InitStructure);

    // 使能I2C3
    I2C_Cmd(I2C3, ENABLE);
}

// I2C3發(fā)送數(shù)據(jù)函數(shù)
void I2C3_WriteData(uint8_t address, uint8_t reg, uint8_t data)
{
    // 等待I2C3處于空閑狀態(tài)
    while (I2C_GetFlagStatus(I2C3, I2C_FLAG_BUSY))
        ;

    // 發(fā)送START信號(hào)
    I2C_GenerateSTART(I2C3, ENABLE);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_MODE_SELECT))
        ;

    // 發(fā)送目標(biāo)設(shè)備地址和寫(xiě)指令
    I2C_Send7bitAddress(I2C3, address, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
        ;

    // 發(fā)送寄存器地址
    I2C_SendData(I2C3, reg);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
        ;

    // 發(fā)送數(shù)據(jù)
    I2C_SendData(I2C3, data);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
        ;

    // 發(fā)送STOP信號(hào)
    I2C_GenerateSTOP(I2C3, ENABLE);
}

// I2C3接收數(shù)據(jù)函數(shù)
uint8_t I2C3_ReadData(uint8_t address, uint8_t reg)
{
    uint8_t data;

    // 等待I2C3處于空閑狀態(tài)
    while (I2C_GetFlagStatus(I2C3, I2C_FLAG_BUSY))
        ;

    // 發(fā)送START信號(hào)
    I2C_GenerateSTART(I2C3, ENABLE);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_MODE_SELECT))
        ;

    // 發(fā)送目標(biāo)設(shè)備地址和寫(xiě)指令
    I2C_Send7bitAddress(I2C3, address, I2C_Direction_Transmitter);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED))
        ;

    // 發(fā)送寄存器地址
    I2C_SendData(I2C3, reg);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_BYTE_TRANSMITTED))
        ;

    // 重新發(fā)送START信號(hào),切換到接收模式
    I2C_GenerateSTART(I2C3, ENABLE);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_MODE_SELECT))
        ;

    // 發(fā)送目標(biāo)設(shè)備地址和讀指令
    I2C_Send7bitAddress(I2C3, address, I2C_Direction_Receiver);
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED))
        ;

    // 開(kāi)啟ACK
    I2C_AcknowledgeConfig(I2C3, ENABLE);

    // 接收數(shù)據(jù)
    while (!I2C_CheckEvent(I2C3, I2C_EVENT_MASTER_BYTE_RECEIVED))
        ;
    data = I2C_ReceiveData(I2C3);

    // 發(fā)送STOP信號(hào)
    I2C_GenerateSTOP(I2C3, ENABLE);

    return data;
}

I2C3.h文件文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-759586.html

#ifndef __I2C3_H
#define __I2C3_H
#include "sys.h" 


// I2C3初始化函數(shù)
void I2C3_Init(void);

// I2C3發(fā)送數(shù)據(jù)函數(shù)
// 參數(shù):
//   address: 目標(biāo)設(shè)備地址
//   reg: 寄存器地址
//   data: 要發(fā)送的數(shù)據(jù)
void I2C3_WriteData(uint8_t address, uint8_t reg, uint8_t data);

// I2C3接收數(shù)據(jù)函數(shù)
// 參數(shù):
//   address: 目標(biāo)設(shè)備地址
//   reg: 寄存器地址
// 返回值:
//   讀取到的數(shù)據(jù)
uint8_t I2C3_ReadData(uint8_t address, uint8_t reg);



#endif

到了這里,關(guān)于STM32F407系列硬件I2C筆記的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【STM32】入門(mén)(七):I2C硬件控制方式

    【STM32】入門(mén)(七):I2C硬件控制方式

    之所以叫“I2C硬件控制方式”是與“軟件控制方式”相對(duì)。I2C軟件控制,就是寫(xiě)程序直接操作兩個(gè)GPIO引腳,分別作為時(shí)鐘線SCL和數(shù)據(jù)線SDA,按照I2C協(xié)議的時(shí)序要求,操作GPIO輸入、輸出、高電平、低電平。 聽(tīng)著就很復(fù)雜,好在STM32中有I2C的硬件實(shí)現(xiàn),即通過(guò)簡(jiǎn)單的操作寄存器

    2023年04月08日
    瀏覽(26)
  • STM32 HAL FreeRTOS 硬件I2C 使用

    STM32 HAL FreeRTOS 硬件I2C 使用

    因?yàn)槟硞€(gè)項(xiàng)目想要顏色識(shí)別,去識(shí)別球的顏色,但是又不想多來(lái)個(gè)攝像頭,所以想嘗試一下顏色傳感器的方案。但是經(jīng)過(guò)嘗試,HAL庫(kù)生成的 FreeRTOS 硬件 I2C 讀寫(xiě)一直在報(bào)錯(cuò)。 剛好手頭上有九軸陀螺儀的例程代碼。最后用FreeRTOS 硬件 I2C 讀取數(shù)據(jù)。 這里提到了阻塞式 HAL 函數(shù)(

    2024年02月20日
    瀏覽(22)
  • STM32 SHT40驅(qū)動(dòng)源碼(使用硬件I2C)

    STM32 SHT40驅(qū)動(dòng)源碼(使用硬件I2C)

    目錄 簡(jiǎn)介: SHT40.c: SHT40.h 測(cè)試結(jié)果: ? ? ? ? SHT40是瑞士Sensirion公司推出的第四代溫濕度傳感器,內(nèi)部集成加熱器用于去除表面微小液滴。集成I2C接口,典型的相對(duì)濕度精度1.8%RH,典型溫度精度0.2℃,運(yùn)行在0-100%RH和-40-125℃的環(huán)境中。 主控:STM32H7B0VBT6 平臺(tái):STM32CubeIDE SHT4

    2024年03月19日
    瀏覽(131)
  • 【STM32學(xué)習(xí)】——STM32-I2C外設(shè)&硬件讀寫(xiě)MPU6050&軟硬件讀寫(xiě)波形對(duì)比

    目錄 前言 一、I2C外設(shè) 二、硬件I2C操作流程 1.主機(jī)發(fā)送時(shí)序 3.其他時(shí)序

    2024年02月10日
    瀏覽(30)
  • STM32 硬件IIC 控制OLED I2C卡死問(wèn)題

    STM32 硬件IIC 控制OLED I2C卡死問(wèn)題

    #更新通知:2023-09-06 STM32L151 固件庫(kù) 使用I2C 太難了,又宕機(jī)了,建議不要在固件庫(kù)版本上嘗試硬件IIC 了,一般人真用不了,直接使用軟件模擬的,或者不要使用固件庫(kù)了,用HAL 庫(kù)吧,據(jù)說(shuō)HAL 庫(kù)沒(méi)這么多問(wèn)題,不死心的我還是死心了,等有空再研究吧 3.1 I2C模式,我這里選的

    2024年02月09日
    瀏覽(33)
  • S32K3系列 --- 硬件I2C Mcal配置

    S32K3系列 --- 硬件I2C Mcal配置

    網(wǎng)上看到很多I2C的教程,基本都是模擬I2C,現(xiàn)在S32K3的芯片支持硬件I2C,我想著就配一個(gè)硬件的出來(lái)吧,這邊記錄一下,供大家學(xué)習(xí)。 這里主要教大家如何去配置,去使用。 原理的話(huà)可以參考這篇文章: 一文搞懂I2C通信總線_i2c通信的詳細(xì)講解-CSDN博客 I2C時(shí)序 這里我們用I2C與

    2024年01月18日
    瀏覽(127)
  • STM32配合cubeMX硬件I2C驅(qū)動(dòng)0.96寸OLED

    STM32配合cubeMX硬件I2C驅(qū)動(dòng)0.96寸OLED

    目錄 一、簡(jiǎn)單介紹 1.1? ?OLED 1.2? ?I2C協(xié)議 二、實(shí)戰(zhàn) 2.1 工程配置 2.2 測(cè)試工程 2.3 波形分析 三、驅(qū)動(dòng)OLED 3.1?初始化代碼 3.2 清屏函數(shù) 3.3 設(shè)置坐標(biāo)函數(shù) 3.4 顯示字符函數(shù) 3.5 顯示字符串函數(shù) 3.6 顯示圖片函數(shù) 附錄 驅(qū)動(dòng)代碼文件 oled.c oled.h f6x8.h 有機(jī)發(fā)光二極管 (英語(yǔ):Organic

    2024年02月08日
    瀏覽(39)
  • 01_STM32軟件+硬件I2C讀取MPU6050(HAL庫(kù))

    01_STM32軟件+硬件I2C讀取MPU6050(HAL庫(kù))

    目錄 1、I2C簡(jiǎn)介 2、I2C時(shí)序單元 2.1 起始條件 2.2 終止條件 2.3 發(fā)送一個(gè)字節(jié) 2.4 接收一個(gè)字節(jié) 2.5 發(fā)送應(yīng)答 2.6 接收應(yīng)答 3、I2C完整時(shí)序 3.1 指定地址寫(xiě)一個(gè)字節(jié) 3.2 當(dāng)前地址讀一個(gè)字節(jié) 3.2?指定地址讀一個(gè)字節(jié) 4、簡(jiǎn)單軟件I2C代碼(HAL) 4.1 軟件I2C 4.2 軟件I2C讀MPU6050寄存器 5、ST

    2024年04月17日
    瀏覽(28)
  • RT-Thread在STM32硬件I2C的踩坑記錄

    RT-Thread在STM32硬件I2C的踩坑記錄

    參考文章: 1.將硬件I2C巧妙地將“嫁接”到RTT原生的模擬I2C驅(qū)動(dòng)框架 2.基于STM32F4平臺(tái)的硬件I2C驅(qū)動(dòng)實(shí)現(xiàn)筆記 3.《rt-thread驅(qū)動(dòng)框架分析》- i2c驅(qū)動(dòng) ??最近打算用RT-Thread做一個(gè)小demo玩玩,其中需要用I2C通信驅(qū)動(dòng)一個(gè)oled屏幕,但是找了一圈也沒(méi)找到RTT中對(duì)硬件I2C的支持方式以及

    2024年02月11日
    瀏覽(27)
  • STM32學(xué)習(xí)筆記(十)丨I2C通信(使用I2C實(shí)現(xiàn)MPU6050和STM32之間通信)

    STM32學(xué)習(xí)筆記(十)丨I2C通信(使用I2C實(shí)現(xiàn)MPU6050和STM32之間通信)

    ???本次課程采用單片機(jī)型號(hào)為STM32F103C8T6。(鑒于筆者實(shí)驗(yàn)時(shí)身邊只有STM32F103ZET6,故本次實(shí)驗(yàn)使基于ZET6進(jìn)行的) ???課程鏈接:江協(xié)科技 STM32入門(mén)教程 ??往期筆記鏈接: ??STM32學(xué)習(xí)筆記(一)丨建立工程丨GPIO 通用輸入輸出 ??STM32學(xué)習(xí)筆記(二)丨STM32程序調(diào)試

    2024年01月19日
    瀏覽(26)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包