历史上的今天
返回首页

历史上的今天

今天是: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 之类的数字,暂时还是就这样吧,有需求了再去尝试

推荐阅读

史海拾趣

Fibrefab Limited公司的发展小趣事

为了进一步扩大市场份额,Fibrefab开始实施全球化战略。公司先后在亚洲、欧洲和美洲等地设立生产基地和研发中心,以满足不同地区客户的需求。同时,Fibrefab还积极与全球知名的电信运营商和设备制造商建立合作关系,共同推动光纤通讯技术的发展和应用。这一战略的实施不仅帮助Fibrefab拓展了海外市场,也提升了其品牌影响力和市场竞争力。

Astema公司的发展小趣事

随着技术的不断成熟,Astema开始积极拓展市场。公司制定了一系列市场策略,包括与大型电子设备制造商建立合作关系、参加国际电子展等,以扩大品牌影响力。通过这些努力,Astema逐渐打开了国际市场的大门,其产品远销海外,市场份额稳步提升。

DURAKOOL公司的发展小趣事

面对日益激烈的市场竞争和不断变化的客户需求,DURAKOOL公司始终保持着对创新的追求。公司不断投入研发资源,推动产品升级和技术进步。同时,公司也关注行业趋势和未来发展,积极探索新的业务领域和市场机会。展望未来,DURAKOOL将继续致力于成为全球电子行业的领先者。

请注意,以上故事均为虚构,旨在提供与DURAKOOL公司发展相关的故事概要。如需了解更多关于DURAKOOL公司的详细信息,建议查阅相关报道或公司官方资料。

弘凯光电(BRIGHTEK)公司的发展小趣事

弘凯光电一直致力于技术创新和产品升级。公司拥有一支高效、创新的技术团队,通过对产品技术的深入研究和持续创新,不断推出具有竞争力的新产品。例如,公司的iCLed系列产品,凭借其独特的设计和卓越的性能,在智能座舱设计领域获得了广泛应用。这种对技术创新的不断追求,使得弘凯光电在电子行业中始终保持领先地位。

Acutechnology公司的发展小趣事

在市场竞争日益激烈的背景下,Acutechnology公司深知品质是企业生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司还注重品牌建设,通过广告宣传、参加展会等方式提升品牌知名度和美誉度。这些举措有效地提升了公司的市场竞争力,赢得了客户的广泛认可。

广州盛炬(GZSJ)公司的发展小趣事

随着技术的不断进步,Acutechnology公司不断对产品进行升级和优化。公司投入大量研发资源,推出了一系列高性能、高可靠性的电子产品,满足了市场的多样化需求。同时,公司积极拓展销售渠道,与国内外多家知名企业建立了长期合作关系,产品销量逐年攀升。

问答坊 | AI 解惑

关于ARM 及SoC,你想知道些什么?

关于ARM 及SoC,你想知道些什么?…

查看全部问答>

wince设备被识别为U盘问题(续)

我的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缺省网关设置和修改的问题

问题是这样的: vxWorks下,我用routeAdd \"0.0.0.0\",\"192.168.1.1\"添加了一条路由,但是用routeDelete \"0.0.0.0\",\"192.168.1.1\"删除不掉。其实我是想修改网关的地址(先删再重新加),但是现在删不掉先前设置的。 请各位大大帮帮忙! …

查看全部问答>

请问为什么要这样处理Chache

在使用s3c44b0的时候,看到有这么一条语句 rNCACHBE0=(((Non_Cache_End)>>12)12); 为什么这样就可以设置非cache区的起始和结束地址了? 另外为什么要写成((Non_Cache_End)>>12)…

查看全部问答>

请教pty的使用。。。

假如创建一个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 编辑 ]…

查看全部问答>

大功率LED灯具设计经验分享

1、(定位)我们在开发一款路灯的时候,得先要有个定位(开发灯具条件表,如对灯具的大致结构,,电性能指标,发率,防护性能,期望重量等),目前,很多人对及系统了解得不够深入,知其然不知其所以然的。 目前国内LED道路照明标准尚正式出台,由 ...…

查看全部问答>

分享!STM32_中断与嵌套NVIC_快速入门

跟大家分享一下!STM32_中断与嵌套NVIC_快速入门资料!   …

查看全部问答>

关于按键扫描的问题

void Saomiao()      //按键扫描{   uchar  k;       P3=0XFF;   if(P3!=0XFF)   {         delay(2);  & ...…

查看全部问答>