从站代码迁移,基于stm32f103与LAN9252

从站代码迁移,基于stm32f103与LAN9252

最近刚刚完成了从站代码的迁移,新的控制芯片使用了stm32f103,通信芯片使用了LAN9252,过程当中碰到了很多问题,当然在知乎寻求帮助得到了回应,所以来做个总结吧。

1.迁移到另一块单片机的代码keil报了如下错误:

Error:#268:declaration may not appear after executable statement in block.

Error:#29 execpected an expression.

这个代码我本身并未修改,但是还是报错了,百度第一个结果如下,定义的变量没有定义在最前面,编译器在执行的时候先使用了未初始化的变量。然后我又查看了百度的第二个结果,博客告诉我这是因为KEIL软件默认执行的是C89的标准,在编译选项中选中C99便不会报错了,但个人认为原因在根本上是一致的,代码本身并不够规范,变量初始化应该放在函数的起始部分,这样不管标准如何,程序都可以正常编译。

2.程序迁移编译环节通过了,没有报错,但是在调试过程中卡在了FSMC.C函数中,里面FSMC_NORSRAM_TimingTypeDef结构体的初始化需要对六个变量赋值,其中有数据建立时间、数据保存时间、地址保存时间、总线恢复时间、时钟分频因子和数据延迟时间,需要对LAN9252的数据手册查找关键数据。

3.在调试过程中,程序卡死在系统时钟初始化函数中,一开始怀疑为外部晶振问题,后来测量到板上外部晶振为25MHZ,但是芯片不支持这个频率的外部晶振,,f103芯片支持的外部晶振频率为4-16M,在sys.c中的时钟配置中,经过倍频后直接到了225Mhz,单片机直接超频卡死了,然后改用内部晶振8M,倍频最大到了64M,时钟初始化完成。

4. 在下载hex文件到flash中时,有警告信息“invalid rom table”,下载失败,后面通过烧写软件擦除清空flash后完成烧写。个人猜测flash可能经过多次烧写空间不足或是其他问题我暂时无法解释。

5. 程序在烧写以后,LAN9252的IRQ系统中断引脚被拉低后无法恢复,一直为低电平状态,无法触发下降沿,中断服务函数无法进入,从站初始化状态切换失败。经过一天的排查,我发现居然是自己的中断设置有问题,因为程序是移植过来的,中断引脚被接到了PB12上,我一直检查中断配置,中断线使能都没有发现问题,最后在调试过程中,发现自己的中断引脚和中断处理函数名居然没有对应,使用的一直是EXTI0_Handler,这样只是在中断线0的中断触发时会进入中断服务函数,而我使用的中断却映射在EXTI15_10_Handler上,由于这个中断服务函数是由硬件直接跳转的,所以我忽略了这个问题,很低级也很致命,毕竟问题没有出现在函数体内,所以排查确实靠的是灵光一现。

6.在FSMC初始化碰到的问题挺多的,这个部分主要是看stm32f103vct6的数据手册和LAN9252的数据手册,关于看手册的话确实经验不多,在这个移植过程中算是得到了锻炼,每个需要对应的引脚,不同模式下所需引脚和时序,起码看手册可以让你读懂代码。在767和103由于封装不同,所带资源的差异,当前的板子上面我只能使用一个FSMC内存片选引脚,即只能选用BANK1中的前64M内存,这里我要提到库函数中关于FSMC的bank内存定义名称有误,造成我很长时间不理解究竟选了哪块内存,最后我还是选择相信数据手册。由于没有FPGA,所以这片64M内存空间我就全部给LAN9252处理协议数据了,后面板子接上fpga的话个人觉得可以将64M空间分成两半给LAN9252和FPGA使用(FPGA用来处理IO数据),不过如何定义内存地址对应芯片仍然是一个问题。下周要是解决了回来做个补充。

可以发现,我的问题其实都是硬件问题,大部分问题通过芯片手册是可以解决的,关于ETHERCAT协议部分我并没有做修改,不过我最近也在深入了解,希望能够有所收获。这篇文章只是简单的总结,要是有疑问或者错漏欢迎交流。

~~~~~~~~~~~~~~~~分割线

后续的移植也完成了,一个FSMC接口分别连接了LAN9252芯片和FPGA,这时需要两个片选引脚来区分,但是103芯片100PIN封装只有一个FSMC片选信号,我的解决办法是重新使用了一个普通GPIO口来连接FPGA片选线,在与FPGA通信时拉低引脚电平,通信完成后置高,这样同样可以实现FSMC的通信,因为FSMC与两块芯片都是在不同时间通信的,我们只需要对FSMC所属的内存空间直接操作数据即可。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一百编程网朱老师

谢谢大爷谢谢大爷谢谢大爷谢谢大

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值