STM32的IIC存储和读取整形数据,
下面的程序代码是使用stm32F03ZET6的I2C1(PB6,PB7)和AT24C02的EEPROM来测试的。希望对于需要的朋友有帮助。
主要代码如下:
- #include "delay.h"
- #include "stm32f10x.h"
- #include "usart.h"
- #include "24cxx.h"
-
- void readNInt(u16 addr,int *buf,int len);
- void writeOneInt(u16 addr,int data);
- int readOneInt(u16 addr);
- void writeNInt(u16 addr,int arr[],int len);
- int arr[] = {1222,1223,1224,1225,1226};
- int buf[5] = {0};
- char j = 0;
- int main(void)
- {
- delay_init(); //延时函数初始化
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置中断优先级分组为组
- uart_init(115200); //串口初始化为115200
- AT24CXX_Init(); //IIC初始化
-
- while(AT24CXX_Check())//检测不到24c02
- {
- printf("AT24C02 filed\r\n");
- }
- printf("AT24c02 is ok\r\n");
-
-
- /*测试向EEPROM中写入和读取一个整形数的程序*/
- writeOneInt(2,1024);
- delay_ms(1000);
- printf("read result is %d\r\n",readOneInt(2));
-
- /*测试写入和读取N个整形数的测试程序*/
- writeNInt(100,arr,5);
- delay_ms(1000);
- readNInt(100,buf,5);
- for(j=0;j<5;j++)
- {
- printf("%d\t",buf[j]);
- }
- printf("\r\n");
- while(1)
- {
-
- }
- }
-
- //功能:向EEPROM指定的地址写一个整形数
- //参数:addr:写入地址
- // data:写入的数据
- void writeOneInt(u16 addr,int data)
- {
- char tmp = 0,i = 0;
- for(;i<4;i++)
- {
- tmp = (char)(data & 0xFF);
- AT24CXX_WriteOneByte(addr,tmp);
- data = data >> 8;
- addr++;
- }
- }
-
- //功能:在EEPROM中的指定地址读取一个整形数
- //参数:addr:地址
- int readOneInt(u16 addr)
- {
- int tmp = 0;
- char i = 0;
- for(;i<4;i++)
- {
- tmp = tmp | (AT24CXX_ReadOneByte(addr) << (i*8)) ;
- addr++;
- }
- return tmp;
- }
-
- //功能:向EEPROM指定的地址写N个整形数
- //参数:addr:写入地址
- // arr:要写入数据所在的缓冲区
- // len:写入的个数
- void writeNInt(u16 addr,int *arr,int len)
- {
- char i = 0;
- for(;i<len;i++)
- {
- writeOneInt(addr,*(arr +i));
- addr += 4;
- }
- }
-
- //功能:向EEPROM指定的地址读N个整形数
- //参数:addr:读取地址
- // arr:读取数据要保存的缓冲区
- // len:读取的个数
- void readNInt(u16 addr,int *buf,int len)
- {
- char i = 0;
- for(;i<len;i++)
- {
- buf[i] = readOneInt(addr);
- addr += 4;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-