shura-1977 0 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба После обновления библиотеки HAL, не получается отправить сообщения по кан шине, может кто посмотрит одним глазом код, где я туплю. До обновления без проблем отправлял-принимал сообщения, обрабатывал прерывания, а сейчас заблудился в двух соснах, стыдоба /* 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****/ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба Достаньте исходники библиотеки старой версии что была и сравните их со свежей (не руками, а в соотв. редакторе). зы Хало-куб - этот "крест" должен нести непосредственно тот, кто подписался на это дело. Увы, такова воля разработчиков Хало-Куба :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shura-1977 0 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба Может кто поделиться рабочим проектом для STM32F4Discovery с применением CAN шины, на свежей библиотеке HAL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба Just now, shura-1977 said: Может кто поделиться рабочим проектом для STM32F4Discovery с применением CAN шины, на свежей библиотеке HAL. ТЫЦ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shura-1977 0 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба Вы и правда думаете что я этого не делал? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба 4 minutes ago, shura-1977 said: Вы и правда думаете что я этого не делал? Да, я в этом уверен, иначе этой темы не было бы )) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shura-1977 0 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба как прошла моя суббота пысы, я понимаю что я потерялся в двух соснах, только не могу понять где туплю Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Forger 17 23 февраля, 2019 Опубликовано 23 февраля, 2019 · Жалоба 26 minutes ago, shura-1977 said: я понимаю что я потерялся в двух соснах, только не могу понять где туплю 7 hours ago, Forger said: Хало-куб - этот "крест" должен нести непосредственно тот, кто подписался на это дело. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shura-1977 0 24 февраля, 2019 Опубликовано 24 февраля, 2019 (изменено) · Жалоба Как всегда виновата банальная невнимательность, если на CAN линии нет никакого устройства, а я для отладки просто соединил ноги МК перемычкой, то работать в режиме "CAN_MODE_NORMAL" не будет. Изменено 24 февраля, 2019 пользователем shura-1977 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beekr 0 16 августа, 2019 Опубликовано 16 августа, 2019 · Жалоба Здравствуйте! У меня на обновленных ф-циях хала для кан(stm32f4) с отладчиком код работает,а без него зависает. Вряд ли смогу отследить,какой флаг нужно сбросить руками.Надеюсь,что старая версия хала заработает,но не могу ее найти на сайте st. Прошу помочь ссылкой на старую библиотеку . main.c Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Darth Vader 0 17 августа, 2019 Опубликовано 17 августа, 2019 · Жалоба 13 hours ago, Beekr said: У меня на обновленных ф-циях хала для кан(stm32f4) с отладчиком код работает,а без него зависает. Посмотрите место в вашей программе, где включается тактирование блока CAN. Отладчик, скорее всего, при подключении включает тактирование всей периферии МК. Если же вы забыли сделать это в своей программе, то без отладчика работать не будет, а с отладчиком будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beekr 0 17 августа, 2019 Опубликовано 17 августа, 2019 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beekr 0 17 августа, 2019 Опубликовано 17 августа, 2019 · Жалоба Вот функция инициализации кана.Стараюсь разобраться,но еще только осваиваю C,подскажите,происходит ли включение тактирования кана? Init.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beekr 0 17 августа, 2019 Опубликовано 17 августа, 2019 (изменено) · Жалоба Вот такого вида строки еще нигде не нашел. _HAL_RCC_CAN1_CLK_ENABLE() в мануале для STm32F3 она должна стоять в коде. Изменено 17 августа, 2019 пользователем Beekr добавка Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Beekr 0 17 августа, 2019 Опубликовано 17 августа, 2019 · Жалоба Заходил в функции 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 */ } Получается тактирование включается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться