哎,做个项目木有想到就会遇到这么多鸡肋的事,做硬件的是个二把刀,之前没接触过stm32,因为一开始外部晶振采购那边一直没送过来,所以一开始干脆没有加上去,程序也就使用内部晶振什么都调试的好好的,就等外部晶振贴上去就完事了,然后纠结的事就来了,一搞到外部晶振就完全不对头了,郁闷之余找示波器,晶振有输出,为什么时间就是不对头呢,检查电路也没发现什么问题啊,找做硬件的请教,这个问题拖了两天,等得不耐烦了,我就一点一点着重的看了看手册关于时钟这一块,最终初步判定是起震电容不匹配的问题,跑去找硬件确认,我擦,果然给我整了一12p的电容,而stm32上严格要求6p的。 后来一切顺顺利利的项目搞定了,老大过来说看看能不能把功耗降一降,我说好,首先就把不用的IO口给处理了,一不留神就把J-link要用到的下载口也给搞了,下载了一块,恩还不错,整了程式之后,功耗降了不少,可是当我再下载更新程式时候,下载不了了,我没太在意,换了一块然后同样的问题又出现了,我哩个纠结,由于使用的cpu是64脚的bga封装,4mm*4mm的,所以焊接成功率惨不忍睹,一下子把仅有的俩块都搞没戏了,一下子慌了神,然后淡定下来,确定就是传说中的”自锁“,⊙﹏⊙b汗,捋顺情绪后,还好我的串口还在,使用串口刷了一下程式,一切ok。。 熬了那么些天终于等到给客户一个答案的时候了,正暗自庆幸,客户打来电话说使用台湾的路由器不能自由获取ip,而大陆的没有遇到这个问题,一开始我以为那边路由器难道需要什么特殊设置?还是客户没有设置正确?最终把台湾的路由器拿到手之后,认真的阅读使用说明书,没错啊,确实获取不到ip,什么情况?也不多想,那就抓包吧,看看dhcp的通信协议到底哪里出了问题,看了n遍格式没有错额,再看额问题出来了,看看下边我的笔记吧。。 https://www.stmcu.org.cn/file:///C:/Users/Administrator/AppData/Local/YNote/data/landiaojiekou@163.com/db8d1ad240f54ea7a79c65f4259c3aeb/clipboard.png 在DHCP的广播包中包含的MAC地址中第一位第8字节的奇偶决定着组播或者单播(具体的可以参见关于MAC地址影响单(组)播等的解释 这篇笔记中的讲解),大陆的路由器不影响,但是使用台湾的路由器时候就出现不能自由分配IP的问题。图解见附件。 其实问题的关键在于MAC地址给的出了问题,后边是重点额,呵呵,48bit的MAC地址一般用6字节的十六进制来表示,如XX-XX-XX-XX-XX。IEEE 802.3规定:以太网的第48bit用于表示这个地址是组播地址还是单播地址。而大陆的路由器dhcp协议做的要求宽松一些,台湾的就相对严格。 看一下大陆的路由器抓到的包: 再看看台湾的路由器抓到的数据包: 发现问题了吧,呵呵。 |
RE:【MCU实战经验】+说说自己项目中遇到的几个揪心事