版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(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"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í)鐘數(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;*起動(dòng)總線函數(shù)函數(shù)原型:voidStart_I2c();功能:?jiǎn)?dòng)I2C總線,即發(fā)送I2C起始條件.*/voidStart_I2c()(SDA(1);/SDA=1;發(fā)送起始條件的數(shù)據(jù)信號(hào)Delay_us_24C02(1);SCL(1);/SCL=1;/起始條件建立時(shí)間大于4.7us,延時(shí)Delay_us_24C02(5);SDA(0);/SDA=0;Delay_us_24C02(5);SCL(0);/SCL=0;D
4、elay_us_24C02(2);/*/*發(fā)送起始信號(hào)*/起始條件鎖定時(shí)間大于4s鉗住I2C總線,準(zhǔn)備發(fā)送或接收數(shù)據(jù)*/*結(jié)束總線函數(shù)函數(shù)原型:voidStop_I2c();功能:結(jié)束I2C總線,即發(fā)送I2C結(jié)束條件.*/voidStop_I2c()(發(fā)送結(jié)束條件的數(shù)據(jù)信號(hào)發(fā)送結(jié)束條件的時(shí)鐘信號(hào)結(jié)束條件建立時(shí)間大于4sSDA(0);/SDA=0;/Delay_us_24C02(1);/SCL(1);/SCL=1;Delay_us_24C02(5);SDA(0);/SDA=1;發(fā)送I2C總線結(jié)束信號(hào)Delay_us_24C02(4);/*字節(jié)數(shù)據(jù)發(fā)送函數(shù)函數(shù)原型:voidSendByte(UCH
5、ARc);功能:將數(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表示被控器無應(yīng)答或損壞。*/voidSendByte(unsignedcharc)(unsignedcharBitCnt;for(BitCnt=0;BitCnt<8;BitCnt+)/要傳送的數(shù)據(jù)長(zhǎng)度為8位(if(c<<BitCnt)&0x80)SDA(1);/SDA=1;判斷發(fā)送位elseSDA(0);/SDA=0Delay_us_24C02(1);SCL(1);/SCL=1置時(shí)鐘線為高,通知被控器開始
6、接收數(shù)據(jù)位Delay_us_24C02(5);/保證時(shí)鐘高電平周期大于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)答信號(hào)SCL(0);/SCL=0;Delay_us_24C02(3);/*字節(jié)數(shù)據(jù)接收函數(shù)函數(shù)原型:UCHARRcvByte();功能:用來接收從器件傳來的數(shù)據(jù),并判斷總線錯(cuò)
7、誤(不發(fā)應(yīng)答信號(hào)),發(fā)完后請(qǐng)用應(yīng)答函數(shù)應(yīng)答從機(jī)。*/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置時(shí)鐘線為低,準(zhǔn)備接收數(shù)據(jù)位Delay_us_24C02(5);/時(shí)鐘低電平周期大于4.7sSCL(1);/SCL=1置時(shí)鐘線為高使數(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);功能:主控器進(jìn)行應(yīng)答信號(hào)(可以是應(yīng)答或非應(yīng)答信號(hào),由位參數(shù)a決定)*/voidAck_I2c(u8a)if(a=0)SDA(0);/SDA=0;在此發(fā)出應(yīng)答或非應(yīng)答信號(hào)elseSDA(1);/SDA=1;Delay_us_24C02(3);SCL(1);/SCL=1;Delay_us
9、_24C02(4);/時(shí)鐘低電平周期大于4sSCL(0);/SCL=0;清時(shí)鐘線,鉗住I2C總線以便繼續(xù)接收Delay_us_24C02(2);/AT2402的功能函數(shù)/*向有子地址器件發(fā)送多字節(jié)數(shù)據(jù)函數(shù)函數(shù)原型:bitISendStr(UCHARsla,UCHARsuba,ucahr*s,UCHARno);功能:從啟動(dòng)總線到發(fā)送地址,子地址,數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla,子地址suba,發(fā)送內(nèi)容是s指向的內(nèi)容,發(fā)送no個(gè)字節(jié)。如果返回1表示操作成功,否則操作有誤。注意:使用前必須已結(jié)束總線。*u8ISendStr(unsignedcharsla,unsignedcharsuba,
10、unsignedchar*s,unsignedcharno)(unsignedchari;啟動(dòng)總線*/發(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);功能:從啟動(dòng)總線到發(fā)送地址,子地址,讀數(shù)據(jù),結(jié)束總線的全過程,從器件地址sla,子地址suba,讀出的內(nèi)容放入s指向的存儲(chǔ)區(qū),讀no個(gè)字節(jié)。如果返回1表示操作成功,否則操作有誤。注意:使用前必須已結(jié)束總線。*/u8IRcvStr(unsignedcharsla,unsignedcharsuba,unsignedchar*s,unsignedcharno)(unsignedchari;啟動(dòng)總線*/發(fā)送器件地址*/發(fā)送器件子地址*/重新啟動(dòng)總線*/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í)鐘配置函數(shù)/NVIC_Configuration();/NVIC配置函數(shù)/SysTick_Configuration();/Systick配置函數(shù)/啟動(dòng)GPI。模塊時(shí)鐘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個(gè)端口全部置為高電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);/等待外部高速時(shí)鐘準(zhǔn)備好HSEStartUpStatus=RCC_WaitForHSEStartUp();if(HSEStartUpStatus=SUCCESS)/夕卜部高速時(shí)鐘已經(jīng)準(zhǔn)另U好(/開啟FLASH的預(yù)取功能FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable
18、);/FLASH延遲2個(gè)周期FLASH_SetLatency(FLASH_Latency_2);/配置AHB(HCLK)寸鐘=SYSCLKRCC_HCLKConfig(RCC_SYSCLK_Div1);/配置APB2(PCLK2神=AHB時(shí)鐘RCC_PCLK2Config(RCC_HCLK_Div1);/配置APB1(PCLK1)#=AHB1/2時(shí)鐘RCC_PCLK1Config(RCC_HCLK_Div2);/配置PLL時(shí)鐘=外部高速晶體時(shí)鐘*9PLLCLK=8MHz*9=72MHzRCC_PLLConfig(RCC_PLLSource_HSE_Div1,RCC_PLLMul_9);/使能PLL時(shí)鐘RCC_PLLCmd(ENABLE);/等待PLL時(shí)鐘就緒while(RCC_GetFlagStatus(RCC_FLAG_
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度廠房裝修工程設(shè)計(jì)與施工監(jiān)理合同4篇
- 2025年度廠房租賃安全協(xié)議書(智能管理系統(tǒng)適用)4篇
- 2024版貨品物流服務(wù)協(xié)議
- 2025年度新型建材2024grc線條裝飾線條供應(yīng)協(xié)議3篇
- 工程建設(shè)國家標(biāo)準(zhǔn)《大體積混凝土溫度測(cè)控技術(shù)規(guī)范》條文說明
- 2025年度人工智能教育平臺(tái)開發(fā)與應(yīng)用合同9篇
- 專屬2024財(cái)務(wù)代表協(xié)議條款版B版
- 個(gè)人房產(chǎn)抵押借款協(xié)議標(biāo)準(zhǔn)格式版
- 2024虛擬現(xiàn)實(shí)產(chǎn)品開發(fā)與銷售合同
- 2024版單身公寓租賃合同附圖書閱覽室使用協(xié)議3篇
- 保潔服務(wù)崗位檢查考核評(píng)分標(biāo)準(zhǔn)
- 稱量與天平培訓(xùn)試題及答案
- 超全的超濾與納濾概述、基本理論和應(yīng)用
- 2020年醫(yī)師定期考核試題與答案(公衛(wèi)專業(yè))
- 2022年中國育齡女性生殖健康研究報(bào)告
- 各種靜脈置管固定方法
- 消防報(bào)審驗(yàn)收程序及表格
- 教育金規(guī)劃ppt課件
- 呼吸機(jī)波形分析及臨床應(yīng)用
- 常用緊固件選用指南
- 私人借款協(xié)議書新編整理版示范文本
評(píng)論
0/150
提交評(píng)論