最近准备用一下CAN总线,我手里有3个板子带CAN的收发器PHY,一个TMS320F28377S的LAUNCH,一个GD32VF103V EVAL,还有一个MM32 eMiniBoard。我记得手里有一个小板带CAN的PHY,但是前段时间使用时想不起来是哪个了就用TMS320F28377S和GD32VF103V测试的,TMS320F28377S当时收不到数据,只能发送数据。GD32VF103V很顺利没多长时间就调好了。但是GD32VF103V的板子有点大,用起来不是很方便,正好前几天有一个网友使用BlueNRG-LP时遇到问题,我把我装板子的箱子翻了很多遍,最后才找到BlueNRG-LP的板子。为了省空间我的板子都是直接用防静电袋装的,袋子有点黑看起来有点费劲,翻到MM32这个板子的时候仔细看了下发现了CAN接口,所以就准备在这个板子上弄一下。 最近废话有点多,现在进入正题,我在官网下载了1.03版本的MM32F013x 库函数和例程,对应的链接地址为:https://www.mindmotion.com.cn/getfile.aspx?id=1219。例程还是比较全的,CAN文件夹下有4个相关例程,我是想实现收发功能,简单看了下CAN_RX_Interrupt和CAN_TX,USER文件夹下只有main.c和main.h文件,CAN的配置等都写在HARDWARE\CAN下的can.c和can.h文件里了。
为了同时实现收发,我准备把CAN_RX_Interrupt和CAN_TX两个工程的can文件合并,打开Beyond Compare比对才发现 CAN_RX_Interrupt下的can.c文件中其实已经有了发送函数,只要在main.c中调用就行。 不过我这一对比发现了一些问题,感觉这个工程代码写的不怎么漂亮, 比如CAN_TX工程里把CAN_GPIO_Config写成了CNA_GPIO_Init。 上边这种错误可以理解,但是下边这种就显的很不规范了,一个函数名是Send_CANFrame另一个函数名是CAN_SendFrame,感觉不像是一个人写出来的代码(也许真是2个人写的)。
还有CAN_IRQHandler函数里用来接收数据的一个命名为gCanPeliRxMsgBuff,另一个命名为CanPeliRxMsgStructure,刚看的时候还迷糊了一会,不好理解。
工程还没运行,刚对比了2个文件就发现这点小问题,个人觉得官方提供的例程还是尽量要做的规范些。
|