[活动专区] 【AutoChips 7801x MCU评测报告】+CAN测试

[复制链接]
1507|3
 楼主| full_stack 发表于 2020-7-10 15:04 | 显示全部楼层 |阅读模式
本帖最后由 full_stack 于 2020-7-10 22:36 编辑

AC7801x 开发板,MCU型号为 AC78013FDLA,LQFP48
收到开发板就准备测试,
开发环境:
Keil MDK Version 5
AutoChips.AC780x_DFP.1.0.1.pack

硬件方面要有:
12V/5V 电源
下载仿真器
电源接口我找了下,没找到跟板子对应的,
下载器J-Link使用20针牛角座连上不能识别出设备。
搁置了几天,当时也比较忙,

连接.jpg

昨天又拿出来,
电源用了12V的开关电源,焊了两根线到背面,
下载器用了DAP飞线到板子上,总算能下载运行了,

打开Keil MDK Version 5,打开Pack Installer,如图

installers.png

可以看到AC78013FDLA提供的例程是如此之多,
随便选几个例程复制到本地测试,我选择CAN和GPIO的例程,因为考虑到会用这款芯片CAN设备的开发。
  1. while (1)
  2.     {
  3.                                 /* Get KEY6 state and Set LED2 state */
  4.         if ((s_key6State == GPIO_KEY_RELEASE) && (GPIO_GET_KEY6() == GPIO_KEY_PRESS))  /* Is KEY6 had been pressed */
  5.         {
  6.             mdelay(10);
  7.             if (GPIO_GET_KEY6() == GPIO_KEY_PRESS)
  8.             {
  9.                 s_led2Enable = !s_led2Enable;
  10.                 GPIO_SET_LED2(s_led2Enable);  /* toggle LED2 output */
  11.                 if (s_key6State == GPIO_KEY_RELEASE)
  12.                 {
  13.                     s_key6State = GPIO_KEY_PRESS;
  14.                     printf("KEY6 press!\r\n");
  15.                 }
  16.                                                                 recvFrameCount += CAN_InterruptRecvSendTest(CANx, type);
  17.             }
  18.         }
  19.                                 else if ((s_key6State == GPIO_KEY_PRESS) && (GPIO_GET_KEY6() == GPIO_KEY_RELEASE)) /* Is KEY6 had been released */
  20.         {
  21.             s_key6State = GPIO_KEY_RELEASE;
  22.             printf("KEY6 release!\r\n");
  23.         }
  24.         else
  25.         {

  26.         }

  27.         /* Get KEY7 state and Set LED3 state */
  28.         if ((s_key7State == GPIO_KEY_RELEASE) && (GPIO_GET_KEY7() == GPIO_KEY_PRESS))  /* Is KEY7 had been pressed */
  29.         {
  30.             mdelay(10);
  31.             if (GPIO_GET_KEY7() == GPIO_KEY_PRESS)
  32.             {
  33.                 s_key7State = GPIO_KEY_PRESS;
  34.                 s_led3Enable = !s_led3Enable;
  35.                 GPIO_SET_LED3(s_led3Enable);  /* toggle LED3 output */
  36.                 printf("KEY7 press!\r\n");
  37.             }
  38.         }
  39.         else if ((s_key7State == GPIO_KEY_PRESS) && (GPIO_GET_KEY7() == GPIO_KEY_RELEASE))  /* Is KEY6 had been released */
  40.         {
  41.             s_key7State = GPIO_KEY_RELEASE;
  42.             printf("KEY7 release!\r\n");
  43.         }
  44.         else
  45.         {

  46.         }
  47.     }

例程选择的CAN_DEMO,主函数用的的GPIO例程,按键KEY6控制LED2灯的时候发送一帧CAN,
CAN帧.png

CAN_DEMO中由于本来是设置了一段发送逻辑,由主程序500ms发送一次,所以会出现远程帧仍有数据长度的识别,
  1. int32_t CAN_InterruptRecvSendTest(CAN_Type *CANx, CAN_TransmitBufferType type)
  2. {
  3.     static CAN_MsgInfoType s_sendMsg = {0};
  4.     static uint8_t sendData[8] = {0};
  5.     int32_t recv = 0;
  6.     uint8_t instance = 0;

  7.     instance = CAN_INDEX(CANx);

  8.     if (s_recvMsgPool[instance].recvCount > 0)
  9.     {
  10.         while (s_recvMsgPool[instance].recvCount > 0)
  11.         {
  12.             recv++;
  13.             HandlePoolCanMsg(CANx);
  14.         }
  15.     }
  16.     if (!CAN_IsTransmitBusy(CANx, type))
  17.     {
  18.         s_sendMsg.ID++;
  19.         s_sendMsg.IDE = rand() % 2;
  20.         s_sendMsg.RTR = rand() % 2;
  21.         s_sendMsg.DLC = rand() % 9;
  22.         *(uint32_t *)sendData += 0xf;
  23.         *((uint32_t *)sendData + 1) += 0xf;
  24.         s_sendMsg.DATA = sendData;
  25.         if (0 == CAN_TransmitMessage(CANx, &s_sendMsg, type))
  26.         {
  27.             g_sendCount[instance]++;
  28.         }
  29.     }

  30.     return recv;
  31. }

不知是接收器检测到RTR位为远程帧,后面的数据部分不接收,还是远程帧没有发送8字节数据。
照我的理解,
如果发送远程帧,那么表示数据长度的寄存器DLC应该是0,并且不应该有8字节的数据发送
如果发送数据帧,不足八字节,那么DLC是几就应该发送几个字节,
不应该一直发8字节,由接收器去自己抉择。



wf663776 发表于 2020-10-16 14:28 | 显示全部楼层
weict125 发表于 2020-10-16 15:22 | 显示全部楼层
drgonshang 发表于 2023-4-29 17:42 | 显示全部楼层
PACK文件x下载
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

819

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部