看到人家写出来的总结 我感觉这个行业快了

1.

2.

协议层
CAN的 帧/报文 种类
特点:

 CAN总线是广播类型的总线
这意味着所有节点都可以侦听到所有传输的报文
无法将报文单独发送给指定节点
所有节点都将始终捕获所有报文
但是CAN硬件能够提供本地过滤功能,让每个节点对报文有选择性地做出响应
CAN使用短报文 – 最大实用负载是94位
可以认为报文是通过内容寻址,也就是说,报文的内容隐式地确定其地址
CAN总线上有5种不同的报文类型
数据帧,远程帧,错误帧,过载帧,帧间隔

3.代码加注释

int main(void)
{
    usart1_init();
    printf("尚硅谷 CAN 通讯实验: 静默回环 寄存器版\r\n");
    CAN_Init();
    printf("CAN 初始化配置完成...\r\n");
 
    uint16_t stdId = 0x066;
    uint8_t *tData = "abcdefg";
    CAN_SendMsg(stdId, tData, strlen((char *)tData));
    printf("发送完毕...\r\n");
 
    tData = "123";
    CAN_SendMsg(stdId, tData, strlen((char *)tData));
    printf("发送完毕...\r\n");
 
    stdId = 0x067;
    tData = "xyz";
    CAN_SendMsg(stdId, tData, strlen((char *)tData));
    printf("发送完毕...\r\n");
 
    /* 1. 接收数据 */
    RxDataStruct rxDataStruct[8];
    uint8_t rxMsgCount;
    CAN_ReceiveMsg(rxDataStruct, &rxMsgCount);
    printf("接收完毕 rxMsgCount = %d...\r\n", rxMsgCount);
 
    /* 2. 输出消息 */
    uint8_t i;
    for (i = 0; i < rxMsgCount; i++)
    {
        RxDataStruct msg = rxDataStruct[i];
        printf("stdId = %d, length = %d, msgData = %s\r\n", msg.stdId, msg.length, msg.data);
    }
    while (1)
    {
 
    }
}

转:

stm32:CAN通讯_stm32 can通信-CSDN博客

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值