stm32f103c8_can回环测试1
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设置
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 */
}