STM32 CUBEMX CAN通信数据发送失败原因分析

CAN通信是一种数据通信协议,用于在不同设备之间进行通信。它是一种高效的、实时的、可靠的、多主机的、串行通信系统,通常用于汽车电子、工业自动化等领域。CAN通信协议是由德国BOSCH公司于1986年引入,并在欧洲和日本广泛使用。CAN通信具有独特的优点,如数据传输速度快、可靠性高、系统稳定等,因此在各种行业得到广泛应用。

CAN通信协议采用基于事件的异步通信方式,该方式可以使多个节点同时访问同一个总线,不会引起冲突。此外,CAN通信协议可以通过数据帧的重发和错误检测机制保证数据传输的可靠性。CAN通信协议还具有较高的扩展性和灵活性,可以通过添加特定的功能模块和软件配置满足不同应用场景的需求。

在CAN通信协议中,每个节点都可以发送和接收消息。发送和接收的消息由数据帧来表示,数据帧包括帧头和帧体。帧头包括了帧标识符,用于表示标准和扩展帧的类型和帧的优先级。帧体包括了节点发送的数据。CAN通信协议中的帧结构良好,数据透明,易于处理和解析。

总之,CAN通信协议是一种广泛应用的通信协议,用于在各种应用场景中进行高效、可靠和稳定的数据通信。

1.使用CAN通信发送数据发现依照步骤配置后,无法发送数据,最后分析发现是波特率配置问题:

波特率配置失败:

c 复制代码
/* CAN init function */
void MX_CAN_Init(void)
{

  /* USER CODE BEGIN CAN_Init 0 */

  /* USER CODE END CAN_Init 0 */

  /* USER CODE BEGIN CAN_Init 1 */

  /* USER CODE END CAN_Init 1 */
  hcan.Instance = CAN1;
  hcan.Init.Prescaler = 24;
  hcan.Init.Mode = CAN_MODE_NORMAL;
  hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan.Init.TimeSeg1 = CAN_BS1_1TQ;
  hcan.Init.TimeSeg2 = CAN_BS2_1TQ;
  hcan.Init.TimeTriggeredMode = DISABLE;
  hcan.Init.AutoBusOff = DISABLE;
  hcan.Init.AutoWakeUp = DISABLE;
  hcan.Init.AutoRetransmission = DISABLE;
  hcan.Init.ReceiveFifoLocked = DISABLE;
  hcan.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN CAN_Init 2 */

  /* USER CODE END CAN_Init 2 */

}

发送数据失败:

波特率配置成功:

数据发送成功。

相关推荐
CertiK27 分钟前
CertiK《Hack3d:2025年第二季度及上半年Web3.0安全报告》(附报告全文链接)
网络
星辰pid1 小时前
STM32控制四自由度机械臂(SG90舵机)(硬件篇)(简单易复刻)
stm32·单片机·嵌入式硬件·机械臂
一只小鱼儿吖2 小时前
进程代理单窗口单IP技术:原理、应用与实现
网络·网络协议·tcp/ip
稳联技术2 小时前
Ethernet IP与Profinet共舞:网关驱动绿色工业的智慧脉动
网络·网络协议·tcp/ip
学习3人组2 小时前
CentOS配置网络
linux·网络·centos
威桑2 小时前
STM32 专有名词缩写整合
stm32·单片机·嵌入式硬件
~山有木兮3 小时前
LiteHub中间件之限流实现
网络·http·中间件
cui_win3 小时前
【网络】Linux 内核优化实战 - net.core.flow_limit_table_len
linux·运维·网络
BD_Marathon4 小时前
虚拟机网络检查
网络
SKYDROID云卓小助手4 小时前
无人设备遥控器之自动调整编码技术篇
人工智能·嵌入式硬件·算法·自动化·信号处理