好文档 - 专业文书写作范文服务资料分享网站

CAN总线学习总结

天下 分享 时间: 加入收藏 我要投稿 点赞

TestStatusCAN_TxData(chardata)

{

CanTxMsgTxMessage; u32i=0;

u8TransmitMailbox=0;

TxMessage.StdId=0x00;// 设定标准标识符 TxMessage.ExtId=0x1234;// 设定扩展标识符

TxMessage.lDE=CA N」D_EXT;〃设定消息标识符的类型 TxMessage. RTR=CAN_RTR_DATA设定待传输消息的帧类型 TxMessage.DLC=1;// 设定待传输消息的帧长度 TxMessage.Data[0]=data;// 包含了待传输数据

TransmitMailbox=CAN_Transmit(&TxMessage);// 开始一个消息的传输while((CAN_TransmitStatus(TransmitMailbox)!=

查CANTXO位来确认发送是否成功

{

i++;

}

return(TestStatus)ret;

}

CAN_Transmit ()函数的操作包括: 1. [ 选择一个空的发送邮箱 ] 2. [ 设置 ld]*

3. [设置DLC待传输消息的帧长度]

通过检 i=0;

4. [ 请求发送 ] 请求发送语句:

CAN->sTxMailBox[TransmitMailbox].TIR|=TMIDxR_TXRQ;// 对 CAN_TIxR 寄存 器的

TXRQM置1,来请求发送 发送方面搞定了,但接收方面呢?好像在主程序里看不到

有接收的语句。 原来是用中断方式来接收数据,原来它和串口一样可以有两种方式接收数据, 一种是中断一种是轮询, 若采用轮询方式则要调用主函数的 CAN_Polling(void) 函数。

接着又遇到一个问题,为什么中断函数 CAN_Interrupt(void) 的最后要关中断 呢? CAN总线是多主机通信的,不是点对点或者一主多从模式 ,系多主机的情况下, 否则会使很多主机无法进行通信 , 从而导致致命的后果 ,CAN 总线一般用于很实 时的情况。

发送者以广播的形式把报文发送给所有的接收者(注:不是一对一通信,而是 多机通信)节点在接收报文时根据标识符的值决定软件是否需要该报文;如果 需要,就拷贝到SRAh里;如果不需要,报文就被丢弃且无需软件的干预。一旦 往FIFO存入1个报文,硬件就会更新 FMP[1:0]位,并且如果CAN_IEF寄存器 的FMPIE位为1,那么就会产生一个中断请求。中断函数执行完后关中断是要 让出总线周期让其它的主机使用。

CAN总线学习总结

TestStatusCAN_TxData(chardata){CanTxMsgTxMessage;u32i=0;u8TransmitMailbox=0;TxMessage.StdId=0x00;//设定标准标识符TxMessage.ExtId=0x1234;//设定扩展标识符TxMessage.lDE=C
推荐度:
点击下载文档文档为doc格式
2z3m616j6b8jj329nz0t2wkqq4mjdl00m36
领取福利

微信扫码领取福利

微信扫码分享