一、硬件了解
在 NUCLEO-U5A5ZJ-Q 开发板上,提供了CAN接口:
在Zephy中,也正好提供了对应的支持:
在 ./boards/arm/nucleo_u5a5zj_q/nucleo_u5a5zj_q-common.dtsi 中,也有对应的定义:
这正好可以在Zephyr中,测试 NUCLEO-U5A5ZJ-Q 的CAN通信功能。
二、代码
在Zephyr中,提供了一个CAN测试的代码:samples/drivers/can/counter
如果有其他支持CAN的设备,可以将PD0、PD1连接上进行测试。
如果没有其他支持CAN的设备,也可以做回环测试。
要做回环测试,需要先配置prj.conf:
CONFIG_POLL=y
CONFIG_CAN=y
CONFIG_CAN_INIT_PRIORITY=80
CONFIG_CAN_MAX_FILTER=5
CONFIG_SHELL=y
CONFIG_CAN_SHELL=y
CONFIG_DEVICE_SHELL=y
CONFIG_GPIO=y
CONFIG_STATS=y
CONFIG_STATS_NAMES=y
CONFIG_STATS_SHELL=y
CONFIG_CAN_STATS=y
CONFIG_LOOPBACK_MODE=y
上述配置中的 CONFIG_LOOPBACK_MODE ,控制着是否开启回环测试。
在代码中,定义了两种类型的消息帧:
change_led_frame用于控制LED,counter_frame用于发送测试用的计数器数据。
在main()的数据发送部分:
每次发送切换LED消息,然后发送计数器的消息。
在代码中,负责LED切换的回调代码如下:
负责接受到计数器消息的代码如下:
三、运行测试:
编译上述代码:
然后使用pydocd烧录:
pyocd flash --erase chip --target stm32u5a5zjtxq ./build/zephyr/zephyr.hex
烧录完成,用串口监听工具监听,具体运行后的输出信息如下:
从上述输出可以看到,已经收到了自身发出的消息。
同时,板子上的LED也会随着每一次消息的发送,而闪烁起来。
|