CH395 EEPROM+GPIO应用
注:本文中,CH395Q、CH395L统称旧版,CH395F、CH395A、CH395P统称新版
1.区别对比
(1)EEPROM功能
对比:
①旧版擦除eeprom后数据为0xFF,新版擦除eeprom后数据为0xF5
②旧版对于擦除、读以及写这三个操作没有具体操作时间上的要求,但新版有要求(见下图)
其余部分无区别。

(2)GPIO功能
对比:
CH395F和CH395A,并口和GPIO口复用 部分引脚,如果选择并口,对应GPIO功能失效,同时GPIO寄存器的对应位无意义。
其余部分无区别。
2.注意事项
(1)对eeprom写操作前必须有擦除操作以此来将eeprom中的值恢复默认值(注意395的擦除是全擦)
(2)读写eeprom时,一次操作数据流不得大于64字节
(3)eeprom连续读、写、擦除操作需满足时序要求
3.代码实现
(1)EEPROM功能
1 CH395EEPROMErase();//擦 2 Delay_Ms(100); 3 CH395EEPROMRead(0,test_buf1,4);//读是否擦除成功,即 读出来的数据是否为默认值 4 for(int k = 0;k<4;k++) 5 { 6 printf("%x",test_buf1[k]); 7 } 8 printf("\r\n"); 9 Delay_Ms(100); 10 CH395EEPROMWrite(0,test_buf,4);//擦除成功后写四字节数据 11 Delay_Ms(100); 12 CH395EEPROMRead(0,test_buf1,4);//写完再读,读出上一步写的内容,验证是否写成功 13 for(int k = 0;k<4;k++) 14 { 15 printf("%x",test_buf1[k]); 16 } 17 printf("\r\n");
(2)GPIO功能
寄存器见下图

下方测试程序测试了GPIO_0和GPIO_5(所有GPIO寄存器有8位,bit0~7分别对应GPIO0~7)
实现的效果是,将GPIO脚设置为输出,GPIO_0和GPIO_5分别控制两个LED灯的亮灭5次;将GPIO脚设置为输入,读取GPIO脚电平
1 /********输出测试********/ 2 CH395WriteGPIOAddr(0x80,0x21);//输出0010 0001 3 CH395WriteGPIOAddr(0x85,0x21);//上拉 4 CH395WriteGPIOAddr(0x82,0xDE);//初始输出一个低电平 5 Delay_Ms(100); 6 for(i=0;i<5;i++) 7 { 8 CH395WriteGPIOAddr(0x82,0x21);//0010 0001 /*演示GPIO的输出功能,控制LED等闪烁5次*/ 9 Delay_Ms(200); 10 CH395WriteGPIOAddr(0x82,0x00);//0000 0000 11 Delay_Ms(200); 12 } 13 /********输入测试********/ 14 CH395WriteGPIOAddr(0x80,0xDE); //输入1101 1110 15 CH395WriteGPIOAddr(0x85,0x21);//上拉 16 Delay_Ms(500); 17 for(int j=0;j<50;j++) 18 { 19 i = CH395ReadGPIOAddr(0x81); /*获取当前GPIO状态*/ 20 printf("CurrentStatus : %2x \r\n",(UINT16)i); 21 Delay_Ms(1000); 22 }
浙公网安备 33010602011771号