STM32F103讀寫24C02程序,使用過肯定能用_第1頁
STM32F103讀寫24C02程序,使用過肯定能用_第2頁
STM32F103讀寫24C02程序,使用過肯定能用_第3頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論