版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、/實驗24C02連接在PF口/WP、A0、A1、A2都接地#include"stm32f10x_flash.h"#include"stm32f10x_gpio.h”#include"stm32f10xrcc.h"地址#defineAT24C020xa0/AT24C02/*/GPIO_InitTypeDefGPIO_InitStructure;/GPIOErrorStatusHSEStartUpStatus;unsignedcharCountl,Count2;unsignedintUSEC;staticvu32TimingDelay;unsign
2、edcharReadzfc;unsignedcharpDat8=0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55;unsignedcharR_Dat8;/*/voidRCC_Configuration(void);voidSysTick_Configuration(void);voidDelay_us_24C02(u32nTime);/*24C02*/時鐘數(shù)據(jù)#defineSDataGPIO_Pin_6/I2C#defineSCLKGPIOPin7/I2C/*/#defineSCL(x)x?GPIO_SetBits(GPIOF,SCLK):GPIO_ResetBi
3、ts(GPIOF,SCLK)#defineSDA(x)x?GPIO_SetBits(GPIOF,SData):GPIO_ResetBits(GPIOF,SData)/*/u8ack;*起動總線函數(shù)函數(shù)原型:voidStart_I2c();功能:啟動I2C總線,即發(fā)送I2C起始條件.*/voidStart_I2c()(SDA(1);/SDA=1;發(fā)送起始條件的數(shù)據(jù)信號Delay_us_24C02(1);SCL(1);/SCL=1;/起始條件建立時間大于4.7us,延時Delay_us_24C02(5);SDA(0);/SDA=0;Delay_us_24C02(5);SCL(0);/SCL=0;D
4、elay_us_24C02(2);/*/*發(fā)送起始信號*/起始條件鎖定時間大于4s鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/*結(jié)束總線函數(shù)函數(shù)原型:voidStop_I2c();功能:結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.*/voidStop_I2c()(發(fā)送結(jié)束條件的數(shù)據(jù)信號發(fā)送結(jié)束條件的時鐘信號結(jié)束條件建立時間大于4sSDA(0);/SDA=0;/Delay_us_24C02(1);/SCL(1);/SCL=1;Delay_us_24C02(5);SDA(0);/SDA=1;發(fā)送I2C總線結(jié)束信號Delay_us_24C02(4);/*字節(jié)數(shù)據(jù)發(fā)送函數(shù)函數(shù)原型:voidSendByte(UCH
5、ARc);功能:將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對此狀態(tài)位進行操作.(不應(yīng)答或非應(yīng)答都使ack=0)發(fā)送數(shù)據(jù)正常,ack=1;ack=0表示被控器無應(yīng)答或損壞。*/voidSendByte(unsignedcharc)(unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt+)/要傳送的數(shù)據(jù)長度為8位(if(c<<BitCnt)&0x80)SDA(1);/SDA=1;判斷發(fā)送位elseSDA(0);/SDA=0Delay_us_24C02(1);SCL(1);/SCL=1置時鐘線為高,通知被控器開始
6、接收數(shù)據(jù)位Delay_us_24C02(5);/保證時鐘高電平周期大于4sSCL(0);/SCL=0Delay_us_24C02(2);SDA(1);/SDA=1位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位Delay_us_24C02(2);SCL(1);/SCL=1Delay_us_24C02(3);if(GPIO_ReadInputDataBit(GPIOF,SData)=1)ack=0;elseack=1;/判斷是否接收到應(yīng)答信號SCL(0);/SCL=0;Delay_us_24C02(3);/*字節(jié)數(shù)據(jù)接收函數(shù)函數(shù)原型:UCHARRcvByte();功能:用來接收從器件傳來的數(shù)據(jù),并判斷總線錯
7、誤(不發(fā)應(yīng)答信號),發(fā)完后請用應(yīng)答函數(shù)應(yīng)答從機。*/unsignedcharRcvByte()(unsignedcharretc;unsignedcharBitCnt;retc=0;SDA(1);/SDA=1置數(shù)據(jù)線為輸入方式for(BitCnt=0;BitCnt<8;BitCnt+)(Delay_us_24C02(1);SCL(0);/SCL=0置時鐘線為低,準(zhǔn)備接收數(shù)據(jù)位Delay_us_24C02(5);/時鐘低電平周期大于4.7sSCL(1);/SCL=1置時鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效Delay_us_24C02(2);retc=retc<<1;if(GPIO_Rea
8、dInputDataBit(GPIOF,SData)=1)retc=retc+1;/SDA=1讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中Delay_us_24C02(2);SCL(0);/SCL=0;Delay_us_24C02(2);return(retc);/*應(yīng)答子函數(shù)函數(shù)原型:voidAck_I2c(bita);功能:主控器進行應(yīng)答信號(可以是應(yīng)答或非應(yīng)答信號,由位參數(shù)a決定)*/voidAck_I2c(u8a)if(a=0)SDA(0);/SDA=0;在此發(fā)出應(yīng)答或非應(yīng)答信號elseSDA(1);/SDA=1;Delay_us_24C02(3);SCL(1);/SCL=1;Delay_us
9、_24C02(4);/時鐘低電平周期大于4sSCL(0);/SCL=0;清時鐘線,鉗住I2C總線以便繼續(xù)接收Delay_us_24C02(2);/AT2402的功能函數(shù)/*向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)函數(shù)原型:bitISendStr(UCHARsla,UCHARsuba,ucahr*s,UCHARno);功能:從啟動總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個字節(jié)。如果返回1表示操作成功,否則操作有誤。注意:使用前必須已結(jié)束總線。*u8ISendStr(unsignedcharsla,unsignedcharsuba,
10、unsignedchar*s,unsignedcharno)(unsignedchari;啟動總線*/發(fā)送器件地址*/發(fā)送器件子地址*/發(fā)送數(shù)據(jù)*/結(jié)束總線*/Start_I2c();/*SendByte(sla);/*if(ack=0)return(0);SendByte(suba);/*if(ack=0)return(0);for(i=0;i<no;i+)(SendByte(*s);/*if(ack=0)return(0);s+;Stop_I2c();/*return(1);/*向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù)函數(shù)原型:bitRecndStr(UCHARsla,UCHARsuba,u
11、cahr*s,UCHARno);功能:從啟動總線到發(fā)送地址,子地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla,子地址suba,讀出的內(nèi)容放入s指向的存儲區(qū),讀no個字節(jié)。如果返回1表示操作成功,否則操作有誤。注意:使用前必須已結(jié)束總線。*/u8IRcvStr(unsignedcharsla,unsignedcharsuba,unsignedchar*s,unsignedcharno)(unsignedchari;啟動總線*/發(fā)送器件地址*/發(fā)送器件子地址*/重新啟動總線*/Start_I2c();/*SendByte(sla);/*if(ack=0)return(0);SendByte(su
12、ba);/*if(ack=0)return(0);Start_I2c();/*SendByte(sla+1);if(ack=0)return(0);for(i=0;i<no-1;i+)(*s=RcvByte();/*Ack_I2c(0);/*s+;*s=RcvByte();Ack_I2c(1);/*Stop_I2c();/*return(1);發(fā)送數(shù)據(jù)*/發(fā)送就答位*/發(fā)送非應(yīng)位*/結(jié)束總線*/voidDelay(vu32nCount)(for(;nCount!=0;nCount-);voidDelay_us_24C02(u32nTime)(unsignedintUSEC=0;while
13、(USEC!=10000)(USEC+;intmain()(#ifdefDEBUGdebug();/在線調(diào)試使用#endifRCC_Configuration();/系統(tǒng)時鐘配置函數(shù)/NVIC_Configuration();/NVIC配置函數(shù)/SysTick_Configuration();/Systick配置函數(shù)/啟動GPI。模塊時鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF|RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);/把調(diào)試設(shè)置普通IO口GPIO_PinRemapConfig(GPIO_R
14、emap_SWJ_Disable,ENABLE);GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;/所有GPIO為同一類型端口GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/輸出的最大頻率為50HZGPIO_Init(GPIOB,&GPIO_InitStructure);/初始化GPIOB口GPIO_InitStructure.GPIO_Pin=GPIO_Pin_All;/所有GPIO為同一類型端口GPI
15、O_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/推挽輸出GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/輸出的最大頻率為50HZGPIO_Init(GPIOF,&GPIO_InitStructure);/初始化GPIOB口開漏輸出/輸出的最大頻率為GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_OD;/GPIO_InitStructure.GPIO_Speed=GPIO_Speed_5
16、0MHz;50HZ初始化GPIOA口GPIO_Init(GPIOF,&GPIO_InitStructure);/GPIO_Write(GPIOB,0xffff);/將GPIOB16個端口全部置為高電while(1)/=IIC讀取if(Readzfc=1)IRcvStr(AT24C02,0,&R_Dat0,8);Readzfc=0;if(R_Dat2=0x55)GPIO_Write(GPIOB,0xffff);Delay(0x3fffff);GPIO_Write(GPIOB,0x0000);Delay(0x3fffff);Readzfc=0;if(Readzfc=0)(ISend
17、Str(AT24C02,0,&pDat0,8);Readzfc=1;/*配置RCC*/voidRCC_Configuration(void)(/復(fù)位RCW卜部設(shè)備寄存器到默認(rèn)值RCC_DeInit();/打開外部高速晶振RCC_HSEConfig(RCC_HSE_ON);/等待外部高速時鐘準(zhǔn)備好HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus=SUCCESS)/夕卜部高速時鐘已經(jīng)準(zhǔn)另U好(/開啟FLASH的預(yù)取功能FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable
18、);/FLASH延遲2個周期FLASH_SetLatency(FLASH_Latency_2);/配置AHB(HCLK)寸鐘=SYSCLKRCC_HCLKConfig(RCC_SYSCLK_Div1);/配置APB2(PCLK2神=AHB時鐘RCC_PCLK2Config(RCC_HCLK_Div1);/配置APB1(PCLK1)#=AHB1/2時鐘RCC_PCLK1Config(RCC_HCLK_Div2);/配置PLL時鐘=外部高速晶體時鐘*9PLLCLK=8MHz*9=72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);/使能PLL時鐘RCC_PLLCmd(ENABLE);/等待PLL時鐘就緒while(RCC_GetFlagStatus(RCC_FLAG_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 暈厥的鑒別診斷課件
- 二零二五年度工程評估與居間合同3篇
- 二零二五年度建筑裝修材料環(huán)保認(rèn)證采購協(xié)議3篇
- 二零二五年度產(chǎn)權(quán)車位買賣合同附帶車位增值服務(wù)拓展協(xié)議2篇
- 2025年度環(huán)保產(chǎn)業(yè)分公司設(shè)立與環(huán)保技術(shù)應(yīng)用合同3篇
- 二零二五年度企業(yè)內(nèi)部安全教育與防范協(xié)議3篇
- 2025年人教版(2024)七年級歷史上冊月考試卷
- 二零二五年度房產(chǎn)分割與個人財產(chǎn)分割離婚調(diào)解協(xié)議3篇
- 2025年人教A新版高三英語下冊階段測試試卷含答案
- 二零二五年度兼職品牌策劃合作協(xié)議3篇
- 《中西醫(yī)的區(qū)別》課件
- RFID電子標(biāo)簽制作方法
- 智能制造企業(yè)數(shù)字化轉(zhuǎn)型建設(shè)方案
- 病理生理學(xué)課件脂代謝紊亂
- 教師幽默朗誦節(jié)目《我愛上班》
- 《細(xì)胞工程學(xué)》考試復(fù)習(xí)題庫(帶答案)
- 中學(xué)課堂教學(xué)評價量表
- 食堂食材配送以及售后服務(wù)方案
- 稱量與天平培訓(xùn)試題及答案
- 塊單項活動教學(xué)材料教案丹霞地貌
- 青年人應(yīng)該如何樹立正確的人生觀
評論
0/150
提交評論