[STM32F0] 使用新版HAL库CAN发送不了数据

[复制链接]
1495|2
 楼主| RW506575086 发表于 2020-3-21 10:38 | 显示全部楼层 |阅读模式
CAN, rc, se, ni, code
main.c里面的代码如下:

  1. /* USER CODE BEGIN Header */
  2. /**
  3.   ******************************************************************************
  4.   * [url=home.php?mod=space&uid=288409]@file[/url]           : main.c
  5.   * [url=home.php?mod=space&uid=247401]@brief[/url]          : Main program body
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
  10.   * All rights reserved.</center></h2>
  11.   *
  12.   * This software component is licensed by ST under BSD 3-Clause license,
  13.   * the "License"; You may not use this file except in compliance with the
  14.   * License. You may obtain a copy of the License at:
  15.   *                        opensource.org/licenses/BSD-3-Clause
  16.   *
  17.   ******************************************************************************
  18.   */
  19. /* USER CODE END Header */

  20. /* Includes ------------------------------------------------------------------*/
  21. #include "main.h"
  22. #include "can.h"
  23. #include "tim.h"
  24. #include "gpio.h"

  25. /* Private includes ----------------------------------------------------------*/
  26. /* USER CODE BEGIN Includes */

  27. /* USER CODE END Includes */

  28. /* Private typedef -----------------------------------------------------------*/
  29. /* USER CODE BEGIN PTD */

  30. /* USER CODE END PTD */

  31. /* Private define ------------------------------------------------------------*/
  32. /* USER CODE BEGIN PD */
  33. /* USER CODE END PD */

  34. /* Private macro -------------------------------------------------------------*/
  35. /* USER CODE BEGIN PM */

  36. /* USER CODE END PM */

  37. /* Private variables ---------------------------------------------------------*/

  38. /* USER CODE BEGIN PV */
  39.                 extern uint8_t Tim2_100ms_Flag;
  40.                 extern uint8_t Tim2_10ms_Flag;
  41.                 CAN_TxHeaderTypeDef TxMessage;
  42.                 uint8_t pData[8] = {0,1,2,3,4,5,6,7};
  43.                 uint32_t              TxMailbox;
  44. /* USER CODE END PV */

  45. /* Private function prototypes -----------------------------------------------*/
  46. void SystemClock_Config(void);
  47. /* USER CODE BEGIN PFP */

  48. /* USER CODE END PFP */

  49. /* Private user code ---------------------------------------------------------*/
  50. /* USER CODE BEGIN 0 */

  51. /* USER CODE END 0 */

  52. /**
  53.   * @brief  The application entry point.
  54.   * @retval int
  55.   */
  56. int main(void)
  57. {
  58.   /* USER CODE BEGIN 1 */

  59.   /* USER CODE END 1 */
  60.   

  61.   /* MCU Configuration--------------------------------------------------------*/

  62.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  63.   HAL_Init();

  64.   /* USER CODE BEGIN Init */

  65.   /* USER CODE END Init */

  66.   /* Configure the system clock */
  67.   SystemClock_Config();

  68.   /* USER CODE BEGIN SysInit */

  69.   /* USER CODE END SysInit */

  70.   /* Initialize all configured peripherals */
  71.   MX_GPIO_Init();
  72.   MX_CAN_Init();
  73.   MX_TIM2_Init();
  74.   /* USER CODE BEGIN 2 */
  75.         HAL_TIM_Base_Start_IT(&htim2);
  76.         HAL_CAN_Start(&hcan);
  77.         HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING);

  78.   /* USER CODE END 2 */

  79.   /* Infinite loop */
  80.   /* USER CODE BEGIN WHILE */
  81.   while (1)
  82.   {
  83.     /* USER CODE END WHILE */

  84.     /* USER CODE BEGIN 3 */
  85.                 if(Tim2_100ms_Flag == 1)
  86.                 {
  87.                         Tim2_100ms_Flag = 0;
  88.                         HAL_GPIO_TogglePin(LED_R_GPIO_Port, LED_R_Pin);
  89.                 }
  90.                
  91.                 if(Tim2_100ms_Flag == 1)
  92.                 {
  93.                         Tim2_100ms_Flag = 0;
  94.                         TxMessage.DLC = 8;
  95.                         TxMessage.IDE = CAN_ID_EXT;
  96.                         TxMessage.RTR = CAN_RTR_DATA;
  97.                         TxMessage.StdId = 0X321;
  98.                         TxMessage.ExtId = 0x14015FA1;
  99.                         TxMessage.TransmitGlobalTime = DISABLE;
  100.                         HAL_CAN_AddTxMessage(&hcan,&TxMessage,pData,&TxMailbox);
  101.                 }
  102.   }
  103.   /* USER CODE END 3 */
  104. }

  105. /**
  106.   * @brief System Clock Configuration
  107.   * @retval None
  108.   */
  109. void SystemClock_Config(void)
  110. {
  111.   RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  112.   RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  113.   /** Initializes the CPU, AHB and APB busses clocks
  114.   */
  115.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  116.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  117.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  118.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  119.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL6;
  120.   RCC_OscInitStruct.PLL.PREDIV = RCC_PREDIV_DIV1;
  121.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  122.   {
  123.     Error_Handler();
  124.   }
  125.   /** Initializes the CPU, AHB and APB busses clocks
  126.   */
  127.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  128.                               |RCC_CLOCKTYPE_PCLK1;
  129.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  130.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  131.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;

  132.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK)
  133.   {
  134.     Error_Handler();
  135.   }
  136. }

  137. /* USER CODE BEGIN 4 */

  138. /* USER CODE END 4 */

  139. /**
  140.   * @brief  This function is executed in case of error occurrence.
  141.   * @retval None
  142.   */
  143. void Error_Handler(void)
  144. {
  145.   /* USER CODE BEGIN Error_Handler_Debug */
  146.   /* User can add his own implementation to report the HAL error return state */

  147.   /* USER CODE END Error_Handler_Debug */
  148. }

  149. #ifdef  USE_FULL_ASSERT
  150. /**
  151.   * @brief  Reports the name of the source file and the source line number
  152.   *         where the assert_param error has occurred.
  153.   * @param  file: pointer to the source file name
  154.   * @param  line: assert_param error line source number
  155.   * @retval None
  156.   */
  157. void assert_failed(char *file, uint32_t line)
  158. {
  159.   /* USER CODE BEGIN 6 */
  160.   /* User can add his own implementation to report the file name and line number,
  161.      tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  162.   /* USER CODE END 6 */
  163. }
  164. #endif /* USE_FULL_ASSERT */

  165. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/




CAN.C里面的代码如下:

  1. /**
  2.   ******************************************************************************
  3.   * File Name          : CAN.c
  4.   * Description        : This file provides code for the configuration
  5.   *                      of the CAN instances.
  6.   ******************************************************************************
  7.   * @attention
  8.   *
  9.   * <h2><center>&copy; Copyright (c) 2020 STMicroelectronics.
  10.   * All rights reserved.</center></h2>
  11.   *
  12.   * This software component is licensed by ST under BSD 3-Clause license,
  13.   * the "License"; You may not use this file except in compliance with the
  14.   * License. You may obtain a copy of the License at:
  15.   *                        opensource.org/licenses/BSD-3-Clause
  16.   *
  17.   ******************************************************************************
  18.   */

  19. /* Includes ------------------------------------------------------------------*/
  20. #include "can.h"

  21. /* USER CODE BEGIN 0 */

  22. /* USER CODE END 0 */

  23. CAN_HandleTypeDef hcan;

  24. /* CAN init function */
  25. void MX_CAN_Init(void)
  26. {

  27.   hcan.Instance = CAN;
  28.   hcan.Init.Prescaler = 3;
  29.   hcan.Init.Mode = CAN_MODE_NORMAL;
  30.   hcan.Init.SyncJumpWidth = CAN_SJW_1TQ;
  31.   hcan.Init.TimeSeg1 = CAN_BS1_8TQ;
  32.   hcan.Init.TimeSeg2 = CAN_BS2_7TQ;
  33.   hcan.Init.TimeTriggeredMode = DISABLE;
  34.   hcan.Init.AutoBusOff = DISABLE;
  35.   hcan.Init.AutoWakeUp = DISABLE;
  36.   hcan.Init.AutoRetransmission = ENABLE;
  37.   hcan.Init.ReceiveFifoLocked = DISABLE;
  38.   hcan.Init.TransmitFifoPriority = DISABLE;
  39.   if (HAL_CAN_Init(&hcan) != HAL_OK)
  40.   {
  41.     Error_Handler();
  42.   }

  43. }

  44. void HAL_CAN_MspInit(CAN_HandleTypeDef* canHandle)
  45. {

  46.   GPIO_InitTypeDef GPIO_InitStruct = {0};
  47.   if(canHandle->Instance==CAN)
  48.   {
  49.   /* USER CODE BEGIN CAN_MspInit 0 */

  50.   /* USER CODE END CAN_MspInit 0 */
  51.     /* CAN clock enable */
  52.     __HAL_RCC_CAN1_CLK_ENABLE();
  53.   
  54.     __HAL_RCC_GPIOA_CLK_ENABLE();
  55.     /**CAN GPIO Configuration   
  56.     PA11     ------> CAN_RX
  57.     PA12     ------> CAN_TX
  58.     */
  59.     GPIO_InitStruct.Pin = GPIO_PIN_11|GPIO_PIN_12;
  60.     GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
  61.     GPIO_InitStruct.Pull = GPIO_NOPULL;
  62.     GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  63.     GPIO_InitStruct.Alternate = GPIO_AF4_CAN;
  64.     HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

  65.     /* CAN interrupt Init */
  66.     HAL_NVIC_SetPriority(CEC_CAN_IRQn, 0, 0);
  67.     HAL_NVIC_EnableIRQ(CEC_CAN_IRQn);
  68.   /* USER CODE BEGIN CAN_MspInit 1 */

  69.   /* USER CODE END CAN_MspInit 1 */
  70.   }
  71. }

  72. void HAL_CAN_MspDeInit(CAN_HandleTypeDef* canHandle)
  73. {

  74.   if(canHandle->Instance==CAN)
  75.   {
  76.   /* USER CODE BEGIN CAN_MspDeInit 0 */

  77.   /* USER CODE END CAN_MspDeInit 0 */
  78.     /* Peripheral clock disable */
  79.     __HAL_RCC_CAN1_CLK_DISABLE();
  80.   
  81.     /**CAN GPIO Configuration   
  82.     PA11     ------> CAN_RX
  83.     PA12     ------> CAN_TX
  84.     */
  85.     HAL_GPIO_DeInit(GPIOA, GPIO_PIN_11|GPIO_PIN_12);

  86.     /* CAN interrupt Deinit */
  87.     HAL_NVIC_DisableIRQ(CEC_CAN_IRQn);
  88.   /* USER CODE BEGIN CAN_MspDeInit 1 */

  89.   /* USER CODE END CAN_MspDeInit 1 */
  90.   }
  91. }

  92. /* USER CODE BEGIN 1 */


  93. /* USER CODE END 1 */

  94. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/




代码编译没问题,LED正常100ms闪烁,使用CAN盒了,波特率500K,有大神帮看看哪里有问题,无法发送吗?
 楼主| RW506575086 发表于 2020-3-21 11:34 | 显示全部楼层
有人可以指导一下的吗?已经卡住很久了
橙子0_0 发表于 2020-11-18 19:22 | 显示全部楼层
你好,问下怎么解决的,最近也遇到了同样的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部