ÐÂÊÖÉÏ·
- »ý·Ö
- 34
- ½ðÇ®
- 34
- ×¢²áʱ¼ä
- 2020-1-7
- ÔÚÏßʱ¼ä
- 8 Сʱ
|
1½ðÇ®
stm32 f103 дat24dc02 ΪʲôֻÄܶÁÒ»Ò³Êý¾Ý
unsigned char *Wbuf="12345678"; //ҳдÈë24c02µÄÊý¾Ý
unsigned char *Wbuf1="adbdefda"; //ҳдÈë24c02µÄÊý¾Ý
unsigned char Rbuf[8]; //Ò³¶ÁÈ¡24c02Êý¾ÝµÄ»º³åÇø
AT24C02_WritePage(32,Wbuf); //24c02Ò»Ò³ÊÇ8×Ö½Ú£¬ÎÒÃÇ´ÓµØÖ·8¿ªÊ¼Ð´È룬µÚ32Ò³
Delay_Ms(200);
AT24C02_WritePage(31,Wbuf1); //24c02Ò»Ò³ÊÇ8×Ö½Ú£¬ÎÒÃÇ´ÓµØÖ·8¿ªÊ¼Ð´È룬µÚ31Ò³
Delay_Ms(200);
AT24C02_ReadPage(32,Rbuf); //24c02Ò»Ò³ÊÇ8×Ö½Ú£¬ÎÒÃÇ´ÓµØÖ·32¿ªÊ¼¶ÁÈ¡£¬µÚ5Ò³
Delay_Ms(200);
printf("Ò³×Ö½Ú¶Áдȡ²âÊÔ:%s\r\n",Rbuf); //´®¿ÚÊä³öÊý¾Ý
AT24C02_ReadPage(31,Rbuf); //24c02Ò»Ò³ÊÇ8×Ö½Ú£¬ÎÒÃÇ´ÓµØÖ·31¿ªÊ¼¶ÁÈ¡£¬µÚ5Ò³
Delay_Ms(200);
printf("Ò³×Ö½Ú¶Áдȡ²âÊÔ:%s\r\n",Rbuf); //´®¿ÚÊä³öÊý¾Ý
iic²¿·Ö
#include "stm32f10x.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "delay.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "iic.h" //°üº¬ÐèÒªµÄÍ·Îļþ
/*-------------------------------------------------*/
/*º¯ÊýÃû£º³õʼ»¯IIC½Ó¿Ú */
/*²Î Êý£ºÎÞ */
/*·µ»ØÖµ£ºÎÞ */
/*-------------------------------------------------*/
void IIC_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure; //¶¨ÒåÒ»¸öÉèÖÃIOµÄ±äÁ¿
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC, ENABLE ); //ʹÄÜGPIOCʱÖÓ
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12 ; //×¼±¸ÉèÖÃPC11 12
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //ÍÆÃâÊä³ö·½Ê½
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IOËÙÂÊ50M
GPIO_Init(GPIOC, &GPIO_InitStructure); //ÉèÖÃPC11 12
IIC_SCL_H; //SCLÀ¸ß
IIC_SDA_H; //SDAÀ¸ß
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£ºIICÆðʼÐźŠ*/
/*²Î Êý£ºÎÞ */
/*·µ»ØÖµ£ºÎÞ */
/*-------------------------------------------------*/
void IIC_Start(void)
{
SDA_OUT(); //SDAÏßÊä³öģʽ
IIC_SDA_H; //SDAÀ¸ß
IIC_SCL_H; //SCLÀ¸ß
Delay_Us(4); //ÑÓʱ
IIC_SDA_L; //SCL¸ßµçƽµÄʱºò£¬SDAÓɸߵ½µÍ£¬ÆðʼÐźÅ
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£ºIICÍ£Ö¹ÐźŠ*/
/*²Î Êý£ºÎÞ */
/*·µ»ØÖµ£ºÎÞ */
/*-------------------------------------------------*/
void IIC_Stop(void)
{
SDA_OUT(); //SDAÏßÊä³öģʽ
IIC_SDA_L; //SDAÀµÍ
IIC_SCL_H; //SCLÀ¸ß
Delay_Us(4); //ÑÓʱ
IIC_SDA_H; //SCL¸ßµçƽµÄʱºò£¬SDAÓɵ͵½¸ß£¬·¢³öÍ£Ö¹ÐźÅ
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£ºµÈ´ýÓ¦´ð */
/*²Î Êý£ºÎÞ */
/*·µ»ØÖµ£º0£º³É¹¦ 1£ºÊ§°Ü */
/*-------------------------------------------------*/
char IIC_Wait_Ack(void)
{
unsigned char timeout=0; //¶¨ÒåÒ»¸ö±äÁ¿£¬ÓÃÓÚ¼ÆË㳬ʱʱ¼ä
IIC_SDA_H; //SDAÀ¸ß
SDA_IN(); //SDAÏßÊäÈëģʽ
IIC_SCL_H; //SCLÀ¸ß
while(READ_SDA){ //µÈ´ýSDA±äµÍµçƽ£¬±íʾӦ´ðµ½À´£¬²»È»Ò»Ö±whileÑ»·£¬Ö±µ½³¬Ê±
timeout++; //³¬Ê±¼ÆÊý+1
if(timeout>250){ //Èç¹û´óÓÚ250
IIC_Stop(); //·¢ËÍÍ£Ö¹ÐźÅ
return 1; //·µ»Ø1£¬±íʾʧ°Ü
}
Delay_Us(2); //ÑÓʱ
}
IIC_SCL_L; //SCLÀµÍ
Delay_Us(20); //ÑÓʱ
return 0; //·µ»Ø0£¬±íʾ³É¹¦
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£º·¢ËÍÒ»¸ö×Ö½Ú */
/*²Î Êý£ºtxd£º·¢Ë͵Ä×Ö½Ú */
/*·µ»ØÖµ£ºÎÞ */
/*-------------------------------------------------*/
void IIC_Send_Byte(unsigned char txd)
{
unsigned char t; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚforÑ»·
SDA_OUT(); //SDAÏßÊä³öģʽ
IIC_SCL_L; //SCLÀµÍ£¬¿ªÊ¼Êý¾Ý´«Êä
for(t=0;t<8;t++){ //forÑ»·£¬Ò»Î»Ò»Î»µÄ·¢ËÍ£¬´Ó×î¸ßλ λ7¿ªÊ¼
IIC_SDA_OUT(((txd&0x80)>>7)); //¸øSDAÊý¾ÝÏß
txd<<=1; //×óÒÆÒ»Î»£¬×¼±¸ÏÂÒ»´Î·¢ËÍ
Delay_Us(2); //ÑÓʱ
IIC_SCL_H; //SCLÀ¸ß
Delay_Us(2); //ÑÓʱ
IIC_SCL_L; //SCLÀµÍ
}
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£º¶Áȡһ¸ö×Ö½Ú */
/*²Î Êý£ºack£ºÊÇ·ñ·¢ËÍÓ¦´ð 1:·¢ 0£º²»·¢ */
/*·µ»ØÖµ£º¶ÁÈ¡µÄÊý¾Ý */
/*-------------------------------------------------*/
unsigned char IIC_Read_Byte(unsigned char ack)
{
unsigned char i; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚforÑ»·
unsigned char receive; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚ±£´æ½ÓÊÕµ½µÄÊý¾Ý
receive = 0; //Çå³ýreceive£¬×¼±¸½ÓÊÕÊý¾Ý
SDA_IN(); //SDAÉèÖÃΪÊäÈë
IIC_SCL_L; //SCLÀµÍ
Delay_Us(20); //ÑÓʱ
for(i=0;i<8;i++){ //forÑ»·£¬Ò»Î»Ò»Î»µÄ¶ÁÈ¡
IIC_SCL_H; //SCLÀ¸ß
Delay_Us(20); //ÑÓʱ
receive<<=1; //×óÒÆÒ»Î»£¬×¼±¸Ï´εĶÁÈ¡
if(READ_SDA)receive++; //¶ÁÈ¡Êý¾Ý
Delay_Us(20); //ÑÓʱ
IIC_SCL_L; //SCLÀµÍ
Delay_Us(20); //ÑÓʱ
}
if(!ack){ //²»ÐèÒª·¢ËÍ
SDA_OUT(); //SDAÏßÊä³öģʽ
IIC_SDA_H; //ʱÖÓÂö³åµÄ¸ßµçƽÆÚ¼ä±£³ÖÎȶ¨µÄ¸ßµçƽ
IIC_SCL_H; //SCLÀ¸ß
Delay_Us(2); //ÑÓʱ
IIC_SCL_L; //SCLÀµÍ
}else{ //ÐèÒª·¢ËÍ
SDA_OUT(); //SDAÏßÊä³öģʽ
IIC_SDA_L; //ʱÖÓÂö³åµÄ¸ßµçƽÆÚ¼ä±£³ÖÎȶ¨µÄµÍµçƽ
IIC_SCL_H; //SCLÀ¸ß
Delay_Us(2); //ÑÓʱ
IIC_SCL_L; //SCLÀµÍ
IIC_SDA_H; //SDAÀ¸ß
}
return receive;
}
24c02²¿·Ö
#include "stm32f10x.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "24c02.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "delay.h" //°üº¬ÐèÒªµÄÍ·Îļþ
#include "iic.h" //°üº¬ÐèÒªµÄÍ·Îļþ
/*-------------------------------------------------*/
/*º¯ÊýÃû£º´Ó24c02Ö¸¶¨µÄµØÖ·¶ÁÒ»×Ö½ÚÊý¾Ý */
/*²Î Êý£ºReadAddr:ÐèÒª¶ÁÊý¾ÝµÄµØÖ· */
/*·µ»ØÖµ£º¶Áµ½µÄÊý¾Ý */
/*-------------------------------------------------*/
unsigned char AT24C02_ReadOneByte(unsigned char ReadAddr)
{
unsigned char receive; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚ±£´æ½ÓÊÕµ½µÄÊý¾Ý
receive = 0; //Çå³ýreceive£¬×¼±¸½ÓÊÕÊý¾Ý
IIC_Start(); //IIC¿ªÊ¼ÐźÅ
IIC_Send_Byte(AT24C02_WADDR); //·¢ËÍ24c02Æ÷¼þµØÖ·+д²Ù×÷
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Send_Byte(ReadAddr); //·¢ËÍÐèÒª¶ÁÊý¾ÝµÄµØÖ·
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Start(); //IIC¿ªÊ¼ÐźÅ
IIC_Send_Byte(AT24C02_RADDR); //·¢ËÍ24c02Æ÷¼þµØÖ·+¶Á²Ù×÷
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
receive=IIC_Read_Byte(0); //¶ÁÒ»×Ö½ÚÊý¾Ý£¬±£´æÔÚreceive±äÁ¿ÖÐ
IIC_Stop(); //Í£Ö¹ÐźÅ
Delay_Ms(5); //ÑÓ³Ù
return receive; //·µ»Ø¶ÁÈ¡µÄÊý¾Ý
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£ºÖ¸¶¨µØÖ·Ð´ÈëÒ»¸öÊý¾Ý */
/*²Î Êý£ºWriteAddr :дÈëÊý¾ÝµÄÄ¿µÄµØÖ· */
/*²Î Êý£ºDataToWrite:ҪдÈëµÄÊý¾Ý */
/*·µ»ØÖµ£ºÎÞ */
/*-------------------------------------------------*/
void AT24C02_WriteOneByte(unsigned char WriteAddr,unsigned char DataToWrite)
{
IIC_Start(); //¿ªÊ¼ÐźÅ
IIC_Send_Byte(AT24C02_WADDR); //·¢ËÍÆ÷¼þµØÖ·+д²Ù×÷
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Send_Byte(WriteAddr); //·¢ËÍдÈëÊý¾ÝµÄÄ¿µÄµØÖ·
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Send_Byte(DataToWrite); //·¢ËÍҪдÈëµÄÊý¾Ý
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Stop(); //Í£Ö¹ÐźÅ
Delay_Ms(5); //ÑÓ³Ù
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£ºÖ¸¶¨µØÖ·Ð´ÈëÒ»Ò³Êý¾Ý£¨8×Ö½Ú£© */
/*²Î Êý£ºWriteAddr :дÈëÊý¾ÝµÄÆðʼµØÖ· */
/*²Î Êý£ºDataToWrite:ҪдÈëµÄÊý¾Ý£¨8¸ö×Ö½Ú£© */
/*·µ»ØÖµ£ºÎÞ */
/*-------------------------------------------------*/
void AT24C02_WritePage(unsigned char WriteAddr,unsigned char *DataToWrite)
{
unsigned char i; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚforÑ»·
IIC_Start(); //¿ªÊ¼ÐźÅ
IIC_Send_Byte(AT24C02_WADDR); //·¢ËÍÆ÷¼þµØÖ·+д²Ù×÷
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Send_Byte(WriteAddr); //·¢ËÍдÈëÊý¾ÝµÄÄ¿µÄµØÖ·
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
Delay_Us(20);
for(i=0;i<8;i++){ //24c02Ò»Ò³8¸ö×Ö½Ú£¬Ñ»·Ð´Èë
IIC_Send_Byte(DataToWrite[i]); //·¢ËÍҪдÈëµÄÊý¾Ý
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
}
IIC_Stop(); //Í£Ö¹ÐźÅ
Delay_Ms(5); //ÑÓ³Ù
}
/*-------------------------------------------------*/
/*º¯ÊýÃû£º´ÓÖ¸¶¨µÄµØÖ·¶ÁÒ»Ò³Êý¾Ý(8×Ö½Ú) */
/*²Î Êý£ºReadAddr:ÐèÒª¶ÁÊý¾ÝµÄµØÖ· */
/*²Î Êý£ºRedata:±£´æ½ÓÊÕµ½µÄÊý¾Ý */
/*·µ»ØÖµ£º¶Áµ½µÄÊý¾Ý */
/*-------------------------------------------------*/
void AT24C02_ReadPage(unsigned char ReadAddr, unsigned char *Redata)
{
unsigned char i; //¶¨ÒåÒ»¸ö±äÁ¿ÓÃÓÚforÑ»·
IIC_Start(); //IIC¿ªÊ¼ÐźÅ
IIC_Send_Byte(AT24C02_WADDR); //·¢ËÍÆ÷¼þµØÖ·+д²Ù×÷
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Send_Byte(ReadAddr); //·¢ËÍÐèÒª¶ÁÊý¾ÝµÄµØÖ·
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
IIC_Start(); //IIC¿ªÊ¼ÐźÅ
IIC_Send_Byte(AT24C02_RADDR); //·¢ËÍÆ÷¼þµØÖ·+¶Á²Ù×÷
IIC_Wait_Ack(); //µÈ´ýÓ¦´ð
for(i=0;i<7;i++){ //24c02Ò»Ò³8¸ö×Ö½Ú£¬Ñ»·¶Áȡǰ7¸ö×Ö½Ú
Redata[i]=IIC_Read_Byte(1);//¶ÁÒ»×Ö½ÚÊý¾Ý£¬·¢ËÍACKÐźÅ
}
Redata[7]=IIC_Read_Byte(0); //¶Á×îºóÒ»×Ö½ÚÊý¾Ý£¬²»·¢ËÍACKÐźÅ
IIC_Stop(); //Í£Ö¹ÐźÅ
Delay_Ms(5); //ÑÓ³Ù
}
|
|