1.前言
hpm6750具有高性能,比较适合做复杂控制算法,而工控领域can总线是绕不开的话题,本文进行基本can测试,后续将在此基础上进行相对复杂的程序编写。
2.接线
本次测评的hpm67650evkmini板子上没有can总线的phy,如果要用can总线就只能外接,刚好手上有个TJA1050小板,就用它测试。
![poYBAGKtakWAcbMWAAeHlqErmK0735.png](https://file.elecfans.com/web2/M00/4B/A5/poYBAGKtakWAcbMWAAeHlqErmK0735.png)
第一步:查询芯片手册以及开发板手册,找到需要的引脚。
![poYBAGKtZ9SAOMbwAAEwQ9Iq8Mw653.png](https://file.elecfans.com/web2/M00/4B/A4/poYBAGKtZ9SAOMbwAAEwQ9Iq8Mw653.png)
![pYYBAGKtaCaANIEQAABwaeXaN-A495.png](https://file.elecfans.com/web2/M00/4C/40/pYYBAGKtaCaANIEQAABwaeXaN-A495.png)
![poYBAGKtaI-AOWfWAABS06LrsE8204.png](https://file.elecfans.com/web2/M00/4B/A4/poYBAGKtaI-AOWfWAABS06LrsE8204.png)
整理需要连接的引脚如下表所示:
TJA1050PHY板引脚 |
HPM6750EVKMINI引脚 |
+5v |
P1_2 |
GND |
P1_6 |
CAN_TX |
P2_7 |
CAN_RX |
P2_10 |
然后使用杜邦线,将两块板以及usbcan进行连接,连好后的照片如下图。
![poYBAGKta-qANLUaAAMl-D-4cRE132.png](https://file.elecfans.com/web2/M00/4B/A5/poYBAGKta-qANLUaAAMl-D-4cRE132.png)
3.生成can测试工程
start_cmd.cmd进入D:\AEMBED\HPM6750\sdk_env_v0.11.0\hpm_sdk\samples\drivers\can
> generate_project -b hpm6750evkmini -t flash_xip
使用SEGGER Embedded Studio打开工程。
4.代码分析
根据can_demo.c中的源代码,准备测试board_can_echo_test_responder
回传程序,关键代码如下:
void board_can_echo_test_responder(void)
{
can_config_t can_config;
can_get_default_config(&can_config);
can_config.baudrate = 500000; /* 500kbps */
can_config.mode = can_mode_normal;
board_init_can(BOARD_APP_CAN_BASE);
uint32_t can_src_clk_freq = board_init_can_clock(BOARD_APP_CAN_BASE);
hpm_stat_t status = can_init(BOARD_APP_CAN_BASE, &can_config, can_src_clk_freq);
if (status != status_success) {
printf("CAN initialization failed, error code: %d\n", status);
return;
}
can_enable_tx_rx_irq(BOARD_APP_CAN_BASE, CAN_EVENT_RECEIVE);
intc_m_enable_irq_with_priority(BOARD_APP_CAN_IRQn, 1);
printf("CAN echo test: Responder is waiting for echo message...\n");
while (!has_new_rcv_msg) {
}
has_new_rcv_msg = false;
show_received_can_message((const can_receive_buf_t *)&s_can_rx_buf);
can_transmit_buf_t tx_buf;
memset(&tx_buf, 0, sizeof(tx_buf));
tx_buf.dlc = s_can_rx_buf.dlc;
tx_buf.id = 0x321;
uint32_t msg_len = can_get_data_bytes_from_dlc(s_can_rx_buf.dlc);
memcpy(&tx_buf.data, (uint8_t *)&s_can_rx_buf.data, msg_len);
status = can_send_message_blocking(BOARD_APP_CAN_BASE, &tx_buf);
if (status != status_success) {
printf("CAN sent message failed, error_code:%d\n", status);
return;
}
printf("Sent echo message back\n");
}
分析代码,总结函数功能:如果接收到can信息,将在串口打印出该信息的id以及信息内容,并且以ID=0x321将该can信息原路发送回去。
5.下载工程
使用SEGGER Embedded Studio编译下载,运行:
![pYYBAGKtbm-AdFmYAAKR1GF9BbA666.png](https://file.elecfans.com/web2/M00/4C/41/pYYBAGKtbm-AdFmYAAKR1GF9BbA666.png)
1.串口控制台输入3,板子进入等待接收状态;
2.使用usbcan发送如图所示信息,板子串口控制台出现响应,同时usbcan接收到板子发回的can信息。
![pYYBAGKtboWARdlAAAB5CahH6hA876.png](https://file.elecfans.com/web2/M00/4C/41/pYYBAGKtboWARdlAAAB5CahH6hA876.png)
3.试验现象与分析一致,can总线测试成功!
审核编辑:汤梓红
-
测试
+关注
关注
8文章
5409浏览量
127185 -
CAN
+关注
关注
57文章
2775浏览量
464579 -
总线
+关注
关注
10文章
2908浏览量
88491 -
开发板
+关注
关注
25文章
5144浏览量
98440
发布评论请先 登录
相关推荐
dsPIC33C Touch-CAN-LIN Curiosity开发板用户指南
![dsPIC33C Touch-<b class='flag-5'>CAN</b>-LIN Curiosity<b class='flag-5'>开发板</b>用户指南](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
自己做的hpm5321和6750板子怎么都没有1.1的输出呢?
如何使用Arduino实现CAN总线通信
HPM6750 Bootloader设计
HPM6750evkmini如何实现可信的执行环境?
[can开发板] 一款低价can/obd2总线Linux开发板
先楫半导体 hpm_sdk v1.5.0 正式发布
【米尔-瑞萨RZ/G2UL开发板】4.CAN通讯测试
先楫HPM5361EVK开发板,网友测评效果(二)
![先楫<b class='flag-5'>HPM</b>5361EVK<b class='flag-5'>开发板</b>,网友测评效果(二)](https://file.elecfans.com/web2/M00/37/D7/pYYBAGI9l9uAOwALAAAmFmqVYdg094.png)
评论