AT91sam系列的can通信连续读取数据问题

2019-07-16 09:34发布

   以前一直用STM32做can通信 用STM32板子上的can通信 一直很好用,最近接触at91sam9x35  它的can通信方式和STM32 不一样,一直can接受出现问题?请教几个问题。
1、at91sam9x35 和一个stm32进行can通信 一直没有问题,at91sam9x35 和12个stm32通信 问题就出来了  at91sam9x35的接受can信息有两种模式一种简单模式(接受到第一个can信息 就忽略后来的can信息)一种是覆盖模式(接受到新的信息直接将老信息覆盖掉),看到介绍 傻眼了! 怎么接收信息才能不丢失信息呢?
2、at91sam9x35 上面PDF 介绍说 运用多个邮箱进行轮换方式,置位邮箱控制寄存器(CAN-MCR)中的MTCR 来控制邮箱状态寄存器(CAN_MSR)的MRDY,来继续接受数据,我进行了设置3个邮箱,可不知道怎么设置 CAN-MCR中的MTCR,忙活了一周 也没有能控制好轮询接受。
3、一个can里面有8个邮箱,当中断来临时 判断can状态寄存器 MBx(x=0-7);是否有事件发生  有事件发生就进行can信息读取,用for循环将8个邮箱查找一遍,有信息就读取(1、先查看邮箱模式判断是接受还是发送邮箱,2、读取数据,我的问题主要出现在读取问题上),8个读取后应该置位CAN-MCR中的MTCR,可是不管我怎么置位 都不能连续读取数值了,命名12个从机 我开3个邮箱 或者8个邮箱,只能接受3个或者8个数据,剩下的从机信息就丢失了! 4、at91sam系列的can通信 怎么连续读取数据呢 请高人指点!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
z00
1楼-- · 2019-07-16 11:32
1. 可以Receive 或 Receive with overwrite 两种方式来接收can message.
第一种方式,SAM9X35的datasheet上面有描述“The first message received is stored in mailbox data registers. Data remain available until the next transfer request.”, 如果你的8个mailbox已经装载了接受到的信息,如果你不读取出来并请求下一个信息,它不会自动获取下一个信息,这时候后面的信息过来了,会直接丢弃掉。
第二种方式,如果前面的信息还没有读取,后面的信息已经过来了,就会override前面的信息。
z00
2楼-- · 2019-07-16 15:22
1、本例程是 linux中的socket can 和stm32 can的主从can通信 作者实际操作 8个stm32做从机和AT91sam9x35 成功通信 2、文档中 can,c是socket can的应用程序 做主机测试(设置500K波特率) 作者用的AT91sam9x35 3、文档中‘时间测试程序’为stm32 的从机can程序 修改发送函数中的 标准帧ID就可以设置不同从机 stm32测试型号为stm32F103BR

附件是例程:

socket_can_和stm32_can_通信例程.rar 下载积分: 积分 -1 分

3.66 MB, 下载次数: 15, 下载积分: 积分 -1 分

一周热门 更多>