完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
以前一直用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个回答
|
|
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前面的信息。 |
|
|
|
1、本例程是 linux中的socket can 和stm32 can的主从can通信 作者实际操作 8个stm32做从机和AT91sam9x35 成功通信 2、文档中 can,c是socket can的应用程序 做主机测试(设置500K波特率) 作者用的AT91sam9x35 3、文档中‘时间测试程序’为stm32 的从机can程序 修改发送函数中的 标准帧ID就可以设置不同从机 stm32测试型号为stm32F103BR
附件是例程:
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
654 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2242 浏览 1 评论
771 浏览 0 评论
1530 浏览 1 评论
2276 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 00:24 , Processed in 0.586090 second(s), Total 77, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号