日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

今天是:2025年08月08日(星期五)

2019年08月08日 | STM32F051 I2C slave mode

發(fā)布者:玄幻劍客 來源: eefocus關(guān)鍵字:STM32F051  I2C  slave  mode 手機(jī)看文章 掃描二維碼
隨時(shí)隨地手機(jī)看文章

用STM32F051的I2C從模式做某模塊的控制接口,通過主機(jī)讀狀態(tài)和寫控制命令。


Eclips 環(huán)境,gcc編譯器,相關(guān)源碼如下:


#ifdef DEBUG_I2C_EN

#define DEBUG_I2C(...)      printf(__VA_ARGS__)

#else

#define DEBUG_I2C(...)

#endif

 

void I2C_Config(void)

{

    GPIO_InitTypeDef    GPIO_InitStructure;

    I2C_InitTypeDef     I2C_InitStructure;

    NVIC_InitTypeDef    NVIC_InitStructure;

 

    RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1, ENABLE);

    // I2C port

    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_6 | GPIO_Pin_7;

    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF;

    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

    GPIO_InitStructure.GPIO_OType = GPIO_OType_OD;

    GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_NOPULL;

    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_1);

    GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_1);

 

    // I2C config

    I2C_InitStructure.I2C_Timing               = 0x00731012;

    I2C_InitStructure.I2C_AnalogFilter         = I2C_AnalogFilter_Enable;

    I2C_InitStructure.I2C_DigitalFilter        = 0x00;

    I2C_InitStructure.I2C_Mode                 = I2C_Mode_I2C;

    I2C_InitStructure.I2C_OwnAddress1          = DEV_SLAVE_ADDR;

    I2C_InitStructure.I2C_Ack                  = I2C_Ack_Enable;

    I2C_InitStructure.I2C_AcknowledgedAddress  = I2C_AcknowledgedAddress_7bit;

    I2C_Init(I2C1, &I2C_InitStructure);

    I2C_Cmd(I2C1, ENABLE);

 

    I2C_StretchClockCmd(I2C1, DISABLE);

 

    NVIC_InitStructure.NVIC_IRQChannel         = I2C1_IRQn;

    NVIC_InitStructure.NVIC_IRQChannelPriority = 2; // Low Medium Hight VeryHigh: 0 - 3

    NVIC_InitStructure.NVIC_IRQChannelCmd      = ENABLE;

    NVIC_Init(&NVIC_InitStructure);

 

    uint32_t temp = I2C_IT_STOPI |

                    I2C_IT_ADDRI |

                    I2C_IT_RXI   |

                    I2C_IT_TXI;

    I2C_ITConfig(I2C1, temp, ENABLE);

}

 

 

static uint8_t  Instruct = 0;

static uint8_t  Offset   = 0;

static uint8_t  MaxBytes = 0;

 

uint8_t *TxBuff;

uint8_t RxBuff[40];

 

void I2C1_IRQHandler(void)

{

    uint8_t  temp;

    uint32_t status = I2C1->ISR;

 

    DEBUG_I2C("I2C1->ISR: %08Xnr", status);

    if(status & I2C_ISR_ADDR)

    {   // I2C1 Address match event occurs

        I2C_ClearITPendingBit(I2C1, I2C_ISR_ADDR);

 

        if(status & I2C_ISR_DIR)

        {   // I2C1: slave enters transmitter mode.

            ;

        }

        else

        {   // I2C1: slave enters receiver mode.

            Instruct = 1;

        }

 

        Offset = 0;

    }

    else if(status & I2C_ISR_RXNE)

    {

        I2C1->ISR |= I2C_ISR_TXE;

        temp = I2C_ReceiveData(I2C1);

        if(Instruct)

        {   // Host Instruct

            switch(temp)

            {

                case 0x00:  // Get DevInfo

                    TxBuff = (uint8_t *)&DevInfo;     // 24 bytes

                    MaxBytes = sizeof(DevInfo);

                    break;

                case 0x18:  // Get DevStatus

                    TxBuff = (uint8_t *)&DevStatus;   // 8 bytes

                    MaxBytes = sizeof(DevStatus);

                    break;

                default: break;

            }

 

            Instruct = 0;

        }

 

        RxBuff[Offset++] = temp;

    }

    else if(status & I2C_ISR_TXIS)

    {

        I2C1->ISR |= I2C_ISR_TXE;

        if(Offset < MaxBytes)

        {

            I2C_SendData(I2C1, TxBuff[Offset++]);

        }

        else

        {

            I2C_SendData(I2C1, 0xFF);

        }

    }

    else if(status & I2C_ISR_STOPF)

    {

        I2C_ClearITPendingBit(I2C1, I2C_ISR_STOPF);

        DEBUG_I2C("I2C1 Host stop, Bytes: %dnr", Offset);

        ; // 指令解析

        ;

    }

    else

    {

        I2C_ClearITPendingBit(I2C1, 0x00003F38);

        printf("I2C1 Unknown event occurs!nr");

    }

}



關(guān)鍵字:STM32F051  I2C  slave  mode 引用地址:STM32F051 I2C slave mode

上一篇:STM32學(xué)習(xí)——uCGUI移植
下一篇:【STM32CUBEMX】HAL 庫的 Timeout=1 異常分析

推薦閱讀

智能移動機(jī)器人是現(xiàn)代化車間物流系統(tǒng)的核心裝備,擁有巨大的市場空間。然而,現(xiàn)有的移動機(jī)器人存在著機(jī)動靈活性差與定位導(dǎo)航精度低等問題,制約了移動機(jī)器人的發(fā)展。中國科學(xué)院寧波材料技術(shù)與工程研究所所屬二級所先進(jìn)制造所精密運(yùn)動與先進(jìn)機(jī)器人團(tuán)隊(duì)針對上述問題開展了深入研究,近期開發(fā)出一套基于全向移動機(jī)器人的自動化車間物流系統(tǒng),并成功應(yīng)用于某...
國行首款5G手機(jī)中興AXON 10 Pro 5G版12GB+256GB在京東限量開售,售價(jià)5799元。比華為Mate 20 X 5G版價(jià)格低400元(Mate 20 X 5G版售價(jià)6199元,8GB+256GB)。但相比華為Mate 20 X 5G版預(yù)約量并不高。華為Mate 20 X 5G版8GB+256GB售價(jià)6199元,現(xiàn)在京東預(yù)約量已超過17萬,官網(wǎng)更是超過26萬,而中興AXON 10 Pro 5G版6GB+128GB的預(yù)約量也只有5...
觸摸按鍵的實(shí)現(xiàn)主要是通過檢測板級系統(tǒng)上構(gòu)建的RC振蕩電路在固定時(shí)間內(nèi)的振蕩次數(shù),如果振蕩次數(shù)發(fā)生明顯變化,則判斷為觸摸狀態(tài)。那么振蕩次數(shù)主要是由RC的值決定,在系統(tǒng)中R值是固定的,而電容C即系統(tǒng)的中的傳感器,是由PCB layout的一個(gè)尺寸與手指大小的覆銅片。其與周圍的地層構(gòu)建一個(gè)電容值微小的電容(大約為10pF)。當(dāng)手指接近會改變其介電常數(shù),...
8月6日,光學(xué)零件大廠亞洲光學(xué)披露了上半年財(cái)報(bào),上半年實(shí)現(xiàn)營收99.57億元,毛利率20.48%,年增3.65個(gè)百分點(diǎn),稅后純益6.87億元,已大幅超越2020年全年獲利,年增12倍,每股純益為2.44元。亞光認(rèn)為,在多元產(chǎn)品優(yōu)勢效益之下,第三季旺季展望樂觀。同時(shí),其第二季營收52.28億元,毛利率20.48%,季增0.04個(gè)百分點(diǎn),年增1.1個(gè)百分點(diǎn),稅后純益為3.83 億元,...

史海拾趣

問答坊 | AI 解惑

MSP430系列FLASH型超低功耗16位單片機(jī).rarrar

MSP430系列FLASH型超低功耗16位單片機(jī).…

查看全部問答∨

常用電子元器件的檢測

常用電子元器件的檢測…

查看全部問答∨

基于MATLAB的有源濾波器研究

中心議題: 以三相電路瞬時(shí)無功功率理論為基礎(chǔ),建立有源濾波器模型應(yīng)用MATLAB對其在某煤礦主提升機(jī)諧波治理方面的應(yīng)用進(jìn)行仿真驗(yàn)證 解決方案: 采用有源濾波器,可根據(jù)每個(gè)設(shè)備負(fù)載無功的變化進(jìn)行動態(tài)補(bǔ)償諧波源模塊是根據(jù)主提升機(jī)房實(shí)際諧波測 ...…

查看全部問答∨

ARM中除法要如何實(shí)現(xiàn)?

請問在ARM匯編中除法要如何實(shí)現(xiàn)?例如:求一組數(shù)的平均值?要怎么實(shí)現(xiàn)?…

查看全部問答∨

vs2005開發(fā)PDA,調(diào)試程序時(shí),用模擬器實(shí)驗(yàn),連數(shù)據(jù)庫IP地址設(shè)置為127.0.0.1用戶sa密碼為空,為什么連接不上,請指點(diǎn)。

vs2005開發(fā)PDA,調(diào)試程序時(shí),用模擬器實(shí)驗(yàn),連數(shù)據(jù)庫IP地址設(shè)置為127.0.0.1用戶sa密碼為空,為什么連接不上,請指點(diǎn)?!?

查看全部問答∨

基于LaunchPad的【低功耗時(shí)鐘】我的DIY~~~~【【技術(shù)討論帖】】

 東西的視頻照片在這個(gè)帖子里:https://bbs.eeworld.com.cn/viewthread.php?tid=309715&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D66 這次DIY其實(shí)已經(jīng)計(jì)劃了好長時(shí)間了,自從買了LaunchPad就一直想做點(diǎn)什么。后來論壇里 ...…

查看全部問答∨

有沒有關(guān)于MSP430F5438對AD轉(zhuǎn)換這方面的資料?

畢業(yè)論文需要用MSP430F5438來完成AD轉(zhuǎn)換。之前對MSP430F5438一竅不通,我知道MSP430F5438能完成很多功能,我只需要一些關(guān)于AD轉(zhuǎn)換的資料。有沒有人有?。抗蚕硪幌挛? [ 本帖最后由 adam136 于 2012-2-18 22:12 編輯 ]…

查看全部問答∨

1.5V干電池升壓到3.6V/6A,請問如何做擴(kuò)流電路?謝謝

用干電池,1.5V和3V輸入,升壓到3.6V,電流最大到6A,請問應(yīng)該如何做?希望有朋友可以指點(diǎn)一下,謝謝 我是想,不知下邊兩種方法是否可行: 如圖1,就是加大電感和場效應(yīng)管的電流通量, 或者如下圖,用達(dá)林頓管放大電流 …

查看全部問答∨

請教下各位大俠 這個(gè)cpld脈沖怎么輸出附圖!

一開始發(fā)送30ms的高電平,然后再發(fā)送15ms一周期的脈沖波,占空比是2/3,假設(shè)時(shí)鐘是1kHz。困擾我很長時(shí)間了,希望各位大俠能給我指點(diǎn)一二萬分感謝??!…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved