stm32f103c8_can回环测试1

stm32f103c8_can回环测试1

  • 1.CAN模式
  • 2.硬件
  • 3.cubemx设置
  • 4.初始化说明

1.CAN模式

  • 正常模式
  • 静默模式 silent 可以正常地接收数据帧和远程帧,但只能发出隐性位,而不能真正发送
    报文。
  • 环回模式 loopback 把发送的报
    文当作接收的报文并保存(如果可以通过接收过滤)在接收邮箱里
  • 环回静默模式

2.硬件

  • stm32f103c8t6
问题:使用串口1,引脚PA9 TX,PA10 RX,can PA11, PA12 ,程序能够正常初始化,hal_can_start返回错误,在清除MCR的INRQ后,硬件没有将MSR的INAK置0,将can复用GPIO PB6,PB8程序才正常;

3.cubemx设置

stm32f103c8_can回环测试1_第1张图片
在这里插入图片描述

4.初始化说明

static 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 = 4;             // 预分频,范围(1~1024)
	hcan.Init.Mode = CAN_MODE_LOOPBACK;  // 工作模式
	hcan.Init.SyncJumpWidth = CAN_SJW_1TQ; // 再次同步跳跃宽度
	hcan.Init.TimeSeg1 = CAN_BS1_6TQ;      // 位段 1(BS1)的长度
	hcan.Init.TimeSeg2 = CAN_BS2_2TQ;      // 位段 2(BS2)的长度
	hcan.Init.TimeTriggeredMode = DISABLE; // 禁止时间触发通信模式
	hcan.Init.AutoBusOff = DISABLE;        // 禁止总线自动关闭
	hcan.Init.AutoWakeUp = DISABLE;        // 禁止自动唤醒
	hcan.Init.AutoRetransmission = ENABLE; // 使能自动重传
	hcan.Init.ReceiveFifoLocked = DISABLE; // 禁止接收 FIFO 锁定
	hcan.Init.TransmitFifoPriority = DISABLE; // 禁止传输 FIFO 优先级
	if (HAL_CAN_Init(&hcan) != HAL_OK)
	{
		Error_Handler();
	}
	/* USER CODE BEGIN CAN_Init 2 */
	/* USER CODE END CAN_Init 2 */

}

你可能感兴趣的:(stm32,stm32,单片机,嵌入式硬件)