这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 【STM32F373】1、CAN驱动

共10条 1/1 1 跳转至

【STM32F373】1、CAN驱动

助工
2024-10-12 21:53:30     打赏

STM32F373具有16bitSDADC 以及带了CAN总线。这系列准备做一个基于CAN+SDADC的采集。本篇记录如何驱动CAN总线。

【图形化配置】

首先配置HSE时钟为8M输入,配置总线时钟为72M,基于CAN总线挂载在APB1上,为36MHz

image.png

【配置串口】

为了输出日志,这里配置了USART1,波特率为115200。输出IO为PA9、PA10。

【配置CAN】

配置分频为4,Seg1为9,Seg2为8,显示配置为500K。打开RX0的中断

image.png

【配置代码】

生成MDK工程,在CAN总线中,配置用户代码如下:

  /* USER CODE BEGIN CAN_Init 2 */
  /*##-2- Configure the CAN Filter ###########################################*/
  sFilterConfig.FilterBank = 0;
  sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
  sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
  sFilterConfig.FilterIdHigh = 0x0000;
  sFilterConfig.FilterIdLow = 0x0000;
  sFilterConfig.FilterMaskIdHigh = 0x0000;
  sFilterConfig.FilterMaskIdLow = 0x0000;
  sFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0;
  sFilterConfig.FilterActivation = ENABLE;
  sFilterConfig.SlaveStartFilterBank = 14;

  if (HAL_CAN_ConfigFilter(&hcan, &sFilterConfig) != HAL_OK)
  {
    /* Filter configuration Error */
    Error_Handler();
  }

  /*##-3- Start the CAN peripheral ###########################################*/
  if (HAL_CAN_Start(&hcan) != HAL_OK)
  {
    /* Start Error */
    Error_Handler();
  }

  /*##-4- Activate CAN RX notification #######################################*/
  if (HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING) != HAL_OK)
  {
    /* Notification Error */
    Error_Handler();
  }

  /*##-5- Configure Transmission process #####################################*/
  TxHeader.StdId = 0x321;
  TxHeader.ExtId = 0x01;
  TxHeader.RTR = CAN_RTR_DATA;
  TxHeader.IDE = CAN_ID_STD;
  TxHeader.DLC = 2;
  TxHeader.TransmitGlobalTime = DISABLE;
  /* USER CODE END CAN_Init 2 */


重写RX0回调函数:

/* USER CODE BEGIN 1 */
void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan)
{
	  /* Get RX message */
  if (HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) != HAL_OK)
  {
    /* Reception Error */
    Error_Handler();
  }

  /* Display LEDx */
  if ((RxHeader.StdId == 0x321) && (RxHeader.IDE == CAN_ID_STD) && (RxHeader.DLC == 2))
  {
		U1_printf("recv data:0x%X 0x%X\r\n",RxData[0],RxData[1]);
  }
}
/* USER CODE END 1 */

函数中,判断是否接收到指定的ID,以及接收长度。如果符合,打印出接收到的数据。

【测试】

使用CAN_TTL接到CAN分析仪上,可以使用自动检索,发现总线有500K的CAN总线,发送一帧数据后,在串口中打印出输出内容:

image.png

【总结】

使用图形化配置,可以快速的生成CAN总的基础工程。




关键词: STM32F373     CAN    

专家
2024-10-12 22:06:50     打赏
2楼

感谢分享


专家
2024-10-12 22:09:53     打赏
3楼

感谢分享


专家
2024-10-12 22:16:04     打赏
4楼

感谢分享


专家
2024-10-13 01:52:25     打赏
5楼

感谢楼主分享


专家
2024-10-13 09:34:50     打赏
6楼

感谢分享


专家
2024-10-13 11:46:47     打赏
7楼

图形化的设置,减少了编程工作量。谢谢分享!


工程师
2024-10-13 14:13:01     打赏
8楼

666666


高工
2024-10-13 18:41:52     打赏
9楼

谢谢分享


高工
2024-10-14 17:23:45     打赏
10楼

STM32F3系列,这个系列模拟性能优秀啊!



共10条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]