找回密码
 立即注册
查看: 271|回复: 5

请教个问题:CAN2模块收发3个字节的数据,这样设置可以吗?

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:350
  • 最近打卡:2025-05-01 00:57:45

35

主题

189

回帖

829

积分

高级会员

积分
829
发表于 2024-10-11 09:21:01 | 显示全部楼层 |阅读模式
本帖最后由 newlined 于 2024-10-11 09:27 编辑

首先是读数据,不需要解析ID,是标准帧,TMP2_BUF 是不是占用3个字节就可以了?谢谢。



CAN2_ReadMsg:
                                ORL     AUXR2,         #08H                                           ;选择CAN2模块
                                MOV     A, #RX_BUF0
                                CALL    CAN_ReadReg
                                MOV     TMP2_BUF+0, A
                                
                                MOV     A, #RX_BUF1
                                CALL    CAN_ReadReg
                                MOV     TMP2_BUF+1, A
                                
                                MOV     A, #RX_BUF2
                                CALL    CAN_ReadReg
                                MOV     TMP2_BUF+2, A
                                
                                MOV     A, #RX_BUF3
                                CALL    CAN_ReadReg
                                MOV     RX2_BUF+0, A   ;RX_BUF+0
                                
                                MOV     A, #RX_BUF0
                                CALL    CAN_ReadReg
                                MOV     RX2_BUF+1, A   ;RX_BUF+1
                                
                                MOV     A, #RX_BUF1
                                CALL    CAN_ReadReg
                                MOV     RX2_BUF+2, A   ;RX_BUF+2


发送数据:
CAN2_SendMsg:
                                PUSH    WR2
                                MOV     A, #TX_BUF0
                                MOV     B, #03H        ;bit7: 标准帧(0)/扩展帧(1), bit6: 数据帧(0)/远程帧(1), bit3~bit0: 数据长度(DLC)
                                CALL    CAN_WriteReg
                                
                                MOV     WR2, CAN2_ID
                                SLL     WR2
                                SLL     WR2
                                SLL     WR2
                                SLL     WR2
                                SLL     WR2
                                MOV     A, #TX_BUF1
                                MOV     B, R2
                                CALL    CAN_WriteReg
                                MOV     A, #TX_BUF2
                                MOV     B, R3
                                CALL    CAN_WriteReg
                                
                                MOV     A, #TX_BUF3
                                MOV     B, TX2_BUF+0
                                CALL    CAN_WriteReg
                                
                                MOV     A, #TX_BUF0
                                MOV     B, TX2_BUF+1
                                CALL    CAN_WriteReg
                                
                                MOV     A, #TX_BUF1
                                MOV     B, TX2_BUF+2
                                CALL    CAN_WriteReg
   
                                MOV     A, #TX_BUF3
                                MOV     B, #0
                                CALL    CAN_WriteReg
                                
                                MOV     A, #CMR
                                MOV     B, #04H                                                ;发起一次帧传输
                                CALL    CAN_WriteReg
                                POP                WR2
                                RET

                                



回复

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-27 09:44:17

25

主题

252

回帖

2089

积分

超级版主

积分
2089
发表于 2024-10-11 09:30:04 | 显示全部楼层

用CAN助手 试一下
截图202410110927176633.jpg
下载软件 链接:软件下载    AIapp-ISP-V6.94R 版



QQ:3398500488
微信号:18106296592(小刘)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:350
  • 最近打卡:2025-05-01 00:57:45

35

主题

189

回帖

829

积分

高级会员

积分
829
发表于 2024-10-11 09:36:29 | 显示全部楼层
芯L*** 发表于 2024-10-11 09:30
用CAN助手 试一下

下载软件 链接:软件下载    AIapp-ISP-V6.94R 版

谢谢您的回复,发送数据基本没有问题,但是我发现TMP2_BUF占用的3个字节之后的地址也被修改了,我不知道哪里出了问题,所以才在这里发帖。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2024-10-11 17:15:51 | 显示全部楼层
你提供的代码只对 TMP2_BUF+0、TMP2_BUF+1、TMP2_BUF+2 进行了操作,查一下程序里是否还对后面的地址进行了操作。
此外检查是否有变量定义到后面的地址上了。
CAN模块接收的数据是放在 RX_BUF 里面,通过代码读取出来放到RAM里面的。

点评

乘风老师您好,今天我仔细看了程序,原来是一个缓冲区出了问题,溢出了,谢谢您的提示。  发表于 2024-10-12 09:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:350
  • 最近打卡:2025-05-01 00:57:45

35

主题

189

回帖

829

积分

高级会员

积分
829
发表于 2024-10-11 18:12:36 | 显示全部楼层
乘风*** 发表于 2024-10-11 17:15
你提供的代码只对 TMP2_BUF+0、TMP2_BUF+1、TMP2_BUF+2 进行了操作,查一下程序里是否还对后面的地址进行了 ...

谢谢乘风老师的回复,我明天去仔细看下。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 00:19 , Processed in 0.110432 second(s), 75 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表