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);
#endif
2)AT32F425支持VBUSIGNORE,需要定义以下宏。
/**
* [url=home.php?mod=space&uid=247401]@brief[/url] 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帧乒乓收发测试一切正常。
|