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         }

 

posted on 2025-03-10 14:55  Lqqq123  阅读(133)  评论(0)    收藏  举报

导航