本帖最后由 不爱说话 于 2018-12-14 13:15 编辑
CAN功能调通是这次做板最大的收获。
在做这块板子之前我是没有调通STM32 Linux socket CAN的,但是我觉得CAN接口是很有用的,于是抱着不成功便成仁的心态先把CAN收发器和接口做到板子上了。
调试开始后,一切都很顺利,u-boot ok,linux ok,之前F429上能用的功能在F750上都成功了,最后轮到CAN接口了。
由于我没有现成的CAN网络,我的测试方式是把两块板子的CAN接口连起来组成最小的网络,一块板子发送,另一块接收。
我用的测试程序来自于can-utils工具包,cansend是发送程序,candump是接收程序,一开始cansend可以执行但是接收那边没有动静,打开debug调试信息一看,原来can数据帧没有发出去一直mailbox里。这个问题困扰我好几天,网上搜索说STM32的CAN没接收发器或者没连入网络的时候会发不出去数据,可是我这里接了啊。
于是仔细检查电路,最后发现原因了,CAN TX/RX和收发器接反了(以前做RS232串口经常犯的错误又重现了,很没有面子啊),好在CAN接口是用跳线连接的,对调一下就可以。
检查连接无误后再次上电,先打开接收板的CAN接收程序(candump),然后在发送端敲入cansend 。。。。。。,接收端正确接收到的数据了,这次终于成了!!!
STM32裸机CAN收发也许不算什么,但是在Linux下还是很不一样的,它是按照网络套接字(socket)机制工作的,用户只需要写应用,至于数据收发,是否成功,超时检测都由系统做了。以后做CAN应用就可以像网络编程那样写程序了(虽然还有很多不明白的地方)。
|