2020.5.31 雨

今日继续调试某沙雕板子。

板载GT30L32S4W字库芯片,主控stm32f103rct6。上次已经把例程里51的程序搬到32上了,但是跑起来就是读不出字库数据,当时整个人脑壳炸裂就扔那没再管了。今天又捡起来接着调。

手头有逻辑分析仪,万能表,无示波器。然后电脑只有俩usb口,鼠标占一个,jlink和分析仪也得各用一个,所以说用逻辑分析仪观测的时候就用不了鼠标,很淦。昨天hub到了,u口终于足够同时使用分析仪鼠标和jlink了,开工。一通操作之后,第一个问题是分析仪读到字库的spi上有一堆glitch,现在调完之后再思考,整不好是jtag的数据……然后一通操作之后,我确定通过寄存器方式控制io翻转的话脉冲间隔最短是40us,而glitch时间要比40短,所以不是程序问题导致的这个毛刺。然后很迷惑的在我确认完这个结论之后glitch不见了。

然后接着试spi嘛。分析仪一看,发现clk电平根本没动过,在程序末尾添加翻转io的死循环程序,再上分析仪看,别的io都在动,就clk没动静。进debug模式,观察io模式,gp output push-pull,没问题啊,手动点高odr,idr没反应,试试别的io,点高odr之后idr也会变emmmmmm

简单百度了一下odr和idr寄存器的同步关系,怀疑是字库芯片有问题导致clk被接地,无法拉高,上煎板卸掉字库再试,还是一个德行。拆字库的时候还把oled显示面给煎了一下,表面的膜褪色了一点,透出银色反光面,颜色稍微发黄,上电一试,还好没死还能亮,不然得顺丰加急再买一片了。

继续检查,clk是用的PB3,PB3是jtag功能脚,对应JTDO,上次调试的时候明明已经添加了关闭jtag功能的设置,继续百度,结果发现关闭jtag功能那句用之前还得开启复用功能时钟。

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);	
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试

添加如上程序,编译再试翻转io,行了现在idr跟着odr一起动了,问题解决了。

把字库焊回去,上电,显示正确,搞定收工。