色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

 

基于華清遠(yuǎn)見STM32f051的 IIC從模式實現(xiàn)方法

作者:盧老師,華清遠(yuǎn)見教育科技集團講師。

在大多情況下,我們使用MCU控制傳感器,節(jié)點以及相關(guān)從設(shè)備,但在較為復(fù)雜的系統(tǒng)中,有時候也會使用MCU做為從設(shè)備。

下面是關(guān)于stm32f051的從模式實現(xiàn)方法,主要思路為從設(shè)備從中斷里面接受 IIC主設(shè)備發(fā)送的數(shù)據(jù),并加以處理。

下圖為STM32F051的小系統(tǒng):

IIC從模式 GPIO的配置

根據(jù)原理圖查ST32F051的datasheet

配置引腳:

void I2C_GPIO_Configuration(void)
        {
                GPIO_InitTypeDefGPIO_InitStruct;
        
                /* Enable GPIOA clock */
                RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOB, ENABLE);
                /*!< sEE_I2C Periph clock enable */
                RCC_APB1PeriphClockCmd(RCC_APB1Periph_I2C1 , ENABLE);
                /*!< GPIO configuration */
                /*!< Configure sEE_I2C pins: SCL */
                GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8;
                GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF;//GPIO_Mode_IN
                GPIO_InitStruct.GPIO_Speed = GPIO_Speed_Level_3;
                GPIO_InitStruct.GPIO_OType = GPIO_OType_OD;//open-drain
                GPIO_Init(GPIOB , &GPIO_InitStruct);
        
                /*!< Configure sEE_I2C pins: SDA */
                GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
                GPIO_Init(GPIOB , &GPIO_InitStruct);
        
                /* Connect PXx to I2C_SCL*/
                GPIO_PinAFConfig( GPIOB , GPIO_PinSource8, GPIO_AF_1);
                /* Connect PXx to I2C_SDA*/
                GPIO_PinAFConfig( GPIOB ,GPIO_PinSource9, GPIO_AF_1);
        }

IIC從模式配置,在配置時,需要設(shè)置地址,在這里設(shè)置為0XA0,而從設(shè)備的時鐘屬于被動模式,有IIC的主端確定。

void I2C_Configuration(void)
        {
                I2C_InitTypeDef I2C_InitStruct;
        
                /* I2C configuration */
                I2C_InitStruct.I2C_Mode = I2C_Mode_I2C;
                I2C_InitStruct.I2C_AnalogFilter = I2C_AnalogFilter_Enable;
                I2C_InitStruct.I2C_DigitalFilter = 0x00;
                I2C_InitStruct.I2C_OwnAddress1 =0xA0;
                I2C_InitStruct.I2C_Ack = I2C_Ack_Enable;
                I2C_InitStruct.I2C_AcknowledgedAddress = I2C_AcknowledgedAddress_7bit;
                I2C_InitStruct.I2C_Timing = 0xb0420f13;//100Kbits
                /* I2C Peripheral Enable */
                I2C_Cmd(I2C1, ENABLE);
                /* Apply I2C configuration after enabling it */
                I2C_Init(I2C1, &I2C_InitStruct);
        }

下面是IIC中斷函數(shù)的實現(xiàn)

void I2C1_IRQHandler(void)
        {
                I2C_ClearITPendingBit(I2C1, I2C_ISR_ADDR|I2C_ISR_STOPF );
                if(I2C_GetITStatus( I2C1, I2C_IT_RXNE));
                {
                        I2Cbuf[I2C_IT_FLAG++]=I2C_ReceiveData(I2C1);
                }
        }

中斷函數(shù)里面,清中斷為2種,一種為IIC從地址校驗成功,一種是數(shù)據(jù)傳輸過程中停止。對于從設(shè)備,接受數(shù)據(jù)中斷才是我們需要的,這里我們將IIC接受的數(shù)據(jù)存入定義好的數(shù)組中,這樣以備后用,同是,在讀取接受數(shù)據(jù)時,硬件已經(jīng)將接受數(shù)據(jù)的中斷清楚掉。

主站蜘蛛池模板: 欲妇荡岳丰满少妇岳 | 麻豆av福利av久久av | 熟妇人妻无码xxx视频 | 亚洲综合憿情五月丁香五月网 | 大地资源第二页中文高清版 | 日日摸日日踫夜夜爽无码久久 | 精品日韩欧美一区二区 | 国产精品一区二区三区四区不卡 | 亚洲男同GV片在线观看 | 人人狠狠综合久久88成人 | 女人与拘性猛交视频 | 蜜芽国内精品视频在线观看 | 免费黄色观看 | 国产人妻人伦精品 | 麻豆视频观看 | 中文字幕第38页 | 性欧美大战久久久久久久黑人 | 宅男午夜成年影视在线观看 | 日本牲交大片无遮挡 | 无码人妻精品中文字幕 | 欧美日韩一区二区三区久久精品 | 办公室1战4波多野结衣在线观看 | 首页 国产 欧美 日韩 丝袜 | 欧美视频亚洲视频 | 日韩欧美精 | 脔到她哭H粗话H好爽五星视频 | 人人添人人妻人人爽夜欢视AV | 国产精品免费vv欧美成人a | 无人高清影视在线观看 | 老熟女多次高潮露脸视频 | 国产精品美女久久久网站 | 麻花传剧原创MV在线观看 | 亚洲AV无码不卡一区二区三区 | 国产精品久久久久久久久久久久人四虎 | 亚洲a∨成熟国产一区二区成熟一级毛片 | 精品久久国产综合婷婷五月 | "欧美 黑人一级毛片" | 久久人人爽人人爽人人片AV东京热 | 夜夜夜高潮夜夜爽夜夜爰爰 | 午夜免费啪视频在线无码 | 国产精品色情国产三级金瓶双艳 |