江科大0.96寸OLED屏幕STM32F1代码移植至STM32F407ZGT6开发板遇到的挑战与问题解析
问题1
由于江科大0.96寸OLED IIC代码是用STM32F103C8T6作为主控,其代码是针对CPU主频是72MHZ的,而STM32F407ZGT6的CPU主频是164MHZ,直接移植使用的话会导致OLED不亮,且代码不报错。
解决办法
在OLED写SCL高低电平和OLED写SDA高低电平成员函数处增加若干延时,使其时序延长。
我这里加的2us的时延(试了一下,1us也可以,且刷新频率变高了),其他不同主频的芯片可以试着更改延时。
问题2
STM32F1系列的代码不能直接搬移到STM32F4系列代码上使用,这是因为一些GPIO口的初始化有略微的变化。
解决办法
那么,针对《江科大0.96寸OLEDSTM32F1代码移植到STM32F407ZGT6开发板》在GPIO初始化地方,进行下面修改即可。
这里的一定是输出模式,但是可以是开漏也可以改成推挽。记得这里初始化的GPIO和上面OLED写SCL高低电平和OLED写SDA高低电平成员函数的GPIO对应噢,不要忘记改上面的了。
问题3
显示中文有时候会显示方框里加一个问号'?'。这是因为在索引汉字的时候没用索引到导致只能显示作者(江科大)设置的最后一个字符(方框里加一个问好‘?’)。这其实很简单,是我们keil里设置的编码字符显示问题导致的,一个是UTF-8或者是GB2312,一定要选择对应的编码。
解决办法
那么,在江科大OLED代码里,有两种编码字符显示的代码,一个是UTF-8,另一个是GB2312。
更改keil的字符编码:
江科大OLED代码对应更改:
如果更改之后,还是不显示汉字或者发现OLED的某些相关文件字体编码和他其的不一样(这里指的是没有随着keil字符编码更改而更改的情况)。
那么,我们直接从源头解决问题,从江科大实例代码copy一份你想要的编码代码。例如,使用GB2312。
代码路径:0.96寸OLED显示屏\01-程序源码\OLED-V1.2\GB2312\01-OLED功能函数测试-4针脚I2C接口\Hardware,将这四个文件放到你的工程里就好了。
结语
这样就能顺利的显示辣 ~.~
致谢
感谢B站江科大的无私奉献。@江协科技 jiangxiekeji.com
作者:beauty_learner