GD32E230C8T6《调试篇》之 (硬件) IIC通信 + GN1650驱动芯片 + 4位8段数码管显示(未成功)
前言
芯片型号更换成E230了
GN1650
GN1650是2线串口共阴极8段4位,7*4位键盘扫描并带部分组合按键功能驱动控制专用电路。
内部集成有MCU输入输出控制数字接口、数据锁存器、LED驱动、键盘扫描、辉度调节等电路。本芯片性能稳定、质量可靠、抗干扰能力强,可适应于24小时长期连续工作的应用场合。
通信接口:类IIC,使用了IIC相同的时序,但没有完全遵守IIC的协议,不带从机地址
使用一款新的芯片时,首先就要查看其芯片规格书,以上来自GN1650规格书
我使用了2、3脚和GD32E23的42、43脚连接,
GN1650没有TM1650的文档详细,看的还是费劲;
上图的红色字的意思为:要先写入想显示的数据,再开启数码管显示;
GN1650就这么多有用信息,对于没有使用过1650的友友真的不友好;
再看TM1650的规格书,看看能不能提供有价值的线索
所以,GN1650的B7~B0 0100 1000就是系统指令0x48;GN1650的时序和TM1650的时序图差不多,我们参考一下;
可以看出GN1650的一个时序要包含ADDRESS和DATA,不能分开发,我在这里踩过坑;
IIC简介
I2C(Inter-Integrated Circuit BUS) 集成电路总线,该总线由NXP(原PHILIPS)公司设计,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短,任意时刻只能有一个主机等特性。
软件IIC:软件IIC通信指的是用单片机的两个I/O端口模拟出来的IIC,用软件控制管脚状态以模拟I2C通信波形,软件模拟寄存器的工作方式。
硬件IIC:一块硬件电路,硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的,硬件(固件)I2C是直接调用内部寄存器进行
测试工具——逻辑分析仪
除了CLK、GND,找其他通道连接数码管的SCL和SDA,GND接数码管的负极;
这种有输出波形的实验,还是要借助工具,不然很难知道错在哪;
参照了网上的方法以及GD32e230的例程,用逻辑分析仪还是没有抓到IIC的时序波形 ,所以数码管肯定不会亮;
代码
#define I2C0_SLAVE_GN1650 0x68 //DIG1
uint8_t i;
/******PA0用作测试脚,每隔50ms输出一次高低电平,对实验没有影响***/
void myGPIO_init(void)
{
/* enable GPIOB clock */
rcu_periph_clock_enable(RCU_GPIOA);
gpio_output_options_set(GPIOA, GPIO_OTYPE_PP, GPIO_OSPEED_2MHZ,GPIO_PIN_0);// GPIO_OTYPE_PP推挽输出
gpio_mode_set(GPIOA, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, GPIO_PIN_0);
}
//主函数处理,系统资源管理线程独占阻塞模式
int main(void)
{
systick_config();
myGPIO_init();