can.c 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. /* USER CODE BEGIN Header */
  2. /**
  3. ******************************************************************************
  4. * @file can.c
  5. * @brief This file provides code for the configuration
  6. * of the CAN instances.
  7. ******************************************************************************
  8. * @attention
  9. *
  10. * Copyright (c) 2022 STMicroelectronics.
  11. * All rights reserved.
  12. *
  13. * This software is licensed under terms that can be found in the LICENSE file
  14. * in the root directory of this software component.
  15. * If no LICENSE file comes with this software, it is provided AS-IS.
  16. *
  17. ******************************************************************************
  18. */
  19. /* USER CODE END Header */
  20. /* Includes ------------------------------------------------------------------*/
  21. #include "can.h"
  22. /* USER CODE BEGIN 0 */
  23. /* USER CODE END 0 */
  24. CAN_HandleTypeDef hcan;
  25. /* CAN init function */
  26. void MX_CAN_Init(uint32_t Prescaler)
  27. {
  28. /* USER CODE BEGIN CAN_Init 0 */
  29. /* USER CODE END CAN_Init 0 */
  30. /* USER CODE BEGIN CAN_Init 1 */
  31. /* USER CODE END CAN_Init 1 */
  32. hcan.Instance = CAN1;
  33. // hcan.Init.Prescaler = 4;
  34. hcan.Init.Prescaler = Prescaler;
  35. hcan.Init.Mode = CAN_MODE_NORMAL;
  36. hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  37. hcan.Init.TimeSeg1 = CAN_BS1_7TQ; // 100K
  38. hcan.Init.TimeSeg2 = CAN_BS2_1TQ;
  39. hcan.Init.TimeTriggeredMode = DISABLE;
  40. hcan.Init.AutoBusOff = ENABLE;
  41. hcan.Init.AutoWakeUp = DISABLE;
  42. hcan.Init.AutoRetransmission = DISABLE;
  43. hcan.Init.ReceiveFifoLocked = DISABLE;
  44. hcan.Init.TransmitFifoPriority = ENABLE;
  45. if (HAL_CAN_Init(&hcan) != HAL_OK)
  46. {
  47. Error_Handler();
  48. }
  49. /* USER CODE BEGIN CAN_Init 2 */
  50. /* USER CODE END CAN_Init 2 */
  51. }
  52. void HAL_CAN_MspInit(CAN_HandleTypeDef *canHandle)
  53. {
  54. GPIO_InitTypeDef GPIO_InitStruct = {0};
  55. if (canHandle->Instance == CAN1)
  56. {
  57. /* USER CODE BEGIN CAN1_MspInit 0 */
  58. /* USER CODE END CAN1_MspInit 0 */
  59. /* CAN1 clock enable */
  60. __HAL_RCC_CAN1_CLK_ENABLE();
  61. __HAL_RCC_GPIOA_CLK_ENABLE();
  62. /**CAN GPIO Configuration
  63. PB8 ------> CAN_RX
  64. PB9 ------> CAN_TX
  65. */
  66. GPIO_InitStruct.Pin = GPIO_PIN_11;
  67. GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  68. GPIO_InitStruct.Pull = GPIO_PULLUP;
  69. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  70. GPIO_InitStruct.Pin = GPIO_PIN_12;
  71. GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  72. GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  73. HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  74. // __HAL_AFIO_REMAP_CAN1_1();
  75. /* CAN1 interrupt Init */
  76. HAL_NVIC_SetPriority(USB_HP_CAN1_TX_IRQn, 0, 0);
  77. HAL_NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn);
  78. HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0);
  79. HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
  80. HAL_NVIC_SetPriority(CAN1_SCE_IRQn, 0, 0);
  81. HAL_NVIC_EnableIRQ(CAN1_SCE_IRQn);
  82. /* USER CODE BEGIN CAN1_MspInit 1 */
  83. CLEAR_BIT(canHandle->Instance->MCR, CAN_MCR_SLEEP);
  84. /* USER CODE END CAN1_MspInit 1 */
  85. }
  86. }
  87. void HAL_CAN_MspDeInit(CAN_HandleTypeDef *canHandle)
  88. {
  89. if (canHandle->Instance == CAN1)
  90. {
  91. /* USER CODE BEGIN CAN1_MspDeInit 0 */
  92. /* USER CODE END CAN1_MspDeInit 0 */
  93. /* Peripheral clock disable */
  94. __HAL_RCC_CAN1_CLK_DISABLE();
  95. /**CAN GPIO Configuration
  96. PB8 ------> CAN_RX
  97. PB9 ------> CAN_TX
  98. */
  99. HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11 | GPIO_PIN_12);
  100. /* CAN1 interrupt Deinit */
  101. HAL_NVIC_DisableIRQ(USB_HP_CAN1_TX_IRQn);
  102. HAL_NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn);
  103. HAL_NVIC_DisableIRQ(CAN1_RX1_IRQn);
  104. /* USER CODE BEGIN CAN1_MspDeInit 1 */
  105. /* USER CODE END CAN1_MspDeInit 1 */
  106. }
  107. }
  108. /* USER CODE BEGIN 1 */
  109. /* USER CODE END 1 */