消息关闭
    暂无新消息!

10个回答

︿ 3
所谓发送,就是对配置好的CAN的某个空邮箱(FIFO),设置标识符(也就是前面一个问题你曾经问过的STID或者EXID),数据长度和待发送数据(这个就不需要解释了吧),然后对CAN_TIxR寄存器的TXRQ位置’1’,来请求发送。这就是MAIN里面做的动作。

剩下的就是CAN硬件的事情了:

TXRQ位置’1’后,邮箱就不再是空邮箱;而一旦邮箱不再为空置,软件对邮箱寄存器就不再有写的权限。TXRQ位置1后,邮箱马上
进入挂号状态,并等待成为最高优先级的邮箱(具体参考CAN发送优先级),一旦邮箱成为最高优先级邮箱,其状态就变为预定发送状态。等CAN总线进入空闲状态,预定发送邮箱中的报文就马上被发送(进入发送状态)。邮箱中的报文被成功发送后,它又变为空置邮箱;硬件相应地对CAN_TSR寄存器的RQCP和TXOK位置1,来表明一次成功发送。开了中断的,会在完成发送后触发发送中断。
︿ 3
不对 就是说我在while里传入数据长度和待发送数据,然后置1,我上面的程序错误 就是因为没有传参数,所以并没有标识ID?
︿ 3
这样的话我在TX和RX函数里已经配置好了,再MAIN里直接调用一次就行了?while里可以是空的?
︿ 1
怎么去写这个发送 我还是不太理解 能不能示范1个简单的while里怎么写的
︿ 1
CAN的发送中断,只有一种,就是发送邮箱变空,硬件有几个邮箱,那么那几个邮箱都可以触发发送邮箱变空中断。
接受中断有下面几种:邮箱接收一个新报文、邮箱满了、邮箱溢出。
还有CAN错误和状态变化中断:出错、唤醒(在CAN接收引脚上监视到帧起始位(SOF))、CAN进入睡眠模式。
︿ 0
RX、Tx的是中断函数吧,中断函数不要放在主程序里,接收到数据或者发送完数据,自己会进入程序

Tx最开始的时候在主程序必须有个触动,才会进入
︿ 0
其实和传统通信类硬件调试差不多,首先你得有一个USB-CAN 的调试器,某宝几百到几十都有,上位机可以进行预设格式的CAN数据发送和CAN接受信号的分析等等,就像我们用串口助手学习串口一样的过程。至于单片机,则无非就是CAN初始化,中断设置,还有就是主函数发送  接受  转换处理等等  还要清楚CAN中断和一般通信中断的区别,并编写中断服务程序。