版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、/實(shí)驗(yàn)24C02連接在PF口/WP、A0、A1、A2都接地 #include "stm32f10x_flash.h" #include "stm32f10x_gpio.h" #include "stm32f10x_rcc.h" #define AT24C02 0xa0 /AT24C02 地址/* 變量定義 -*/GPIO_InitTypeDef GPIO_InitStructure; /GPIOErrorStatus HSEStartUpStatus;unsigned char Count1 , Count2;unsigned int
2、 USEC;static vu32 TimingDelay;unsigned char Readzfc;unsigned char pDat8 = 0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55;unsigned char R_Dat8;/*聲明函數(shù) -*/void RCC_Configuration(void);void SysTick_Configuration(void);void Delay_us_24C02(u32 nTime);/*24C02硬件接口*/ #define SData GPIO_Pin_6 /I2C 時(shí)鐘 #define SCLK GP
3、IO_Pin_7 /I2C 數(shù)據(jù) /*宏定義*/#define SCL(x)x ? GPIO_SetBits(GPIOF , SCLK) : GPIO_ResetBits(GPIOF , SCLK)#defineSDA(x) x ? GPIO_SetBits(GPIOF , SData) : GPIO_ResetBits(GPIOF , SData) /*變量*/u8 ack;/* 起動(dòng)總線函數(shù) 函數(shù)原型: void Start_I2c(); 功能: 啟動(dòng)I2C總線,即發(fā)送I2C起始條件. */void Start_I2c() SDA(1); /SDA=1; 發(fā)送起始條件的數(shù)據(jù)信號(hào) Delay
4、_us_24C02(1); SCL(1); /SCL=1; Delay_us_24C02(5); /起始條件建立時(shí)間大于4.7us,延時(shí) SDA(0); /SDA=0; /*發(fā)送起始信號(hào)*/ Delay_us_24C02(5); / 起始條件鎖定時(shí)間大于4s SCL(0); /SCL=0; /*鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù) */ Delay_us_24C02(2);/* 結(jié)束總線函數(shù) 函數(shù)原型: void Stop_I2c(); 功能: 結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件. */void Stop_I2c() SDA(0); /SDA=0; /發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào) Delay_us_
5、24C02(1); /發(fā)送結(jié)束條件的時(shí)鐘信號(hào) SCL(1); /SCL=1; 結(jié)束條件建立時(shí)間大于4s Delay_us_24C02(5); SDA(0); /SDA=1; 發(fā)送I2C總線結(jié)束信號(hào) Delay_us_24C02(4);/* 字節(jié)數(shù)據(jù)發(fā)送函數(shù) 函數(shù)原型: void SendByte(UCHAR c);功能: 將數(shù)據(jù)c發(fā)送出去,可以是地址,也可以是數(shù)據(jù),發(fā)完后等待應(yīng)答,并對(duì) 此狀態(tài)位進(jìn)行操作.(不應(yīng)答或非應(yīng)答都使ack=0) 發(fā)送數(shù)據(jù)正常,ack=1; ack=0表示被控器無(wú)應(yīng)答或損壞。*/void SendByte(unsigned char c) unsigned char B
6、itCnt; for(BitCnt=0;BitCnt<8;BitCnt+) /要傳送的數(shù)據(jù)長(zhǎng)度為8位 if(c<<BitCnt)&0x80) SDA(1); /SDA=1; 判斷發(fā)送位 else SDA(0); / SDA=0 Delay_us_24C02(1); SCL(1); /SCL=1 置時(shí)鐘線為高,通知被控器開(kāi)始接收數(shù)據(jù)位 Delay_us_24C02(5); /保證時(shí)鐘高電平周期大于4s SCL(0); /SCL = 0 Delay_us_24C02(2); SDA(1); /SDA=1 位發(fā)送完后釋放數(shù)據(jù)線,準(zhǔn)備接收應(yīng)答位Delay_us_24C02(2
7、); SCL(1); /SCL=1 Delay_us_24C02(3); if(GPIO_ReadInputDataBit(GPIOF ,SData)=1)ack=0; else ack=1; /判斷是否接收到應(yīng)答信號(hào) SCL(0); /SCL=0; Delay_us_24C02(3);/* 字節(jié)數(shù)據(jù)接收函數(shù) 函數(shù)原型: UCHAR RcvByte();功能: 用來(lái)接收從器件傳來(lái)的數(shù)據(jù),并判斷總線錯(cuò)誤(不發(fā)應(yīng)答信號(hào)), 發(fā)完后請(qǐng)用應(yīng)答函數(shù)應(yīng)答從機(jī)。 */ unsigned char RcvByte() unsigned char retc; unsigned char BitCnt; retc
8、=0; SDA(1); /SDA=1 置數(shù)據(jù)線為輸入方式 for(BitCnt=0;BitCnt<8;BitCnt+) Delay_us_24C02(1); SCL(0); /SCL=0 置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位Delay_us_24C02(5); /時(shí)鐘低電平周期大于4.7s SCL(1); /SCL=1 置時(shí)鐘線為高使數(shù)據(jù)線上數(shù)據(jù)有效 Delay_us_24C02(2); retc=retc<<1; if(GPIO_ReadInputDataBit(GPIOF , SData)= 1)retc=retc+1; / SDA = 1讀數(shù)據(jù)位,接收的數(shù)據(jù)位放入retc中 D
9、elay_us_24C02(2); SCL(0); / SCL=0; Delay_us_24C02(2); return(retc);/* 應(yīng)答子函數(shù)函數(shù)原型: void Ack_I2c(bit a);功能: 主控器進(jìn)行應(yīng)答信號(hào)(可以是應(yīng)答或非應(yīng)答信號(hào),由位參數(shù)a決定)*/void Ack_I2c(u8 a) if(a=0) SDA(0); /SDA=0;在此發(fā)出應(yīng)答或非應(yīng)答信號(hào) else SDA(1); /SDA=1; Delay_us_24C02(3); SCL(1); /SCL=1; Delay_us_24C02(4);/時(shí)鐘低電平周期大于4s SCL(0); /SCL=0; 清時(shí)鐘線,
10、鉗住I2C總線以便繼續(xù)接收 Delay_us_24C02(2); /AT2402的功能函數(shù)/* 向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù) 函數(shù)原型: bit ISendStr(UCHAR sla,UCHAR suba,ucahr *s,UCHAR no); 功能: 從啟動(dòng)總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過(guò)程,從器件 地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個(gè)字節(jié)。 如果返回1表示操作成功,否則操作有誤。注意: 使用前必須已結(jié)束總線。*/u8 ISendStr(unsigned char sla,unsigned char suba,unsigned char *s,uns
11、igned char no) unsigned char i; Start_I2c(); /*啟動(dòng)總線*/ SendByte(sla); /*發(fā)送器件地址*/ if(ack=0)return(0); SendByte(suba); /*發(fā)送器件子地址*/ if(ack=0)return(0); for(i=0;i<no;i+) SendByte(*s); /*發(fā)送數(shù)據(jù)*/ if(ack=0)return(0); s+; Stop_I2c(); /*結(jié)束總線*/ return(1);/* 向有子地址器件讀取多字節(jié)數(shù)據(jù)函數(shù) 函數(shù)原型: bit RecndStr(UCHAR sla,UCHAR
12、 suba,ucahr *s,UCHAR no); 功能: 從啟動(dòng)總線到發(fā)送地址,子地址,讀數(shù)據(jù),結(jié)束總線的全過(guò)程,從器件 地址sla,子地址suba,讀出的內(nèi)容放入s指向的存儲(chǔ)區(qū),讀no個(gè)字節(jié)。 如果返回1表示操作成功,否則操作有誤。注意: 使用前必須已結(jié)束總線。*/u8 IRcvStr(unsigned char sla,unsigned char suba,unsigned char *s,unsigned char no) unsigned char i; Start_I2c(); /*啟動(dòng)總線*/ SendByte(sla); /*發(fā)送器件地址*/ if(ack=0)return(0
13、); SendByte(suba); /*發(fā)送器件子地址*/ if(ack=0)return(0); Start_I2c(); /*重新啟動(dòng)總線*/ SendByte(sla+1); if(ack=0)return(0); for(i=0;i<no-1;i+) *s=RcvByte(); /*發(fā)送數(shù)據(jù)*/ Ack_I2c(0); /*發(fā)送就答位*/ s+; *s=RcvByte(); Ack_I2c(1); /*發(fā)送非應(yīng)位*/ Stop_I2c(); /*結(jié)束總線*/ return(1);void Delay(vu32 nCount) for(; nCount != 0; nCount-
14、);void Delay_us_24C02(u32 nTime)unsigned int USEC = 0; while(USEC != 10000) USEC+; int main() #ifdef DEBUGdebug(); /在線調(diào)試使用#endifRCC_Configuration(); /系統(tǒng)時(shí)鐘配置函數(shù) /NVIC_Configuration(); /NVIC配置函數(shù) /SysTick_Configuration(); /Systick配置函數(shù)/啟動(dòng)GPIO模塊時(shí)鐘RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF|RCC_APB2Periph_
15、GPIOB|RCC_APB2Periph_AFIO, ENABLE);/把調(diào)試設(shè)置普通IO口GPIO_PinRemapConfig(GPIO_Remap_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_
16、InitStructure); /初始化GPIOB端口 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(GPIOF, &GPIO_InitStructure); /初始化GPIOB端口 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
17、GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; /開(kāi)漏輸出 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; /輸出的最大頻率為50HZGPIO_Init(GPIOF, &GPIO_InitStructure); /初始化GPIOA端口GPIO_Write(GPIOB,0xffff); /將GPIOB 16個(gè)端口全部置為高電 while(1) /=IIC 讀取 if(Readzfc = 1) IRcvStr(AT24C02,0,&R_Dat0,8); Readzfc = 0; i
18、f(R_Dat2 = 0x55)GPIO_Write(GPIOB,0xffff);Delay(0x3fffff);GPIO_Write(GPIOB,0x0000);Delay(0x3fffff); Readzfc = 0; if(Readzfc = 0) ISendStr(AT24C02,0, &pDat0,8); Readzfc = 1; /* 配置RCC*/void RCC_Configuration(void) /復(fù)位RCC外部設(shè)備寄存器到默認(rèn)值 RCC_DeInit(); /打開(kāi)外部高速晶振 RCC_HSEConfig(RCC_HSE_ON); /等待外部高速時(shí)鐘準(zhǔn)備好 HSE
19、StartUpStatus = RCC_WaitForHSEStartUp(); if(HSEStartUpStatus = SUCCESS) /外部高速時(shí)鐘已經(jīng)準(zhǔn)別好 /開(kāi)啟FLASH的預(yù)取功能 FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /FLASH延遲2個(gè)周期 FLASH_SetLatency(FLASH_Latency_2); /配置AHB(HCLK)時(shí)鐘=SYSCLK RCC_HCLKConfig(RCC_SYSCLK_Div1); /配置APB2(PCLK2)鐘=AHB時(shí)鐘 RCC_PCLK2Config(RCC_HCLK_Div1); /配置APB1(PCLK1)鐘=AHB 1/2時(shí)鐘 RCC_PCLK1Config(RCC_HCLK_Div2); /配置PLL時(shí)鐘 = 外部高速晶體時(shí)鐘*9 PLLCLK = 8MHz * 9 = 72 MHz RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /使能PLL時(shí)鐘 RCC_PLLCmd(ENABLE); /等待PLL時(shí)鐘就緒 while(RCC_GetFlagStatus(RCC_FLAG_PLL
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 合同管理培訓(xùn)合同:上海項(xiàng)目實(shí)踐與招投標(biāo)(2025版)
- 二零二五年度智慧城市建設(shè)名義合伙人合同3篇
- 2025年度農(nóng)民工勞動(dòng)合同電子化管理方案及實(shí)施細(xì)則3篇
- 二零二五年度農(nóng)業(yè)產(chǎn)業(yè)鏈金融服務(wù)創(chuàng)新合同-@-1
- 2025版企業(yè)內(nèi)部設(shè)備維修承包合同規(guī)范文本4篇
- 2025年度排洪渠項(xiàng)目監(jiān)理合同模板3篇
- 二零二五年度人工智能核心算法軟件知識(shí)產(chǎn)權(quán)獨(dú)家轉(zhuǎn)讓合同3篇
- 二零二五年度全新品牌專賣店開(kāi)設(shè)服務(wù)合同范本4篇
- 2025年度票據(jù)代理業(yè)務(wù)委托合同范本6篇
- 2025年度苗圃技術(shù)員崗位聘用合同修訂版
- 勞務(wù)派遣勞務(wù)外包服務(wù)方案(技術(shù)方案)
- GB/T 43391-2023市場(chǎng)、民意和社會(huì)調(diào)查調(diào)查報(bào)告編制指南
- 拔罐技術(shù)操作考核評(píng)分標(biāo)準(zhǔn)
- 戒賭法律協(xié)議書范本
- 競(jìng)選市級(jí)三好學(xué)生PPT
- 2024屆甘肅省蘭州市五十一中生物高一上期末檢測(cè)模擬試題含解析
- 高標(biāo)準(zhǔn)農(nóng)田建設(shè)上圖入庫(kù)(技術(shù)培訓(xùn))
- 火災(zāi)隱患整改登記表
- 天津華寧KTC101說(shuō)明書
- 【智慧校園】-智慧校園系統(tǒng)方案
- 外研版高中新教材英語(yǔ)單詞表(必修一)
評(píng)論
0/150
提交評(píng)論