历史上的今天
今天是:2025年04月11日(星期五)
2020年04月11日 | 迁移微雪2.9寸电子墨水屏代码到Stm32F407上
2020-04-11 来源:eefocus
主要完成了微雪2.9寸电子墨水屏的代码迁移。官方提供的代码是基于STM32F103的,我对他进行了 代码的迁移,使之能运行在Stm32F407上。
墨水屏是从立创商城上买的,正常价格大概100元左右。商城活动大约40块钱入手

这是刚来的时候的样子,排线让我弄丢了,直接拆了插槽 把杜邦线焊上去了、、、、
这是运行demo时候的样子

墨水屏看起来真的很好看。进入正题,代码的迁移:

毫无疑问第一步肯定是修改 IO了,我在 readme 文件里面看到了引脚的定义。 这款屏一共用到了六个IO 其中四个是通用IO
两个是作为 SPI协议的MOSI和CLK线的虽然这款屏是标准的四线SPI,但是屏幕貌似是不需要给单片机回传什么数据的,所以我们只是需要用到 MOSI和clk线,当然CS和GND也少不了的。在STM32F4的程序中,我借鉴了正点原子的 SPI实验,其中对于SPI的配置是用的 SPI1对应IO分别是 PB3 PB4 PB5 ;PB3是CLK;PB5是MOSI ;PB4暂时没有用到。
通用IO方面没什么好说的,就是拉高拉低,我在最小系统板上面选取了几个相对不是很重要的,距离PB3 PB5比较近的IO


避开了可能用到的PD2 和PD5我选择了PD0 PD1 PD3 PD4这四个通用IO作用如下


初始化代码如上,其中要注意的是busy引脚是输入引脚,单片机需要读取这个引脚的状态判断 墨水屏是否忙
其余引脚是输出引脚。
针对于官方给出的 一些IO操作的部分,我给修改成了寄存器的位带操作。

因为我只用一款屏幕所以没有去考虑后期的迁移等问题。。。这里只是简单粗暴的修改了最底层的IO操作代码

这里有一点和官方的有一点区别

针对于官方代码的 UBYTE 我没有使用 宏定义去修改 而知直接查找 替换。。。这一点确实有一点欠考虑了以后代码可能会比较混乱吧
官方的debug语句我感觉用不上,也懒得去删除于是我用了这种方法

这里切记一点就是不要去替换 整个工程!!!这里切记会出很多错误的!你猜我咋知道的。。。
在处理完了这一部分的问题以后接下来的问题就是官方代码的编码风格。

这样的编写代码的方式,我一开始并不知道怎么去解决,只能 一个一个的去改,将变量的声明拖到代码的头部去。在写这篇博客的时候才发现了原来是这里!

官方的代码,勾选了C99 的格式、、、、 而且编译起来确实是没有问题的
当我发现 可以通过勾选这个 C99 解决问题的时候我已经完成了 将变量声明拖到 函数前面去。这算的上是一个新的发现。
接下来我又遇到了报错

bing 上搜索了一下 发现了我想要的答案 解决方法连接

这个问题解决了,问题产生的原因大概就是因为官方代码里面的调试部分 printf 出了问题。
接下来的一个问题时程序不运行发现程序卡死在串口的发送部分,得了调试屏幕用到的串口还没初始化

初始化完了串口 程序总算是可以跑起来了
串口调试起来还确实是挺方便的,我之前一直都用OLED作为调试工具的,看样子以后要多试试串口
接下来出现的问题是这个


通过查找问题 错误提示 我找到了问题所在,官方代码还非常好心的提示了可能会有堆内存不够的情况


我还特意去搜了一下 堆和栈的区别


很明显 这里是 malloc 肯定用的是堆内存 heap
总结: 今天遇到的bug 主要是 程序的编译部分, C99 这个问题可以避免
另外就是 UBYTE 转换成 u8 今天做的欠考虑了 可以直接宏定义转的
然后就是堆栈 堆是程序员 可以分配的,栈是编译器操作的
欢迎指出问题,如果您在迁移代码时候遇到了问题我也会尽量帮忙。
后续可能会考虑迁移一些其他的代码进去,比如显示 double HEX bin 之类的数字,暂时还是就这样吧,有需求了再去尝试
史海拾趣
|
我的WINCE设备现在已经可以识别为U盘. 还有个问题,当我把USB线插上的时候,WINCE上NAND FLASH的盘符消失,同时PC上显示U盘盘符;但是当我拔掉USB线时,PC上的盘符消失,而WINCE上的盘符却没有显示出来,怎么让FLASH重新MOUNT一次?这个问题怎么解决啊?… 查看全部问答> |
|
我在做hpi接口时,为什么arm跟dsp一握手,arm就死机? 我在做hpi接口时,出现了一个问题:在arm的nwait使能后,将dsp的/hrdy经非门转换后连接到nwait,那么数据读写一开始,arm就死机。但是如果此时快速断开nwait后,arm又会恢复过来,而且此时arm发出的片选信号和dsp的/hrdy信号也是好的。 大家可以 ...… 查看全部问答> |
|
问题是这样的: vxWorks下,我用routeAdd \"0.0.0.0\",\"192.168.1.1\"添加了一条路由,但是用routeDelete \"0.0.0.0\",\"192.168.1.1\"删除不掉。其实我是想修改网关的地址(先删再重新加),但是现在删不掉先前设置的。 请各位大大帮帮忙! … 查看全部问答> |
|
在使用s3c44b0的时候,看到有这么一条语句 rNCACHBE0=(((Non_Cache_End)>>12)12); 为什么这样就可以设置非cache区的起始和结束地址了? 另外为什么要写成((Non_Cache_End)>>12)… 查看全部问答> |
|
假如创建一个pty: ptyDevCreate(\"/pty/my.\", 512, 512);那么得到的主从设备依次为:\"/pty/my.M\"以及\"/pty/my.S\"。按照VxWorks的帮助是这么说的:主进程使用\"/pty/my.M\"进行写,从进程使用\"/pty/my.S\"进行读,按照,这样理解这个pty是单 ...… 查看全部问答> |
|
一个朋友最近送给我的一套【全美经典】系列教材,看了一点,感觉还可以,所以传上来给大家分享一下,全部免费下载,需要的朋友可以看一下。 [ 本帖最后由 fengxin 于 2010-10-23 11:49 编辑 ]… 查看全部问答> |
|
1、(定位)我们在开发一款路灯的时候,得先要有个定位(开发灯具条件表,如对灯具的大致结构,,电性能指标,发率,防护性能,期望重量等),目前,很多人对及系统了解得不够深入,知其然不知其所以然的。 目前国内LED道路照明标准尚正式出台,由 ...… 查看全部问答> |




