imdx 发表于 2022-3-7 15:37

【AT-START-F425测评】AT32F425的USBCAN卡固件实现

AT32F425内部架构和AT32F421很接近,M4内核+嵌入式FLASH,主打低成本,主要更新是增加了USB和CAN这两个外设,相比同样带USB和CAN的AT32F415,主要指标都有降低,意味着成本也更低一些。从定位来看AT32F425处于AT32F415和AT32F421之间,如果你的应用需要USB或者CAN,那么AT32F425就是最佳选择之一。
USBCAN卡同时使用了USB和CAN外设,市面上以STM32F103为代表的很多MCU虽然同时具备USB和CAN但是有个奇葩的问题:这两个外设因为共享缓存导致无法同时使用,很多国内厂家在兼容ST的同时把这个问题也“兼容”了过来,比如 https://zhuanlan.zhihu.com/p/459732865 这里提到的。在USB和CAN共存方面雅特力做得一直不错。
USBCAN卡是调试CAN总线的必备工具,众所周知PC带USB接口但是都没有带CAN接口,因此必须要用USBCAN卡将USB接口转换成CAN接口。国内用的最多的是ZLG的卡,很多第三方工具也都是使用ZLG的SDK进行二次开发来的。使用AT32F425可以开发USBCAN卡用来兼容ZLG的USBCAN-I。
由于AT-START-F425开发板没有带CAN接口芯片,使用杜邦线将5V电源和PB8、PB9引到接口板上即可外扩CAN接口。如下图所示:

固件开发很顺利,因为之前已经使用AT32F415实现了完整的USBCAN协议栈,只需要做移植工作,AT32F425和AT32F415的USB外设非常接近,而CAN外设又是完全相同的。只需要注意几个地方即可:
1)两者的GPIO初始化有差别
// PB8= CAN0_RX
        // PB9= CAN0_TX
#if defined(AT32F415C8T7)
        gpio_init_struct.gpio_pins = GPIO_PINS_8;
        gpio_init_struct.gpio_mode = GPIO_MODE_INPUT;
        gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_pull = GPIO_PULL_UP;
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init(GPIOB, &gpio_init_struct);
        gpio_init_struct.gpio_pins = GPIO_PINS_9;
        gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
        gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
        gpio_init(GPIOB, &gpio_init_struct);
        gpio_pin_remap_config(CAN1_GMUX_0010, TRUE);
#else
        gpio_init_struct.gpio_pins = GPIO_PINS_8 | GPIO_PINS_9;
        gpio_init_struct.gpio_mode = GPIO_MODE_MUX;
        gpio_init_struct.gpio_out_type = GPIO_OUTPUT_PUSH_PULL;
        gpio_init_struct.gpio_pull = GPIO_PULL_NONE;
        gpio_init_struct.gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER;
        gpio_init(GPIOB, &gpio_init_struct);
        gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE8, GPIO_MUX_4);
        gpio_pin_mux_config(GPIOB, GPIO_PINS_SOURCE9, GPIO_MUX_4);
#endif2)AT32F425支持VBUSIGNORE,需要定义以下宏。
/**
* @brief ignore vbus detection, only available in at32f415xx revision C.
*      at32f415xx revision B: (not support)
*      the vbus detection pin (pa9) can not be used for other functionality.
*      vbus pin must kept at VBUS or VDD.
*
*      at32f415xx revision C: (support)
*      ignore vbus detection, the internal vbus is always valid.
*      the vbus pin (pa9) can be used for other functionality.
*/
#define USB_VBUS_IGNORE最后就是测试,使用乒乓测试,即USBCAN卡连接设备A,设备A将收到的CAN帧直接发送回来。使用cantest软件进行1w帧乒乓收发测试一切正常。



huquanz711 发表于 2022-3-7 20:31

不错,谢谢分享。

两只袜子 发表于 2022-3-10 09:58

不错,感谢分享

13342220988 发表于 2023-3-2 23:34

请教下425F8P7的PA11,PA12作为can1使用可以吗? 我这边在415上调试没问题,在425调试不通,怀疑是不是F8P7不支持can?

ArterySW 发表于 2023-3-3 09:36

支持的,使用PA9/10与PA11/12的交换功能。

ArterySW 发表于 2023-3-3 09:40

本帖最后由 ArterySW 于 2023-3-3 09:48 编辑

可参考这个demo:
AT32F421 型号
AT32F421_Firmware_Library/ project / at_start_f421 / examples / scfg / pa11_12_remap

AT32F425型号
AT32F425_Firmware_Library/ project / at_start_f425 / examples / scfg / pa11_12_remap


13342220988 发表于 2023-3-3 10:45

本帖最后由 13342220988 于 2023-3-4 21:25 编辑

搞定,多谢老师指点

13342220988 发表于 2023-3-3 12:16

本帖最后由 13342220988 于 2023-3-4 21:24 编辑

搞定, 多谢老师指点

gygp 发表于 2023-3-7 13:40

USBCAN是什么?            

lzmm 发表于 2023-3-7 13:47

usb和can是可以同时使用的吗

kmzuaz 发表于 2023-3-7 14:04

这个数据传递是通过dma传递的吗?

geraldbetty 发表于 2023-3-7 14:13

如何自检CAN通道收发性能 ?            

小小蚂蚁举千斤 发表于 2023-3-7 16:02

USB-CAN是一款用于PC的USB形式的CAN接口卡

elsaflower 发表于 2023-3-7 19:39

AT32F425支持几个usb设备?

robincotton 发表于 2023-3-7 19:45

usbcan需要写入程序吗               

51xlf 发表于 2023-3-7 19:51

usb的速度很快,如何控制can传输完成的?

mmbs 发表于 2023-3-7 19:56

如何转存CAN数据呢?               

backlugin 发表于 2023-3-7 20:06

AT32F425官方标称最高频率是96M

biechedan 发表于 2023-3-7 20:12

usb can收发器怎么检测CAN通道是不是好的呢?

xiaoyaodz 发表于 2023-3-7 20:18

usbcan2传输不稳定吧               
页: [1] 2
查看完整版本: 【AT-START-F425测评】AT32F425的USBCAN卡固件实现