版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第14章
I2C接口與
EEPROM存儲器作者:黃克亞2025年5月本章概要CONTENTSI2C通信原理EEPROM存儲器及芯片介紹STM32F103的I2C接口STM32F103的I2C相關庫函數I2C時序訪問EEPROM存儲器項目14.1I2C通信原理I2C(Inter-IntegratedCircuit,集成電路總線),又稱為IIC或I2C,這種總線類型是由原飛利浦公司(現為恩智浦公司)在20世紀80年代初設計出來的一種簡單、雙向、二線制、同步串行總線,主要是用來連接整體電路。14.1I2C通信原理14.1.1I2C串行總線概述I2C(Inter-IntegratedCircuit)一種串行通信總線協議,用于連接微控制器、傳感器、存儲器和其他外設。由兩根線組成:數據線(SDA),時鐘線(SCL)采用雙向傳輸方式,主從設備可以在同一根數據線上進行雙向通信允許連接多個器件,支持多主機通信14.1I2C通信原理14.1.2I2C總線的數據傳送01SCL高電平,SDA保持穩定SCL低電平,SDA狀態才允許變化數據位的有效性規定14.1I2C通信原理14.1.2I2C總線的數據傳送02“數據位有效性規定”不包含起止信號。SCL高電平,SDA的任何跳變都會被識別成為一個起始信號或停止信號。起始和終止信號14.1I2C通信原理14.1.2I2C總線的數據傳送03數據傳送格式1字節傳送與應答每個字節為8位,高位(MSB)在前,低位(LSB)在后發送方發送完每一字節后,必須等待接收方返回一個應答響應信號響應時鐘脈沖期間,接收方將SDA拉低為應答信號,接收方使SDA維持高電平為非應答信號。14.1I2C通信原理14.1.2I2C總線的數據傳送03數據傳送格式2總線的尋址DA3~DA0:4位器件地址是I2C總線器件固有的地址編碼。A2~A0:3位引腳地址用于相同地址器件的識別:數據傳送方向。=1:主機接收(讀);=0:主機發送(寫)14.1I2C通信原理14.1.2I2C總線的數據傳送03數據傳送格式3數據幀格式主機向從機寫數據主機產生起始信號S主機發送尋址字節SLAVEADDRESS被選中的從機返回應答信號A主機發送數據DATA主機發送停止信號結束數據傳輸或發送重復起始信號進入下一次數據傳輸14.1I2C通信原理14.1.2I2C總線的數據傳送03數據傳送格式3數據幀格式主機從從機讀數據主機產生起始信號S主機發送尋址字節SLAVEADDRESS被選中的從機返回應答信號A從機發送數據DATA主機發送停止信號結束數據傳輸或發送重復起始信號進入下一次數據傳輸14.1I2C通信原理14.1.2I2C總線的數據傳送03數據傳送格式3數據幀格式c)主機和從機雙向數據傳送主機和從機雙向數據傳送的數據傳送過程是主機向從機寫數據和主機由從機讀數據的組合04傳輸速率I2C的標準傳輸速率為100Kbps,快速傳輸可達400Kbps。目前還增加了高速模式,最高傳輸速率可達3.4Mbps。14.2STM32F103的I2C接口STM32F103微控制器的小容量產品有1個I2C,中等容量和大容量產品有2個I2C。14.2STM32F103的I2C接口14.2.1STM32F103的I2C主要特性所有的I2C都位于APB1總線。支持標準(100kbps)和快速(400kbps)兩種傳輸速率。所有的I2C可工作于主模式或從模式,可以作為主發送器、主接收器、從發送器或者從接收器。支持7位或10位尋址和廣播呼叫。具有3個狀態標志:發送器/接收器模式標志、字節發送結束標志、總線忙標志。具有2個中斷向量:1個中斷用于地址/數據通信成功,1個中斷用于錯誤。具有單字節緩沖器的DMA。兼容系統管理總線SMBus2.0。14.2STM32F103的I2C接口14.2.2STM32F103的I2C內部結構根據控制寄存器CCR、CR1和CR2中的配置產生I2C協議的時鐘信號,即SCL線上的信號。(1)時鐘控制通過I2C協議將數據逐位從SDA線發送出去或從SDA線上的信號中提取出接收到的數據值(2)數據控制用于產生I2C中斷和DMA請求。(3)控制邏輯I2C內部結構,由SDA線和SCL線展開,主要分為時鐘控制、數據控制和控制邏輯等部分。14.2STM32F103的I2C接口14.2.3STM32F103的模式選擇主模式●主發送器模式●主接收器模式從模式●從發送器模式●從接收器模式(默認)接口生成起始位后仲裁丟失或生成停止位主模式時,I2C接口啟動數據傳輸并產生時鐘信號。串行數據傳輸總是以起始條件開始并以停止條件結束。起始條件和停止條件都是在主模式下由軟件控制產生。從模式時,I2C接口能識別它自己的地址(7位或10位)和廣播呼叫地址。軟件能夠控制開啟或禁止廣播呼叫地址的識別。14.3STM32F103
的I2C相關庫函數14.3STM32F103的I2C相關庫函數14.3.1函數I2C_DeInit函數名I2C_DeInit函數原形voidI2C_DeInit(I2C_TypeDef*I2Cx)功能描述將外設I2Cx寄存器重設為缺省值輸入參數I2Cx:x可以是1或者2,來選擇I2C外設輸出參數無返回值無先決條件無被調用函數RCC_APB1PeriphClockCmd().例:/*DeinitializeI2C2interface*/I2C_DeInit(I2C2);14.3STM32F103的I2C相關庫函數14.3.2函數I2C_Init函數名I2C_Init函數原形voidI2C_Init(I2C_TypeDef*I2Cx,I2C_InitTypeDef*I2C_InitStruct)功能描述根據I2C_InitStruct中指定的參數初始化外設I2Cx寄存器輸入參數1I2Cx:x可以是1或者2,來選擇I2C外設輸入參數2I2C_InitStruct:指向結構I2C_InitTypeDef的指針,包含了外設GPIO的配置信息輸出參數無返回值無先決條件無被調用函數無I2C_InitTypeDefstructureI2C_InitTypeDef定義于文件“stm32f10x_i2c.h”:typedefstruct{u16I2C_Mode;u16I2C_DutyCycle;u16I2C_OwnAddress1;u16I2C_Ack;u16I2C_AcknowledgedAddress;u32I2C_ClockSpeed;}I2C_InitTypeDef;I2C_Mode:用以設置I2C的模式I2C_Mode描述I2C_Mode_I2C設置I2C為I2C模式I2C_Mode_SMBusDevice設置I2C為SMBus設備模式I2C_Mode_SMBusHost設置I2C為SMBus主控模式14.3STM32F103的I2C相關庫函數14.3.2函數I2C_InitI2C_OwnAddress1:該參數用來設置第一個設備自身地址,它可以是一個7位地址或者一個10位地址。I2C_Ack:使能或者失能應答(ACK)I2C_DutyCycle:用以設置I2C的占空比I2C_DutyCycle描述I2C_DutyCycle_16_9I2C快速模式Tlow/Thigh=16/9I2C_DutyCycle_2I2C快速模式Tlow/Thigh=2注意:該參數只有在I2C工作在快速模式(時鐘工作頻率高于100KHz)下才有意義。I2C_Ack描述I2C_Ack_Enable使能應答(ACK)I2C_Ack_Disable失能應答(ACK)I2C_AcknowledgedAddres:定義了應答7位地址還是10位地址。I2C_AcknowledgedAddres描述I2C_AcknowledgeAddress_7bit應答7位地址I2C_AcknowledgeAddress_10bit應答10位地址I2C_ClockSpeed:該參數用來設置時鐘頻率,這個值不能高于400KHz。14.3STM32F103的I2C相關庫函數14.3.2函數I2C_Init函數名I2C_Init函數原形voidI2C_Init(I2C_TypeDef*I2Cx,I2C_InitTypeDef*I2C_InitStruct)功能描述根據I2C_InitStruct中指定的參數初始化外設I2Cx寄存器輸入參數1I2Cx:x可以是1或者2,來選擇I2C外設輸入參數2I2C_InitStruct:指向結構I2C_InitTypeDef的指針,包含了外設GPIO的配置信息例:/*InitializetheI2C1accordingtotheI2C_InitStructuremembers*/I2C_InitTypeDefI2C_InitStructure;I2C_InitStructure.I2C_Mode=I2C_Mode_SMBusHost;I2C_InitStructure.I2C_DutyCycle=I2C_DutyCycle_2;I2C_InitStructure.I2C_OwnAddress1=0x03A2;I2C_InitStructure.I2C_Ack=I2C_Ack_Enable;I2C_InitStructure.I2C_AcknowledgedAddress=I2C_AcknowledgedAddress_7bit;I2C_InitStructure.I2C_ClockSpeed=200000;I2C_Init(I2C1,&I2C_InitStructure);14.3STM32F103的I2C相關庫函數14.3.3函數I2C_Cmd函數名I2C_Cmd函數原形voidI2C_Cmd(I2C_TypeDef*I2Cx,FunctionalStateNewState)功能描述使能或者失能I2C外設輸入參數1I2Cx:x可以是1或者2,來選擇I2C外設輸入參數2NewState:外設I2Cx的新狀態:ENABLE或者DISABLE輸出參數無返回值無先決條件無被調用函數無例:/*EnableI2C1peripheral*/I2C_Cmd(I2C1,ENABLE);14.3STM32F103的I2C相關庫函數14.3.4函數I2C_GenerateSTART函數名I2C_GenerateSTART函數原形voidI2C_GenerateSTART(I2C_TypeDef*I2Cx,FunctionalStateNewState)功能描述產生I2Cx傳輸START條件輸入參數1I2Cx:x可以是1或者2,來選擇I2C外設輸入參數2NewState:I2CxSTART條件的新狀態:ENABLE或者DISABLE輸出參數無返回值無先決條件無被調用函數無例:/*GenerateaSTARTconditiononI2C1*/I2C_GenerateSTART(I2C1,ENABLE);14.3STM32F103的I2C相關庫函數14.3.5函數I2C_GenerateSTOP函數名I2C_GenerateSTOP函數原形voidI2C_GenerateSTOP(I2C_TypeDef*I2Cx,FunctionalStateNewState)功能描述產生I2Cx傳輸STOP條件輸入參數1I2Cx:x可以是1或者2,來選擇I2C外設輸入參數2NewState:I2CxSTOP條件的新狀態:ENABLE或者DISABLE輸出參數無返回值無先決條件無被調用函數無例:/*GenerateaSTOPconditiononI2C2*/I2C_GenerateSTOP(I2C2,ENABLE);14.3STM32F103的I2C相關庫函數14.3.6函數I2C_Send7bitAddressI2C_Direction:該參數設置I2C界面為發送端模式或者接收端模式。函數名I2C_Send7bitAddress函數原形voidI2C_Send7bitAddress(I2C_TypeDef*I2Cx,u8Address,u8I2C_Direction)功能描述向指定的從I2C設備傳送地址字輸入參數1I2Cx:x可以是1或者2,來選擇I2C外設輸入參數2Address:待傳輸的從I2C地址輸入參數3I2C_Direction:設置指定的I2C設備工作為發射端還是接收端輸出參數無返回值無先決條件無被調用函數無I2C_Direction描述I2C_Direction_Transmitter選擇發送方向I2C_Direction_Receiver選擇接收方向例:/*Send,astransmitter,theSlavedeviceaddress0xA8in7-bitaddressingmodeinI2C1*/I2C_Send7bitAddress(I2C1,0xA8,I2C_Direction_Transmitter);14.3STM32F103的I2C相關庫函數14.3.7函數I2C_SendData函數名I2C_SendData函數原形voidI2C_SendData(I2C_TypeDef*I2Cx,u8Data)功能描述通過外設I2Cx發送一個數據輸入參數1I2Cx:x可以是1或者2,來選擇I2C外設輸入參數2Data:待發送的數據輸出參數無返回值無先決條件無被調用函數無14.3.8函數I2C_ReceiveData函數名I2C_ReceiveData函數原形u8I2C_ReceiveData(I2C_TypeDef*I2Cx)功能描述返回通過I2Cx最近接收的數據輸入參數I2Cx:x可以是1或者2,來選擇I2C外設輸出參數無返回值接收到的字先決條件無被調用函數無例:/*Transmit0x5DbyteonI2C2*/I2C_SendData(I2C2,0x5D);例:/*ReadthereceivedbyteonI2C1*/u8ReceivedData;ReceivedData=I2C_ReceiveData(I2C1);14.4項目實例STM32微控制器模擬I2C時序訪問EEPROM存儲器項目實施14.4項目實例14.4.1模擬I2C時序要求本項目將向讀者介紹如何利用STM32的普通I/O口模擬I2C時序,并實現和EEPROM存儲器AT24C02之間的雙向通信,并將結果通過串口printf輸出。對于模擬I2C總線,有幾個重復應用的典型信號:起始信號(S)、終止信號(P)、發送應答位(ACK)、發送非應答位(NAK)。14.4項目實例14.4.2模擬I2C函數起始信號SCL線為高電平期間,SDA線由高電平向低電平的變化表示起始信號。01終止信號SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號。需要注意的是這里保持時間也是有一定限制的。02I2C總線產生起始信號函數參考代碼如下:voidI2C_Start(void){I2C_SDA_OUT(); I2C_SDA_H;I2C_SCL_H;delay_us(5);I2C_SDA_L;delay_us(6);I2C_SCL_L;}I2C總線產生終止信號函數參考代碼如下:voidI2C_Stop(void){I2C_SDA_OUT();I2C_SCL_L;I2C_SDA_L;I2C_SCL_H;delay_us(6);I2C_SDA_H;delay_us(6);}14.4項目實例14.4.2模擬I2C函數應答信號應答,也叫響應。數據的傳輸必須要帶應答。03//主機產生應答信號ACKvoidI2C_Ack(void){I2C_SCL_L;I2C_SDA_OUT();I2C_SDA_L;delay_us(2);I2C_SCL_H;delay_us(5);I2C_SCL_L;}//主機不產生應答信號NACKvoidI2C_NAck(void){I2C_SCL_L;I2C_SDA_OUT();I2C_SDA_H;delay_us(2);I2C_SCL_H;delay_us(5);I2C_SCL_L;}//等待從機應答信號//返回值:1接收應答失敗0接收應答成功u8I2C_Wait_Ack(void){u8tempTime=0;I2C_SDA_IN();I2C_SDA_H;delay_us(1);I2C_SCL_H;delay_us(1);while(GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA)){tempTime++;if(tempTime>250){I2C_Stop();return1;} }I2C_SCL_L;return0;}14.4項目實例14.4.2模擬I2C函數I2C發送一個字節數據05邏輯數據的表示要傳輸數據,那么肯定要分傳輸“1”和“0”,一般I2C讀取的時候,都是在SCL的為高電平的時候進行讀取,所以在SCL為高電平的時候,需要保持SDA穩定,高電平為“1”,低電平為“0”。而且注意的還有就是他們的保持時間要大于4us。04//I2C發送一個字節voidI2C_Send_Byte(u8txd){ u8i=0; I2C_SDA_OUT(); I2C_SCL_L;//拉低時鐘開始數據傳輸
for(i=0;i<8;i++) { if((txd&0x80)>0)I2C_SDA_H; elseI2C_SDA_L; txd<<=1; I2C_SCL_H;delay_us(2);//發送數據
I2C_SCL_L;delay_us(2); }}14.4項目實例14.4.2模擬I2C函數I2C模擬接收一個字節數據06u8I2C_Read_Byte(u8ack){u8i=0,receive=0;I2C_SDA_IN();for(i=0;i<8;i++){ I2C_SCL_L;delay_us(2);I2C_SCL_H; receive<<=1; if(GPIO_ReadInputDataBit(GPIO_I2C,I2C_SDA)) receive++; delay_us(1); } if(ack==0)I2C_NAck(); elseI2C_Ack(); returnreceive;}14.4項目實例14.4.3EEPROM芯片24C02主要用于存儲程序代碼,可以在程序編寫階段修改;程序存儲器FlashROM數據存儲器SRAM其主要用于存儲運行數據,可讀可寫,速度快,但是芯片斷電數據丟失;EEPROM存儲器EEPROM(ElectricallyErasableProgrammableReadOnlyMemory)是指帶電可擦可編程只讀存儲器,是一種掉電后數據不丟失的存儲芯片。嵌入式系統中主要存在三種存儲器14.4項目實例14.4.3EEPROM芯片24C02本實驗平臺配備的EEPROM存儲器為具有I2C接口的AT24C02芯片,其主要參數如下:(1)AT24C02可以提供2K位,也就是256個8位的EEPROM內存,可以保存256個字節的數據,有256個內存地址,也正好對應1個字節的地址范圍。(2)AT24C02通過I2C總線接口進行操作。(3)AT24C02寫操作時,可以一次寫一個地址,也可以一次寫一頁。對于AT24C02來說,一頁大小是8字節。寫入的數據在同一頁時,可以只寫入一次地址,每寫入1字節,地址自動加1。(4)AT24C02讀操作時,每讀完一次數據之后,讀取地址都會自動加1。AT24C02接線原理圖14.4項目實例14.4.4模擬I2C訪問24C02項目分析預定義模擬I2C管腳首先對系統實際采用的模擬I2C管腳及其高低電平操作函數進行預定義,這樣當系統硬件發生更改時,只需要將四條引腳預定義語句修改一下即可。/*定義使用的I/O口,移植僅需更改下面4個預定義即可*/#defineI2C_SCLGPIO_Pin_0//PF0#defineI2C_SDAGPIO_Pin_1//PF1#defineGPIO_I2CGPIOF#defineRCC_GPIO_I2CRCC_APB2Periph_GPIOF/*I2C時鐘信號和數據信號操作宏定義*/#defineI2C_SCL_HGPIO_SetBits(GPIO_I2C,I2C_SCL)#defineI2C_SCL_LGPIO_ResetBits(GPIO_I2C,I2C_SCL)#defineI2C_SDA_HGPIO_SetBits(GPIO_I2C,I2C_SDA)#defineI2C_SDA_LGPIO_ResetBits(GPIO_I2C,I2C_SDA)14.4項目實例14.4.4模擬I2C訪問24C02項目分析I2C管腳配置I2C管腳配置包括I2C管腳初始化、SDA輸出配置和SDA輸入配置3個函數,代碼如下:voidI2C_INIT()//I2C管腳初始化{GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_GPIO_I2C,ENABLE);GPIO_InitStructure.GPIO_Pin=I2C_SCL|I2C_SDA;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_I2C,&GPIO_InitStructure);I2C_SCL_H;I2C_SDA_H;}voidI2C_SDA_OUT()//SDA輸出配置{GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=I2C_SDA;GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;GPIO_Init(GPIO_I2C,&GPIO_InitStructure);}voidI2C_SDA_IN(void)//SDA輸入配置{GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin=I2C_SDA;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Init(GPIO_I2C,&GPIO_InitStructure);}14.4項目實例14.4.4模擬I2C訪問24C02項目分析AT24C02寫操作AT24C02寫操作一般步驟如下,對應圖時序(1)發送起始信號(2)發送寫器件地址(3)等待應答(4)發送要寫入的24C02的地址(5)等待應答(6)發送要寫入的數據(7)等待應答(8)發送數據結束發送結束信號參考代碼如下:voidAT24Cxx_WriteOneByte(u8addr,u8dt){ I2C_Start(); //起始信號 I2C_Send_Byte(0xA0);//發送寫器件地址 I2C_Wait_Ack(); //等待應答 I2C_Send_Byte(addr);//發送要寫入單元地址 I2C_Wait_Ack(); //等待應答 I2C_Send_Byte(dt); //發送要寫入的數據 I2C_Wait_Ack(); //等待應答 I2C_Stop(); //停止信號 delay_ms(10); //必要的延時}14.4項目實例14.4.4模擬I2C訪問24C02項目分析AT24C02讀操作AT24C02讀操作一般步驟如下,對應圖時序。(1)發送起始信號(2)發送寫器件地址(3)等待應答(4)發送要讀取的AT24C02的地址(5)等待應答(6)再發送起始信號(7)發送讀器件地址(8)等待應答(9)接收數據(10)如果沒有接收完數據,發送應答(11)接收數據(12)直到接收完數據,發送非應答(13)發送結束信號參考代碼如下:u8AT24Cxx_ReadOneByte(u8addr){ u8temp=0; I2C_Start(); //起始信號 I2C_Send_Byte(0xA0);//發送寫器件地址 I2C_Wait_Ack(); //等待應答 I2C_Send_Byte(addr);//發送要讀取單元的地址 I2C_Wait_Ack(); //等待應答 I2C_Start(); //再次發送起始信號 I2C_Send_Byte(0xA1);//發送讀器件地址 I2C_Wait_Ack(); //等待應答 temp=I2C_Read_Byte(0);//接收數據,非應答,0代表NACK I2C_Stop(); //停止信號 returntemp;}14.4項目實例第一步:復制第三章創建工程模板文件夾到桌面,并將文件夾改名為“13I2C+24C02”,將原工程模板編譯一下,直到沒有錯誤和警告為止。12ADC+DMA+Printf13I2C+24C02第二步:點擊“File/New”新建兩個文件,將其改名為I2C-24C02.C和I2C-24C02.H并保存到工程模板下的APP文件夾中。并將I2C-24C02.C文件添加到APP項目組下。14.4.5模擬I2C訪問24C02項目實施14.4項目實例項目實施第三步:編寫I2C-24C02.C源文件,首先包含I2C-24C02.H頭文件,然后創建所有模擬I2C時序源函數。由于此部分程序在前面14.4.2~14.4.4節已有講解,且代碼相同,故在此不再將代碼重復貼出。I2C初始化函數I2C_INIT;SDA輸出配置函數I2C_SDA_OUT;SDA輸入配置函數I2C_SDA_IN;起始信號函數I2C_Start;終止信號函數I2C_Stop;主機應答函數I2C_Ack;主機非應答函數I2C_Nack;等待從機應答函數I2C_Wait_Ack;字節發送函數I2C_Send_Byte;字節讀取函數I2C_Read_Byte;AT24C02單字節寫入函數AT24Cxx_WriteOneByte;AT24C02單字節讀取函數AT24Cxx_ReadOneByte。14.4項目實例項目實施第四步:在I2C-24C02.H文件中輸入如下源程序,其中條件編譯格式不變,只要更改一下預定義變量名稱即可,需要將剛定義函數的聲明加到頭文件當中參考代碼如下:#ifndef_I2C24C02_H#define_I2C24C02_H#include"stm32f10x.h"#include"systick.h"/*定義時使用的I/O口,移植僅需修改下面4個宏定義*/#defineI2C_SCLGPIO_Pin_0 //SCL->PF0#defineI2C_SDAGPIO_Pin_1 //SDA->PF1#defineGPIO_I2CGPIOF#defineRCC_GPIO_I2CRCC_APB2Periph_GPIOF/*I2C時鐘信號和數據信號操作宏定義*/#defineI2C_SCL_HGPIO_SetBits(GPIO_I2C,I2C_SCL)#defineI2C_SCL_LGPIO_ResetBits(GPIO_I2C,I2C_SCL)#defineI2C_SDA_HGPIO_SetBits(GPIO_I2C,I2C_SDA)#defineI2C_SDA_LGPIO_ResetBits(GPIO_I2C,I2C_SDA)/*GPIO模擬I2C相關函數*/voidI2C_INIT(void);voidI2C_SDA_OUT(void);voidI2C_SDA_IN(void);voidI2C_Start(void);voidI2C_Stop(void);voidI2C_Ack(void);voidI2C_NAck(void);u8I2C_Wait_Ack(void);voidI2C_Send_Byte(u8txd);u8I2C_Read_Byte(u8ack);/*24C02單字節讀寫函數*/voidAT24Cxx_WriteOneByte(u8addr,u8dt);u8AT24Cxx_ReadOneByte(u8addr);#endif參考程序代碼14.4項目實例項目實施第五步:在main.h文件的中間部分添加#include"I2C-24C02.H"語句,即包含I2C-24C02.H頭文件,main.h文件的源代碼如下。參考代碼如下:#ifndef_MAIN_H#define_MAIN_H#include"stm32f10x.h"#include"LED.H"#include"beepkey.h"#include"dsgshow.h"#include"EXTI.H"#include"timer.h"#include"PWM.H"#include"USART.H"#include"OLED.H"#include"ADC.H"#include"printf.h"#include"DMA-ADC.H"#include"I2C-24C02.H"#endif參考程序代碼14.4項目實例項目實施第六步:在main.c文件中輸入如下源程序,在main函數中,需要進行串口輸出初始化,外部中斷初始化,定時器初始化,I2C初始化,最后安排一個無限循環,等待中斷發生。因為本例需要使用KEY4觸發外部中斷,所以還需要增加其控制引腳PE3的外部中斷初始化程序,初始化方法和PE0~PE2是完全類似的,請讀者自行修改EXTIInit()函數。參考代碼如下:#include"main.h"intmain(){ hour=9;minu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《口腔器械消毒滅菌技術操作規范》試題及答案
- 軟土地基換填施工專項施工方案
- 2026年新版心肺復蘇試題庫及答案
- 康復醫學科醫療質量與制度管理
- 2026年護士專業知識考試試題及答案
- 標準完整兒科病歷范文
- 施工組織設計方案與技術措施
- 清洗保潔企業檢修員檢修維修安全操作規程
- 婦科護理面試題及答案
- 第一單元自測練習卷2026-2027學年四年級語文上冊統編版
- 2026年“麻醉藥品、精神藥品”管理和使用培訓考核試題(含答案)
- 幼兒教師招聘考試全套試題及答案
- 2026年山東省臨沂市重點中學小升初英語考試試卷及答案
- 石家莊城市經濟職業學院教師招聘考試筆試試題及答案
- 2026年《保安員》上崗證考試題庫及答案
- 非遺宋錦珍珠扇沙龍
- 2026年防曬霜行業分析報告及未來發展趨勢報告
- 物業客戶關系維護與客戶滿意度提升方案
- (2026版)新《中華人民共和國漁業法》核心要點解讀培訓
- 2026年赫比ciic測試題及答案
- 兒童樂園員工工作制度
評論
0/150
提交評論