STM32/STM8技术william hill官网
直播中

jyaxz

12年用户 430经验值
擅长:嵌入式技术
私信 关注
[经验]

【STM32MP157A-DK1开发板试用连载】CAN接口的应用

`
Linux系统下使用CAN接口

得益于ST官方的linux系统,已经集成了我们所需要的CAN的驱动程序,因此基于DK1我们实现CAN接口的测试没有驱动方面的障碍了。接下来就是我们如何选择CAN的接口和如果选择那个GPIO的引脚作为CAN的功能使用了。
    STM32MP1提供了两组CAN,根据数据手册我们可以总结出来。
FDCAN1的接口:
  
GPIO-TX引脚
  
  
GPIO-RX引脚
  
  
对应功能选择
  
  
PA12
  
  
PA11
  
  
AF9
  
  
PB9
  
  
PB8
  
  
AF9
  
  
PD1
  
  
PD0
  
  
AF9
  
  
PH14
  
  
PH13
  
  
AF9
  
  
-
  
  
PI9
  
  
AF9
  
FDCAN2的接口:
  
GPIO-TX引脚
  
  
GPIO-RX引脚
  
  
对应功能选择
  
  
PB7
  
  
PB5
  
  
AF9
  
  
PB13
  
  
PB12
  
  
AF9
  

通过DK1-GPIO扩展可以使用的GPIO引脚如下图所示:
    FDCAN1可选使用PA12和PA13,功能和I2C5复用;
    FDCAN2可选使用PB12和PB13,功能和USART3复用;
01.jpg
设备树文件配置:
    我们需要在设备树文件中配置其中一个CAN接口为我们使用,我先配置了FDCAN1作为引出的CAN接口。
    &pinctrl{
    fdcan1_pins:fdcan1_pins {
       pins{
           pinmux= , /* FDCAN1_RX */
                    ; /* FDCAN1_TX */
       };
  };
fdcan2_pins: fdcan2_pins {
       pins{
           pinmux= , /* FDCAN2_RX */
               ; /*FDCAN2_TX */
       };
    };
};

&m_can1{
    pinctrl-names= "default";
    pinctrl-0= <&fdcan1_pins>;
    status= "okay";
};
&m_can2{
    pinctrl-names= "default";
    pinctrl-0= <&fdcan2_pins>;
    status= "disabled";
};

编译设备树文件下载到系统中,重启系统。测试中发现无论如何都无法完成通讯,经过查询,发现PA11和PA12由于默认功能为I2C5,因此在这个引脚上分别接了1.5K的上拉电阻,影响了FDCAN1的通讯。

不知道这个分析是不是正确,但是我确实没有测试通过,希望有高手测试后可以把经验分享出来。
先禁用FDCAN1测试FDCAN2,调整设备树文件:
&m_can1{
    pinctrl-names= "default";
    pinctrl-0= <&fdcan1_pins>;
    status= "disabled ";
};
&m_can2{
    pinctrl-names= "default";
    pinctrl-0= <&fdcan2_pins>;
    status= " okay";
};
编译下载到目标板,重启系统。再次测试,FDCAN2可以正常测试通过。
CAN接口测试工具:
    我们可以编译一个CAN的测试工具can-tuils 。这个工具我们可以在之前的系统中添加,通过menuconfig->Target packages->Networking applicaions选择

can-utils
02.JPG

然后保存,重现编译系统,我们就可以获取CAN的测试工具了。
CAN接线:
    DK1板的扩展接口并没有CAN的物理层,因此我们必须增加一个物理层才能进行测试。
    我手头有个恩智浦的测试板Mxdock-1扩展板,可以提供CAN接口的物理层,正好。
还需要一个USB-CAN的测试工具,这个是我自己做的,功能具备,但是比较丑陋。
04.jpg
测试先连接的有点乱,主要连接3根线,GND,TX,RX。
测试结果:
    我们通过SSH连接到DK1板上,配置CAN0接口。
    波特率配置为125K:
       #ip link set can0 type can bitrate 125000
    使能can0接口:
       #ifconfigcan0 up
    运行can的测试软件:
       #candumpcan0

    Windows端打开测试设备,发送数据,观察dk1上的接收显示。
05.JPG

目标机显示接收
06.JPG
到这里,linux系统上的CAN通讯已经测试成功了,接下来将会在最后的项目中使用到这个接口完成与设备的通讯,并获取和解析数据。
下一贴将要进入异构核间通讯的研究。

` 03.jpg

更多回帖

发帖
×
20
完善资料,
赚取积分