資源簡介
STM32F103ZE單片機CAN程序詳細例程,標注清晰、易于理解,便于開發(fā)。

代碼片段和文件信息
/*-------------------------------------------------------------------------------
文件名稱:myiic.c
文件描述:通過IIC協(xié)議控制24Cxx系列芯片讀寫
硬件平臺:尼莫M3S開發(fā)板
編寫整理:shifang
固件庫??:V3.5
技術(shù)論壇:www.doflye.net
備????注:通過簡單修改可以移植到其他開發(fā)板,部分資料來源于網(wǎng)絡(luò)。
---------------------------------------------------------------------------------*/
#include?“24cxx.h“?
#include?“delay.h“
//初始化IIC接口
void?AT24CXX_Init(void)
{
IIC_Init();
}
//在AT24CXX指定地址讀出一個數(shù)據(jù)
//ReadAddr:開始讀數(shù)的地址??
//返回值??:讀到的數(shù)據(jù)
u8?AT24CXX_ReadOneByte(u16?ReadAddr)
{ ??
u8?temp=0; ?? ???? ?
????IIC_Start();??
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); ???//發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr>>8);//發(fā)送高地址
IIC_Wait_Ack(); ?
}else?IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));???//發(fā)送器件地址0XA0寫數(shù)據(jù)? ?
IIC_Wait_Ack();?
????IIC_Send_Byte(ReadAddr%256);???//發(fā)送低地址
IIC_Wait_Ack(); ????
IIC_Start();?? ? ???
IIC_Send_Byte(0XA1);???????????//進入接收模式 ???
IIC_Wait_Ack(); ?
????temp=IIC_Read_Byte(0); ???
????IIC_Stop();//產(chǎn)生一個停止條件 ????
return?temp;
}
//在AT24CXX指定地址寫入一個數(shù)據(jù)
//WriteAddr??:寫入數(shù)據(jù)的目的地址????
//DataToWrite:要寫入的數(shù)據(jù)
void?AT24CXX_WriteOneByte(u16?WriteAddru8?DataToWrite)
{ ??? ?? ???? ?
????IIC_Start();??
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); ????//發(fā)送寫命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//發(fā)送高地址
? }else
{
IIC_Send_Byte(0XA0+((WriteAddr/256)<<1));???//發(fā)送器件地址0XA0寫數(shù)據(jù)?
} ?
IIC_Wait_Ack(); ???
????IIC_Send_Byte(WriteAddr%256);???//發(fā)送低地址
IIC_Wait_Ack();? ? ?? ???
IIC_Send_Byte(DataToWrite);?????//發(fā)送字節(jié) ???
IIC_Wait_Ack();?? ???? ???
????IIC_Stop();//產(chǎn)生一個停止條件?
Delay_ms(10); ?
}
//在AT24CXX里面的指定地址開始寫入長度為Len的數(shù)據(jù)
//該函數(shù)用于寫入16bit或者32bit的數(shù)據(jù).
//WriteAddr??:開始寫入的地址??
//DataToWrite:數(shù)據(jù)數(shù)組首地址
//Len????????:要寫入數(shù)據(jù)的長度24
void?AT24CXX_WriteLenByte(u16?WriteAddru32?DataToWriteu8?Len)
{??
u8?t;
for(t=0;t {
AT24CXX_WriteOneByte(WriteAddr+t(DataToWrite>>(8*t))&0xff);
} ????
}
//在AT24CXX里面的指定地址開始讀出長度為Len的數(shù)據(jù)
//該函數(shù)用于讀出16bit或者32bit的數(shù)據(jù).
//ReadAddr???:開始讀出的地址?
//返回值?????:數(shù)據(jù)
//Len????????:要讀出數(shù)據(jù)的長度24
u32?AT24CXX_ReadLenByte(u16?ReadAddru8?Len)
{??
u8?t;
u32?temp=0;
for(t=0;t {
temp<<=8;
temp+=AT24CXX_ReadOneByte(ReadAddr+Len-t-1);? ? ???
}
return?temp; ????
}
//檢查AT24CXX是否正常
//這里用了24XX的最后一個地址(255)來存儲標志字.
//如果用其他24C系列這個地址要修改
//返回1:檢測失敗
//返回0:檢測成功
u8?AT24CXX_Check(void)
{
u8?temp;
temp=AT24CXX_ReadOneByte(255);//避免每次開機都寫AT24CXX ???
if(temp==0X55)return?0; ???
else//排除第一次初始化的情況
{
AT24CXX_WriteOneByte(2550X55);
????temp=AT24CXX_ReadOneByte(255); ??
if(temp==0X55)return?0;
}
return?1; ??
}
//在AT24CXX里面的指定地址開始讀出指定個數(shù)的數(shù)據(jù)
//ReadAddr?:開始讀出的地址?對24c02為0~255
//pBuffer??:數(shù)據(jù)數(shù)組首地址
//NumToRead:要讀出數(shù)據(jù)的個數(shù)
void?AT24CXX_Read(u16?ReadAddru8?*pBufferu16?NumToRead)
{
while(NumToRead)
{
*pBuffer++=AT24CXX_ReadOneByte(ReadAddr++);
NumToRead--;
}
}??
//在AT24CXX里面的指定地址開始寫入指定個數(shù)
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\24cxx\
?????文件????????3829??2015-03-26?08:24??STM32-CAN實驗\24cxx\24cxx.c
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\USER\
?????文件????????3218??2015-03-26?09:32??STM32-CAN實驗\USER\main.c
?????文件????????3259??2011-04-04?19:03??STM32-CAN實驗\USER\stm32f10x_conf.h
?????文件????????4474??2015-01-27?14:29??STM32-CAN實驗\USER\stm32f10x_it.c
?????文件????????2086??2011-04-04?19:03??STM32-CAN實驗\USER\stm32f10x_it.h
?????文件???????79594??2015-01-23?23:45??STM32-CAN實驗\USER\test.uvgui.Administrator
?????文件???????72931??2015-03-26?09:33??STM32-CAN實驗\USER\test.uvgui.shifang
?????文件???????27615??2015-03-26?09:33??STM32-CAN實驗\USER\test.uvopt
?????文件???????22601??2015-03-26?09:23??STM32-CAN實驗\USER\test.uvproj
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\adc\
?????文件????????4030??2015-03-02?14:52??STM32-CAN實驗\adc\adc.c
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\beep\
?????文件????????1075??2015-01-28?15:46??STM32-CAN實驗\beep\beep.c
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\can\
?????文件????????5125??2015-03-26?09:09??STM32-CAN實驗\can\can.c
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\delay\
?????文件????????1843??2015-01-28?11:12??STM32-CAN實驗\delay\delay.c
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\flash\
?????文件????????9560??2015-03-26?08:46??STM32-CAN實驗\flash\flash.c
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\iic\
?????文件????????3094??2015-03-26?08:24??STM32-CAN實驗\iic\myiic.c
?????目錄???????????0??2019-01-16?16:09??STM32-CAN實驗\inc\
?????文件????????1417??2015-03-26?08:24??STM32-CAN實驗\inc\24cxx.h
?????文件?????????192??2015-03-02?14:48??STM32-CAN實驗\inc\adc.h
?????文件?????????395??2015-01-28?15:55??STM32-CAN實驗\inc\beep.h
?????文件?????????478??2015-03-26?09:09??STM32-CAN實驗\inc\can.h
?????文件?????????285??2015-01-28?11:13??STM32-CAN實驗\inc\delay.h
?????文件????????2491??2015-03-26?08:45??STM32-CAN實驗\inc\flash.h
............此處省略20個文件信息
評論
共有 條評論