




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
CC2530和STM32嵌入式接口技術開發(fā)6.2STM32I2C通信技術應用開發(fā)CC2530和STM32嵌入式接口技術開發(fā)6.2STM3I2C總線STM32的I2C原理STM32IIC庫函數的使用溫濕度傳感器項目實踐I2C總線IIC總線協議介紹IIC(Inter-IntegratedCircuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線(通常稱I2C),用于連接微控制器及其外圍設備。它是由數據線SDA和時鐘SCL構成的串行總線,可發(fā)送和接收數據。IIC總線協議介紹IIC(Inter-IntegratedIIC物理層IIC支持多個設備連接總線電容需小于400pFIIC的控制線較少只有SDA和SCL兩根信號線IIC設備都有獨立地址總線通過設備地址識別設備IIC需設置上拉電阻確認總線電平狀態(tài)IIC的數據傳輸靈活速度從100到400kbit/sIIC物理層IIC支持多個設備連接IIC協議層讀寫指令段IIC協議層讀寫指令段IIC讀寫指令IIC讀寫指令IIC啟停信號IIC啟停信號IIC數據有效性IIC數據有效性IIC從機地址IIC從機地址IIC響應與非響應信號IIC響應與非響應信號STM32的IIC原理1.通訊引腳SDA數據總線和SCL時鐘總線。2.時鐘控制邏輯通過時鐘可以控制IIC總線的通信速率。3.數據控制邏輯對數據和地址進行控制和識別4.整體控制邏輯負責協調整個I2C外設STM32的IIC原理1.通訊引腳STM32的IIC主發(fā)送器STM32的IIC主發(fā)送器STM32的IIC主接收器STM32的IIC主接收器STM32的IIC的使用typedefstruct{uint32_tI2C_ClockSpeed;//設置SCL時鐘頻率,此值要低于400000uint16_tI2C_Mode;//指定工作模式,可選I2C模式及SMBUS模式uint16_tI2C_DutyCycle;//指定時鐘占空比,可選low/high=2:1及16:9模式uint16_tI2C_OwnAddress1;//指定自身的I2C設備地址uint16_tI2C_Ack;//使能或關閉響應(一般都要使能)uint16_tI2C_AcknowledgedAddress;//指定地址的長度,可為7位及10位}I2C_InitTypeDef;STM32集成的IIC庫比較精簡,只需要配置相關參數即可使用。STM32的IIC的使用typedefstruct{STM3HTU21D溫濕度傳感器Humirel公司HTU21D溫濕度傳感器,傳感器輸出經過標定的數字信號,標準
I2C
格式。
HTU21D
的分辨率可以通過輸入命令進行改變(8/12bit
乃至12/14bit
的RH/T),傳感器可以檢測到電池低電量狀態(tài),并且輸出校驗和,有助于提高通信的可靠性。HTU21D溫濕度傳感器Humirel公司HTU21D溫濕度項目場景庫房內安裝一定數量的環(huán)境檢測傳感器來實現對內部環(huán)境無死角的實時檢測。這些傳感器不光數量眾多而且種類也眾多。如何在盡量少使用嵌入式處理芯片的情況下而獲得更多的數據,最有效的方法就是采用總線連接,通過使用IIC總線可以實現一條總線連接多個IIC設備,從而達到高效數據采集。項目場景庫房內安裝一定數量的環(huán)境檢測傳感器來實現對內部環(huán)境無任務目標庫房環(huán)境監(jiān)控系統(tǒng)生產企業(yè)要設計一套集成了環(huán)境采集系統(tǒng)和庫房內部環(huán)境干預系統(tǒng)的綜合環(huán)境維持系統(tǒng),要求使用STM32處理器I2C接口采集溫濕度傳感器的數據,數據可通過顯示屏實時顯示。任務目標庫房環(huán)境監(jiān)控系統(tǒng)生產企業(yè)要設計一套集成了環(huán)境采集系統(tǒng)項目實踐本項目設計采用STM32F407的GPIO模擬IIC總線接口,將模擬總線與Plus節(jié)點板載的溫濕度傳感器相連接,使用IIC總線協議實現對溫濕度傳感器的數據獲取,通過串口將采集的溫濕度傳感器數據打印在PC上以顯示獲取的信息。項目實踐本項目設計采用STM32F407的GPIO模擬IIC項目硬件連接圖溫濕度傳感器原理圖項目硬件連接圖溫濕度傳感器原理圖項目程序邏輯框圖項目程序邏輯框圖項目實現voidiic_init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_AHB1PeriphClockCmd(I2C_CLK,ENABLE);GPIO_InitStructure.GPIO_Pin=PIN_SCL|PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);}I2C初始化函數項目實現voidiic_init(void)I2C初始化函項目實現voidsda_out(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);}設置SDA為輸出項目實現voidsda_out(void)設置SDA為輸出項目實現voidsda_in(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);}設置SDA為輸入項目實現voidsda_in(void)設置SDA為輸入項目實現voidiic_start(void){sda_out();GPIO_SetBits(I2C_GPIO,PIN_SDA);//拉高數據線GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時GPIO_ResetBits(I2C_GPIO,PIN_SDA);//產生下降沿delay_us(5);//延時GPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線}I2C初始信號項目實現voidiic_start(void)I2C初始信項目實現voidiic_stop(void){sda_out();GPIO_ResetBits(I2C_GPIO,PIN_SDA);//拉低數據線GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時5usGPIO_SetBits(I2C_GPIO,PIN_SDA);//產生上升沿delay_us(5);//延時5us}I2C停止信號項目實現voidiic_stop(void)I2C停止信號項目實現voidiic_send_ack(intack){sda_out();if(ack)GPIO_SetBits(I2C_GPIO,PIN_SDA);//寫應答信號elseGPIO_ResetBits(I2C_GPIO,PIN_SCL);GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時GPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線delay_us(5);//延時}I2C應答信號項目實現voidiic_send_ack(intack)項目實現intiic_recv_ack(void){intCY=0;sda_in();GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時CY=SDA_R;//讀應答信號GPIO_ResetBits(I2C_GPIO,PIN_SDA);//拉低時鐘線delay_us(5);//延時returnCY;}I2C接收應答信號項目實現intiic_recv_ack(void)I2C接項目實現unsignedchariic_write_byte(unsignedchardata){unsignedchari;sda_out();GPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線for(i=0;i<8;i++){if(data&0x80){//判斷數據最高位是否為1GPIO_SetBits(I2C_GPIO,PIN_SDA); }elseGPIO_ResetBits(I2C_GPIO,PIN_SDA);delay_us(5);//延時5usI2C寫一個字節(jié)數據項目實現unsignedchariic_write_by項目實現GPIO_SetBits(I2C_GPIO,PIN_SCL); //輸出SDA穩(wěn)定后,拉高SCL給出上升沿,從機檢測到后進行數據采樣delay_us(5);//延時5usGPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線delay_us(5);//延時5usdata<<=1;//數組左移一位}delay_us(5);//延時2ussda_in();I2C寫一個字節(jié)數據項目實現GPIO_SetBits(I2C_GPIO,PIN_項目實現GPIO_SetBits(I2C_GPIO,PIN_SDA);//拉高數據線GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時2us,等待從機應答if(SDA_R){ //SDA為高,收到NACKreturn1; }else{ //SDA為低,收到ACKGPIO_ResetBits(I2C_GPIO,PIN_SCL);//釋放總線
delay_us(5);//延時2us,等待從機應答return0;}}I2C寫一個字節(jié)數據項目實現GPIO_SetBits(I2C_GPIO,PIN_項目實現unsignedchariic_read_byte(unsignedcharack){unsignedchari,data=0;sda_in();GPIO_ResetBits(I2C_GPIO,PIN_SCL);GPIO_SetBits(I2C_GPIO,PIN_SDA); //釋放總線
for(i=0;i<8;i++){GPIO_SetBits(I2C_GPIO,PIN_SCL); //給出上升沿delay_us(30); //延時等待信號穩(wěn)定data<<=1; I2C讀一個字節(jié)數據項目實現unsignedchariic_read_byt項目實現if(SDA_R){ //采樣獲取數據data|=0x01;}else{data&=0xfe;}delay_us(10);GPIO_ResetBits(I2C_GPIO,PIN_SCL); //下降沿,從機給出下一位值delay_us(20);}sda_out();if(ack)GPIO_SetBits(I2C_GPIO,PIN_SDA); //應答狀態(tài)elseGPIO_ResetBits(I2C_GPIO,PIN_SDA);I2C讀一個字節(jié)數據項目實現if(SDA_R){ 項目實現delay_us(10);GPIO_SetBits(I2C_GPIO,PIN_SCL);delay_us(50);GPIO_ResetBits(I2C_GPIO,PIN_SCL);delay_us(50);returndata;}I2C讀一個字節(jié)數據項目實現delay_us(10);I2C讀一個字節(jié)數據項目思考I2C總線的工作原理和通信協議?溫濕度傳感器的工作原理是什么,如何驅動?如何用I2C總線和STM32實現溫濕度數據采集?項目思考I2C總線的工作原理和通信協議?CC2530和STM32嵌入式接口技術開發(fā)6.2STM32I2C通信技術應用開發(fā)CC2530和STM32嵌入式接口技術開發(fā)6.2STM3I2C總線STM32的I2C原理STM32IIC庫函數的使用溫濕度傳感器項目實踐I2C總線IIC總線協議介紹IIC(Inter-IntegratedCircuit)總線是一種由PHILIPS公司開發(fā)的兩線式串行總線(通常稱I2C),用于連接微控制器及其外圍設備。它是由數據線SDA和時鐘SCL構成的串行總線,可發(fā)送和接收數據。IIC總線協議介紹IIC(Inter-IntegratedIIC物理層IIC支持多個設備連接總線電容需小于400pFIIC的控制線較少只有SDA和SCL兩根信號線IIC設備都有獨立地址總線通過設備地址識別設備IIC需設置上拉電阻確認總線電平狀態(tài)IIC的數據傳輸靈活速度從100到400kbit/sIIC物理層IIC支持多個設備連接IIC協議層讀寫指令段IIC協議層讀寫指令段IIC讀寫指令IIC讀寫指令IIC啟停信號IIC啟停信號IIC數據有效性IIC數據有效性IIC從機地址IIC從機地址IIC響應與非響應信號IIC響應與非響應信號STM32的IIC原理1.通訊引腳SDA數據總線和SCL時鐘總線。2.時鐘控制邏輯通過時鐘可以控制IIC總線的通信速率。3.數據控制邏輯對數據和地址進行控制和識別4.整體控制邏輯負責協調整個I2C外設STM32的IIC原理1.通訊引腳STM32的IIC主發(fā)送器STM32的IIC主發(fā)送器STM32的IIC主接收器STM32的IIC主接收器STM32的IIC的使用typedefstruct{uint32_tI2C_ClockSpeed;//設置SCL時鐘頻率,此值要低于400000uint16_tI2C_Mode;//指定工作模式,可選I2C模式及SMBUS模式uint16_tI2C_DutyCycle;//指定時鐘占空比,可選low/high=2:1及16:9模式uint16_tI2C_OwnAddress1;//指定自身的I2C設備地址uint16_tI2C_Ack;//使能或關閉響應(一般都要使能)uint16_tI2C_AcknowledgedAddress;//指定地址的長度,可為7位及10位}I2C_InitTypeDef;STM32集成的IIC庫比較精簡,只需要配置相關參數即可使用。STM32的IIC的使用typedefstruct{STM3HTU21D溫濕度傳感器Humirel公司HTU21D溫濕度傳感器,傳感器輸出經過標定的數字信號,標準
I2C
格式。
HTU21D
的分辨率可以通過輸入命令進行改變(8/12bit
乃至12/14bit
的RH/T),傳感器可以檢測到電池低電量狀態(tài),并且輸出校驗和,有助于提高通信的可靠性。HTU21D溫濕度傳感器Humirel公司HTU21D溫濕度項目場景庫房內安裝一定數量的環(huán)境檢測傳感器來實現對內部環(huán)境無死角的實時檢測。這些傳感器不光數量眾多而且種類也眾多。如何在盡量少使用嵌入式處理芯片的情況下而獲得更多的數據,最有效的方法就是采用總線連接,通過使用IIC總線可以實現一條總線連接多個IIC設備,從而達到高效數據采集。項目場景庫房內安裝一定數量的環(huán)境檢測傳感器來實現對內部環(huán)境無任務目標庫房環(huán)境監(jiān)控系統(tǒng)生產企業(yè)要設計一套集成了環(huán)境采集系統(tǒng)和庫房內部環(huán)境干預系統(tǒng)的綜合環(huán)境維持系統(tǒng),要求使用STM32處理器I2C接口采集溫濕度傳感器的數據,數據可通過顯示屏實時顯示。任務目標庫房環(huán)境監(jiān)控系統(tǒng)生產企業(yè)要設計一套集成了環(huán)境采集系統(tǒng)項目實踐本項目設計采用STM32F407的GPIO模擬IIC總線接口,將模擬總線與Plus節(jié)點板載的溫濕度傳感器相連接,使用IIC總線協議實現對溫濕度傳感器的數據獲取,通過串口將采集的溫濕度傳感器數據打印在PC上以顯示獲取的信息。項目實踐本項目設計采用STM32F407的GPIO模擬IIC項目硬件連接圖溫濕度傳感器原理圖項目硬件連接圖溫濕度傳感器原理圖項目程序邏輯框圖項目程序邏輯框圖項目實現voidiic_init(void){GPIO_InitTypeDefGPIO_InitStructure;RCC_AHB1PeriphClockCmd(I2C_CLK,ENABLE);GPIO_InitStructure.GPIO_Pin=PIN_SCL|PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);}I2C初始化函數項目實現voidiic_init(void)I2C初始化函項目實現voidsda_out(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_OUT;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);}設置SDA為輸出項目實現voidsda_out(void)設置SDA為輸出項目實現voidsda_in(void){GPIO_InitTypeDefGPIO_InitStructure;GPIO_InitStructure.GPIO_Pin=PIN_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN;GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_2MHz;GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;GPIO_Init(I2C_GPIO,&GPIO_InitStructure);}設置SDA為輸入項目實現voidsda_in(void)設置SDA為輸入項目實現voidiic_start(void){sda_out();GPIO_SetBits(I2C_GPIO,PIN_SDA);//拉高數據線GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時GPIO_ResetBits(I2C_GPIO,PIN_SDA);//產生下降沿delay_us(5);//延時GPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線}I2C初始信號項目實現voidiic_start(void)I2C初始信項目實現voidiic_stop(void){sda_out();GPIO_ResetBits(I2C_GPIO,PIN_SDA);//拉低數據線GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時5usGPIO_SetBits(I2C_GPIO,PIN_SDA);//產生上升沿delay_us(5);//延時5us}I2C停止信號項目實現voidiic_stop(void)I2C停止信號項目實現voidiic_send_ack(intack){sda_out();if(ack)GPIO_SetBits(I2C_GPIO,PIN_SDA);//寫應答信號elseGPIO_ResetBits(I2C_GPIO,PIN_SCL);GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時GPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線delay_us(5);//延時}I2C應答信號項目實現voidiic_send_ack(intack)項目實現intiic_recv_ack(void){intCY=0;sda_in();GPIO_SetBits(I2C_GPIO,PIN_SCL);//拉高時鐘線delay_us(5);//延時CY=SDA_R;//讀應答信號GPIO_ResetBits(I2C_GPIO,PIN_SDA);//拉低時鐘線delay_us(5);//延時returnCY;}I2C接收應答信號項目實現intiic_recv_ack(void)I2C接項目實現unsignedchariic_write_byte(unsignedchardata){unsignedchari;sda_out();GPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線for(i=0;i<8;i++){if(data&0x80){//判斷數據最高位是否為1GPIO_SetBits(I2C_GPIO,PIN_SDA); }elseGPIO_ResetBits(I2C_GPIO,PIN_SDA);delay_us(5);//延時5usI2C寫一個字節(jié)數據項目實現unsignedchariic_write_by項目實現GPIO_SetBits(I2C_GPIO,PIN_SCL); //輸出SDA穩(wěn)定后,拉高SCL給出上升沿,從機檢測到后進行數據采樣delay_us(5);//延時5usGPIO_ResetBits(I2C_GPIO,PIN_SCL);//拉低時鐘線delay_us(5);//延時5usdata<<=1;//數組左移一位}delay_us(5);//延時2ussda_in();I2C寫一個字節(jié)數據項目實現GPIO_SetBits(I2C_GPIO,PIN_項目實現GPIO_SetBits(I2C_GPIO,PIN_SDA);//拉高數據線GPIO_SetBits(I2C_GPIO,PIN_SCL);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務業(yè)績計劃
- 護士鞋采購合同范本
- 2025年幼兒園大班當我害怕的時候標準教案
- 2025年幼兒園美術《荷花》標準教案設計
- 社交媒體數據分析在營銷決策中的應用
- 徐州市高壓電線施工方案
- 軌道交通3號線施工方案
- 曲靖師范學院《兒童文學作品欣賞》2023-2024學年第二學期期末試卷
- 重慶智能工程職業(yè)學院《聚變能源與等離子體》2023-2024學年第二學期期末試卷
- 山西財經大學華商學院《無線通信系統(tǒng)建?!?023-2024學年第二學期期末試卷
- 幼兒看圖填數
- 酒店項目精裝修工程施工組織設計
- 小學生研學旅行展示ppt模板
- 《思想道德與法治》第一章
- 新概念英語第2冊課文word版
- 大學生職業(yè)生涯規(guī)劃(高職)PPT完整全套教學課件
- 微信小程序開發(fā)實戰(zhàn)(第2版)全套PPT完整教學課件
- 部編版語文四年級下冊全冊大單元整體作業(yè)設計
- 重慶自然博物館
- 收養(yǎng)人撫養(yǎng)教育被收養(yǎng)人能力的證明
- 施工升降機的安裝步驟
評論
0/150
提交評論