Перейти к содержанию
    

После обновления библиотеки HAL, не получается отправить сообщения по кан шине, может кто посмотрит одним глазом код, где я туплю. До обновления без проблем отправлял-принимал сообщения, обрабатывал прерывания, а сейчас заблудился в двух соснах, стыдоба :aggressive:

 

/* USER CODE BEGIN Header */
/**
  ******************************************************************************
  * @file           : main.c
  * @brief          : Main program body
  ******************************************************************************
  ** This notice applies to any and all portions of this file
  * that are not between comment pairs USER CODE BEGIN and
  * USER CODE END. Other portions of this file, whether 
  * inserted by the user or by software development tools
  * are owned by their respective copyright owners.
  *
  * COPYRIGHT(c) 2019 STMicroelectronics
  *
  * Redistribution and use in source and binary forms, with or without modification,
  * are permitted provided that the following conditions are met:
  *   1. Redistributions of source code must retain the above copyright notice,
  *      this list of conditions and the following disclaimer.
  *   2. Redistributions in binary form must reproduce the above copyright notice,
  *      this list of conditions and the following disclaimer in the documentation
  *      and/or other materials provided with the distribution.
  *   3. Neither the name of STMicroelectronics nor the names of its contributors
  *      may be used to endorse or promote products derived from this software
  *      without specific prior written permission.
  *
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  *
  ******************************************************************************
  */
/* USER CODE END Header */

/* Includes ------------------------------------------------------------------*/
#include "main.h"

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */

#include "void.h"

/* USER CODE END Includes */

/* Private typedef -----------------------------------------------------------*/
/* USER CODE BEGIN PTD */

/* USER CODE END PTD */

/* Private define ------------------------------------------------------------*/
/* USER CODE BEGIN PD */

/* USER CODE END PD */

/* Private macro -------------------------------------------------------------*/
/* USER CODE BEGIN PM */

/* USER CODE END PM */

/* Private variables ---------------------------------------------------------*/
CAN_HandleTypeDef hcan1;
CAN_HandleTypeDef hcan2;

UART_HandleTypeDef huart2;
DMA_HandleTypeDef hdma_usart2_tx;

/* USER CODE BEGIN PV */
 
uint32_t ABC=0,BCE;
uint8_t can_number;
uint8_t sendOK=1;

/* USER CODE END PV */

/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_DMA_Init(void);
static void MX_CAN1_Init(void);
static void MX_CAN2_Init(void);
static void MX_USART2_UART_Init(void);
/* USER CODE BEGIN PFP */



/* USER CODE END PFP */

/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */

/* USER CODE END 0 */

/**
  * @brief  The application entry point.
  * @retval int
  */
int main(void)
{
  /* USER CODE BEGIN 1 */

  /* USER CODE END 1 */

  /* MCU Configuration--------------------------------------------------------*/

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

  /* USER CODE BEGIN Init */
	
CAN_FilterTypeDef can1FilterConf;
  can1FilterConf.FilterBank = 0; 
  can1FilterConf.FilterIdHigh = 0x0000;   
  can1FilterConf.FilterIdLow = 0x002C;          // extid=(x<<3)+4
  can1FilterConf.FilterMaskIdHigh = 0xFFFF;     
  can1FilterConf.FilterMaskIdLow = 0xFFFC;      
  can1FilterConf.FilterFIFOAssignment = 0;  
  can1FilterConf.FilterMode = CAN_FILTERMODE_IDLIST ;            
  can1FilterConf.FilterScale= CAN_FILTERSCALE_32BIT;
  can1FilterConf.FilterFIFOAssignment= CAN_RX_FIFO0;	
  can1FilterConf.FilterActivation = ENABLE;     
  can1FilterConf.SlaveStartFilterBank = 14;	
	HAL_CAN_ConfigFilter (&hcan1, &can1FilterConf);
	
CAN_FilterTypeDef can2FilterConf;
  can2FilterConf.FilterBank = 1; 
  can2FilterConf.FilterIdHigh = 0x0000;   
  can2FilterConf.FilterIdLow = 0x0000;         
  can2FilterConf.FilterMaskIdHigh = 0x0000;     
  can2FilterConf.FilterMaskIdLow = 0x0000;      
  can2FilterConf.FilterFIFOAssignment = 0;  
  can2FilterConf.FilterMode = CAN_FILTERMODE_IDMASK ;            
  can2FilterConf.FilterScale= CAN_FILTERSCALE_32BIT;
  can2FilterConf.FilterFIFOAssignment= CAN_RX_FIFO0;	
  can2FilterConf.FilterActivation = ENABLE;     
  can2FilterConf.SlaveStartFilterBank = 12;	
	HAL_CAN_ConfigFilter (&hcan2, &can1FilterConf);
	
  /* USER CODE END Init */

  /* Configure the system clock */
  SystemClock_Config();

  /* USER CODE BEGIN SysInit */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_DMA_Init();
  MX_CAN1_Init();
  MX_CAN2_Init();
  MX_USART2_UART_Init();
  /* USER CODE BEGIN 2 */



// HAL_CAN_START(&hcan1);   rozibratys

blink_usb_green();

HAL_CAN_Start(&hcan1);
HAL_CAN_Start(&hcan2);

  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
		HAL_Delay(100);
		
		
		
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_15);
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_14);
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_13);
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_12);
		
		HAL_GPIO_TogglePin(GPIOD, GPIO_PIN_5);//red led usb
		
		
		uint32_t  mailBox;
		//uint32_t  mailBox = CAN_TX_MAILBOX0;
		uint8_t TxData[8];
			
		CAN_TxHeaderTypeDef can1message;
		 can1message.StdId = 0x1;   
     can1message.ExtId = 0x000;    
     can1message.IDE = CAN_ID_STD;     
     can1message.RTR = CAN_RTR_DATA;      
     can1message.DLC = 0x8;
  	 TxData[0] = 1;TxData[1] = 2;TxData[2] = 3;TxData[3] = 4;TxData[4] = 5;TxData[5] = 6;TxData[6] = 7;TxData[7] = 8;
	   HAL_CAN_AddTxMessage(&hcan1, &can1message, TxData, &mailBox);
		 
		 CAN_TxHeaderTypeDef can2message;
		 can2message.StdId = 0x1;   
     can2message.ExtId = 0x000;    
     can2message.IDE = CAN_ID_STD;     
     can2message.RTR = CAN_RTR_DATA;      
     can2message.DLC = 0x8;
  	 TxData[0] = 1;TxData[1] = 2;TxData[2] = 3;TxData[3] = 4;TxData[4] = 5;TxData[5] = 6;TxData[6] = 7;TxData[7] = 8;
	   HAL_CAN_AddTxMessage(&hcan2, &can2message, TxData, &mailBox);
		 
		 
		 
     HAL_UART_Transmit(&huart2, "OY!", 3,1); 
		
		
  }
  /* USER CODE END 3 */
}

/**
  * @brief System Clock Configuration
  * @retval None
  */
void SystemClock_Config(void)
{
  RCC_OscInitTypeDef RCC_OscInitStruct = {0};
  RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};

  /**Configure the main internal regulator output voltage 
  */
  __HAL_RCC_PWR_CLK_ENABLE();
  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);
  /**Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 8;
  RCC_OscInitStruct.PLL.PLLN = 336;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2;
  RCC_OscInitStruct.PLL.PLLQ = 7;
  if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  {
    Error_Handler();
  }
  /**Initializes the CPU, AHB and APB busses clocks 
  */
  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
                              |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;

  if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK)
  {
    Error_Handler();
  }
}

/**
  * @brief CAN1 Initialization Function
  * @param None
  * @retval None
  */
static void MX_CAN1_Init(void)
{

  /* USER CODE BEGIN CAN1_Init 0 */

  /* USER CODE END CAN1_Init 0 */

  /* USER CODE BEGIN CAN1_Init 1 */

  /* USER CODE END CAN1_Init 1 */
  hcan1.Instance = CAN1;
  hcan1.Init.Prescaler = 6;
  hcan1.Init.Mode = CAN_MODE_NORMAL;
  hcan1.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan1.Init.TimeSeg1 = CAN_BS1_13TQ;
  hcan1.Init.TimeSeg2 = CAN_BS2_2TQ;
  hcan1.Init.TimeTriggeredMode = DISABLE;
  hcan1.Init.AutoBusOff = DISABLE;
  hcan1.Init.AutoWakeUp = DISABLE;
  hcan1.Init.AutoRetransmission = DISABLE;
  hcan1.Init.ReceiveFifoLocked = DISABLE;
  hcan1.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan1) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN CAN1_Init 2 */

	//HAL_CAN_Receive_IT(&hcan1, CAN_FIFO0);
  /* USER CODE END CAN1_Init 2 */

}

/**
  * @brief CAN2 Initialization Function
  * @param None
  * @retval None
  */
static void MX_CAN2_Init(void)
{

  /* USER CODE BEGIN CAN2_Init 0 */

  /* USER CODE END CAN2_Init 0 */

  /* USER CODE BEGIN CAN2_Init 1 */

  /* USER CODE END CAN2_Init 1 */
  hcan2.Instance = CAN2;
  hcan2.Init.Prescaler = 21;
  hcan2.Init.Mode = CAN_MODE_NORMAL;
  hcan2.Init.SyncJumpWidth = CAN_SJW_1TQ;
  hcan2.Init.TimeSeg1 = CAN_BS1_13TQ;
  hcan2.Init.TimeSeg2 = CAN_BS2_2TQ;
  hcan2.Init.TimeTriggeredMode = DISABLE;
  hcan2.Init.AutoBusOff = DISABLE;
  hcan2.Init.AutoWakeUp = DISABLE;
  hcan2.Init.AutoRetransmission = DISABLE;
  hcan2.Init.ReceiveFifoLocked = DISABLE;
  hcan2.Init.TransmitFifoPriority = DISABLE;
  if (HAL_CAN_Init(&hcan2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN CAN2_Init 2 */

  /* USER CODE END CAN2_Init 2 */

}

/**
  * @brief USART2 Initialization Function
  * @param None
  * @retval None
  */
static void MX_USART2_UART_Init(void)
{

  /* USER CODE BEGIN USART2_Init 0 */

  /* USER CODE END USART2_Init 0 */

  /* USER CODE BEGIN USART2_Init 1 */

  /* USER CODE END USART2_Init 1 */
  huart2.Instance = USART2;
  huart2.Init.BaudRate = 115200;
  huart2.Init.WordLength = UART_WORDLENGTH_8B;
  huart2.Init.StopBits = UART_STOPBITS_1;
  huart2.Init.Parity = UART_PARITY_NONE;
  huart2.Init.Mode = UART_MODE_TX_RX;
  huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart2.Init.OverSampling = UART_OVERSAMPLING_16;
  if (HAL_UART_Init(&huart2) != HAL_OK)
  {
    Error_Handler();
  }
  /* USER CODE BEGIN USART2_Init 2 */

  /* USER CODE END USART2_Init 2 */

}

/** 
  * Enable DMA controller clock
  */
static void MX_DMA_Init(void) 
{
  /* DMA controller clock enable */
  __HAL_RCC_DMA1_CLK_ENABLE();

  /* DMA interrupt init */
  /* DMA1_Stream6_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(DMA1_Stream6_IRQn, 0, 0);
  HAL_NVIC_EnableIRQ(DMA1_Stream6_IRQn);

}

/**
  * @brief GPIO Initialization Function
  * @param None
  * @retval None
  */
static void MX_GPIO_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};

  /* GPIO Ports Clock Enable */
  __HAL_RCC_GPIOH_CLK_ENABLE();
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
  __HAL_RCC_GPIOD_CLK_ENABLE();

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOD, LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin 
                          |LED_near_microUSB_Pin, GPIO_PIN_RESET);

  /*Configure GPIO pin Output Level */
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_9, GPIO_PIN_RESET);

  /*Configure GPIO pin : B1_Pin */
  GPIO_InitStruct.Pin = B1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_EVT_RISING;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(B1_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pin : BOOT1_Pin */
  GPIO_InitStruct.Pin = BOOT1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  HAL_GPIO_Init(BOOT1_GPIO_Port, &GPIO_InitStruct);

  /*Configure GPIO pins : LD4_Pin LD3_Pin LD5_Pin LD6_Pin 
                           LED_near_microUSB_Pin */
  GPIO_InitStruct.Pin = LD4_Pin|LD3_Pin|LD5_Pin|LD6_Pin 
                          |LED_near_microUSB_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

  /*Configure GPIO pin : PA9 */
  GPIO_InitStruct.Pin = GPIO_PIN_9;
  GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  GPIO_InitStruct.Pull = GPIO_NOPULL;
  GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;
  HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);

}

/* USER CODE BEGIN 4 */

/* USER CODE END 4 */

/**
  * @brief  This function is executed in case of error occurrence.
  * @retval None
  */
void Error_Handler(void)
{
  /* USER CODE BEGIN Error_Handler_Debug */
  /* User can add his own implementation to report the HAL error return state */
blink_usb_green();
  /* USER CODE END Error_Handler_Debug */
}

#ifdef  USE_FULL_ASSERT
/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{ 
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
     tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */
}
#endif /* USE_FULL_ASSERT */

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Достаньте исходники библиотеки старой версии что была и сравните их со свежей (не руками, а в соотв. редакторе).

 

зы Хало-куб - этот "крест" должен нести непосредственно тот, кто подписался на это дело. Увы, такова воля разработчиков Хало-Куба :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может кто поделиться рабочим проектом для STM32F4Discovery с применением CAN шины, на свежей библиотеке HAL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Just now, shura-1977 said:

Может кто поделиться рабочим проектом для STM32F4Discovery с применением CAN шины, на свежей библиотеке HAL.

ТЫЦ

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 minutes ago, shura-1977 said:

Вы и правда думаете что я этого не делал?

Да, я в этом уверен, иначе этой темы не было бы ))

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как прошла моя суббота :biggrin:

пысы, я понимаю что я потерялся в двух соснах, только не могу понять где туплю

1.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

26 minutes ago, shura-1977 said:

я понимаю что я потерялся в двух соснах, только не могу понять где туплю

 

7 hours ago, Forger said:

Хало-куб - этот "крест" должен нести непосредственно тот, кто подписался на это дело.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как всегда виновата банальная невнимательность, если на CAN линии нет никакого устройства, а я для отладки просто соединил ноги МК перемычкой, то работать в режиме "CAN_MODE_NORMAL" не будет. :buba:

 

Изменено пользователем shura-1977

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте!

У меня на обновленных ф-циях хала для кан(stm32f4) с отладчиком код работает,а без него зависает.

Вряд ли смогу отследить,какой флаг нужно сбросить руками.Надеюсь,что старая версия хала заработает,но 

не могу ее найти на сайте st.

Прошу помочь ссылкой на старую библиотеку .

 

 

main.c

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

13 hours ago, Beekr said:

У меня на обновленных ф-циях хала для кан(stm32f4) с отладчиком код работает,а без него зависает.

Посмотрите место в вашей программе, где включается тактирование блока CAN. Отладчик, скорее всего, при подключении включает тактирование всей периферии МК. Если же вы забыли сделать это в своей программе, то без отладчика работать не будет, а с отладчиком будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

2 часа назад, Darth Vader сказал:

Посмотрите место в вашей программе, где включается тактирование блока CAN. Отладчик, скорее всего, при подключении включает тактирование всей периферии МК. Если же вы забыли сделать это в своей программе, то без отладчика работать не будет, а с отладчиком будет.

Спасибо за совет!Одна вещь настораживает-при передаче пакета моргают светодиоды на ножках TX,RX TJA1050(скорее всего пакет передается),а вот обработчик по прерыванию от передачи не срабатывает(в нем меняется состояние диода и в консоль выводится сообщение об успешной передаче).

void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef *hcan)
{
 // if(hcan->Instance == CAN1) {
            printf("tr from CAN1:\n");
             HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_8);
 // }

  // else {
          //  printf("tr from CAN2:\n");
          //   HAL_GPIO_TogglePin(GPIOE, GPIO_PIN_9);
  }

Делаю вывод-тактирование включается,но постараюсь найти место включения тактирования кана по совету.За инициализацию кана отвечает НAL.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот функция инициализации кана.Стараюсь разобраться,но еще только осваиваю C,подскажите,происходит ли включение

тактирования кана?

Init.txt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот такого вида строки еще нигде не нашел.

_HAL_RCC_CAN1_CLK_ENABLE()

в мануале для STm32F3 она должна стоять в коде.

Изменено пользователем Beekr
добавка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Заходил в функции MX_CAN1_Init()-там есть такой код

void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan)
{
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  if(hcan->Instance==CAN1)
  {
  /* USER CODE BEGIN CAN1_MspInit 0 */

  /* USER CODE END CAN1_MspInit 0 */
    /* Peripheral clock enable */
    __HAL_RCC_CAN1_CLK_ENABLE();
  
    __HAL_RCC_GPIOD_CLK_ENABLE();
    /**CAN1 GPIO Configuration    
    PD0     ------> CAN1_RX
    PD1     ------> CAN1_TX 
    */
    GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1;
    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
    GPIO_InitStruct.Pull = GPIO_NOPULL;
    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
    GPIO_InitStruct.Alternate = GPIO_AF9_CAN1;
    HAL_GPIO_Init(GPIOD, &GPIO_InitStruct);

    /* CAN1 interrupt Init */
    HAL_NVIC_SetPriority(CAN1_TX_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(CAN1_TX_IRQn);
    HAL_NVIC_SetPriority(CAN1_RX0_IRQn, 5, 0);
    HAL_NVIC_EnableIRQ(CAN1_RX0_IRQn);
  /* USER CODE BEGIN CAN1_MspInit 1 */

  /* USER CODE END CAN1_MspInit 1 */
  }

Получается тактирование включается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...