Search the Community
Showing results for tags 'can'.
-
В Компэл доступна новая линейка микроконтроллеров общего назначения компании STMicroelectronics – STM32G0B/C. Ее особенность – большие объемы памяти и наличие встроенных интерфейсов CAN-FD и USB. Модели семейства STM32G0 относятся к бюджетным МК, но при этом имеют достаточно высокую производительность и богатую периферию. Область применения STM32G0B/C – устройства интернета вещей, сигнализация, датчики, промышленная автоматизация, измерительные приборы. Подробнее>>
- 62 replies
-
- stmicroelectronics
- can
-
(and 2 more)
Tagged with:
-
Есть такая проблема вывести на экран отрицательную температуру. Играюсь с avr протеусе.От нуля до 100 показывает на дисплее а от нуля до -55 какие то символы.Как можно настроить что бы показывало минусовую температуру.Вариантов сколько?
-
Не работает колбек CAN
RodionPI posted a topic in ARM, 32bit
Добрый вечер, настроена база для передачи информации по сети CAN. не работает простой колбек (помигать светодиодом при получении сообщения) . Если смотреть при отладке код вылетает из if как я понял в моменте проверки на наличие инфы в FIFO. Rx data после отправки сообщения остается пустым. Буду благодарен за любой совет, готов ответить на конкретизирующие вопросы. /* Private variables ---------------------------------------------------------*/ ADC_HandleTypeDef hadc; CAN_HandleTypeDef hcan; TIM_HandleTypeDef htim1; /* USER CODE BEGIN PV */ CAN_TxHeaderTypeDef TxHeader; CAN_RxHeaderTypeDef RxHeader; uint32_t TxMailbox = 0; uint8_t TxData[8] = {0,}; uint8_t RxData[8] = {0,}; CAN_FilterTypeDef sFilterConfig; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_ADC_Init(void); static void MX_CAN_Init(void); static void MX_TIM1_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 */ /* 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_ADC_Init(); MX_CAN_Init(); MX_TIM1_Init(); /* USER CODE BEGIN 2 */ HAL_TIM_Base_Start(&htim1); HAL_CAN_Start(&hcan); TxHeader.ExtId = 0; TxHeader.RTR = CAN_RTR_DATA; TxHeader.IDE = CAN_ID_STD; TxHeader.DLC = 8; TxHeader.TransmitGlobalTime = ENABLE; HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING | CAN_IT_ERROR | CAN_IT_BUSOFF | CAN_IT_LAST_ERROR_CODE); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { if(HAL_CAN_GetTxMailboxesFreeLevel(&hcan) > 0) { TxHeader.StdId = 0x0378; for (uint8_t i = 0; i < 8; i++) { TxData[i] = i; } } HAL_CAN_AddTxMessage(&hcan, &TxHeader, TxData, &TxMailbox); HAL_Delay(500); HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData); if(HAL_CAN_GetRxMessage(&hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK) { HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_RESET); } HAL_Delay(500); /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } ....описание функицй static void MX_CAN_Init(void) { /* USER CODE BEGIN CAN_Init 0 */ /* USER CODE END CAN_Init 0 */ /* USER CODE BEGIN CAN_Init 1 */ /* USER CODE END CAN_Init 1 */ hcan.Instance = CAN; hcan.Init.Prescaler = 4; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan.Init.TimeSeg1 = CAN_BS1_8TQ; hcan.Init.TimeSeg2 = CAN_BS2_7TQ; hcan.Init.TimeTriggeredMode = DISABLE; hcan.Init.AutoBusOff = DISABLE; hcan.Init.AutoWakeUp = DISABLE; hcan.Init.AutoRetransmission = DISABLE; hcan.Init.ReceiveFifoLocked = DISABLE; hcan.Init.TransmitFifoPriority = DISABLE; if (HAL_CAN_Init(&hcan) != HAL_OK) { Error_Handler(); } /* USER CODE BEGIN CAN_Init 2 */ 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; /* USER CODE END CAN_Init 2 */ } void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { if(HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &RxHeader, RxData) == HAL_OK) { HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_SET); HAL_Delay(50); HAL_GPIO_WritePin(Led2_GPIO_Port,Led2_Pin, GPIO_PIN_RESET); HAL_Delay(50); } } -
Доброго дня! Есть задача не пропускать в панель приборов определенные пакеты по CAN шине. Создал проект шлюза на STM32F107RTB6 с двумя кан. Но столкнулся с тем, что при запуске двигателя шлюз затыкается пропадают пакеты и панель приборов загорается как новогодняя елка, если двигатель глушу, оставляя только включенным зажигание, то все восстанавливается. Попробовал в качестве шлюза использовать проект Canny7.2 duo он справляется с передачей, но запихать планируемую обработку в диаграмму невозможно, очень сложные расчеты. На стм же не получается даже прокинуть сообщения из кана в кан без обработки. Гляньте, может у меня где по коду затык. /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * <h2><center>© Copyright (c) 2020 STMicroelectronics. * All rights reserved.</center></h2> * * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ /* 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; /* USER CODE BEGIN PV */ CAN_TxHeaderTypeDef TxHeader; CAN_RxHeaderTypeDef RxHeader; uint8_t TxData[8] = {0,}; uint8_t RxData[8] = {0,}; uint32_t TxMailbox = 0; uint8_t MessageTrigger = 0; uint8_t FilterStatus = 0; /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_CAN1_Init(void); static void MX_CAN2_Init(void); /* USER CODE BEGIN PFP */ void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan); void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan); /* 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 */ __enable_irq (); // разрешить прерывания. /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ __enable_irq (); // разрешить прерывания. /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_CAN1_Init(); MX_CAN2_Init(); /* USER CODE BEGIN 2 */ HAL_CAN_Start(&hcan1); HAL_CAN_ActivateNotification(&hcan1,CAN_IT_RX_FIFO0_MSG_PENDING |CAN_IT_TX_MAILBOX_EMPTY); HAL_CAN_Start(&hcan2); HAL_CAN_ActivateNotification(&hcan2,CAN_IT_RX_FIFO1_MSG_PENDING |CAN_IT_TX_MAILBOX_EMPTY); /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (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}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.Prediv1Source = RCC_PREDIV1_SOURCE_HSE; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI_DIV2; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL8; RCC_OscInitStruct.PLL2.PLL2State = RCC_PLL_NONE; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses 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_DIV1; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_1) != HAL_OK) { Error_Handler(); } /** Configure the Systick interrupt time */ __HAL_RCC_PLLI2S_ENABLE(); } /** * @brief CAN1 Initialization Function * @param None * @retval None */ static void MX_CAN1_Init(void) { /* USER CODE BEGIN CAN1_Init 0 */ CAN_FilterTypeDef sFilterConfig; /* USER CODE END CAN1_Init 0 */ /* USER CODE BEGIN CAN1_Init 1 */ /* USER CODE END CAN1_Init 1 */ hcan1.Instance = CAN1; hcan1.Init.Prescaler = 4; 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 = ENABLE; hcan1.Init.AutoWakeUp = ENABLE; 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 */ 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(&hcan1, &sFilterConfig) != HAL_OK) { Error_Handler(); } /* 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 */ CAN_FilterTypeDef sFilterConfig; /* USER CODE END CAN2_Init 0 */ /* USER CODE BEGIN CAN2_Init 1 */ /* USER CODE END CAN2_Init 1 */ hcan2.Instance = CAN2; hcan2.Init.Prescaler = 4; 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 = ENABLE; hcan2.Init.AutoWakeUp = ENABLE; 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 */ sFilterConfig.FilterBank = 15; 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_FIFO1; sFilterConfig.FilterActivation = ENABLE; //sFilterConfig.SlaveStartFilterBank = 14; if(HAL_CAN_ConfigFilter(&hcan2, &sFilterConfig) != HAL_OK) { Error_Handler(); } /* USER CODE END CAN2_Init 2 */ } /** * @brief GPIO Initialization Function * @param None * @retval None */ static void MX_GPIO_Init(void) { /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOB_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); } /* USER CODE BEGIN 4 */ void HAL_CAN_TxMailbox0CompleteCallback(CAN_HandleTypeDef*hcan) { //HAL_GPIO_TogglePin(GPIOD,GPIO_PIN_12); } void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan2) == 0); HAL_CAN_GetRxMessage(&hcan1, CAN_RX_FIFO0, &RxHeader, RxData); HAL_CAN_AddTxMessage(&hcan2, &RxHeader,RxData,&TxMailbox); } void HAL_CAN_RxFifo1MsgPendingCallback(CAN_HandleTypeDef *hcan) { while(HAL_CAN_GetTxMailboxesFreeLevel(&hcan1) == 0); HAL_CAN_GetRxMessage(&hcan2, CAN_RX_FIFO1, &RxHeader, RxData); HAL_CAN_AddTxMessage(&hcan1, &RxHeader,RxData,&TxMailbox); } /* 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 */ /* 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****/
-
Analog Devices предлагает лучшую в своем классе запатентованную технологию цифровой изоляции данных iCoupler, мощные изолированные преобразователи напряжения, протоколы связи, от RS-485 (ADM2795E), USB (ADuM4160) и CAN (ADM3050E) до гигабитного LVDS (ADN4654), изолированные драйверы для IGBT и SiC (ADuM4122), переключатели и изолированные сигма-дельта-АЦП, модуляторы и усилители. Подробнее о технологии iCoupler в цифровой изоляции Analog Devices>>
-
- analog devices
- icoupler
- (and 5 more)
-
Вопросы по CanOpen
laker posted a topic in Controller Area Network (CAN)
Добрый день, я являюсь новичком в работе с can, но возникла необходимость связаться с этим протоколом. Описываю задачу: нужно реализовать блок управления бесколлекторным электродвигателем (с датчиками холла) с защитой от перегрузок (скорее всего придётся обойтись его математической моделью). Так вот, основной задачей данного проекта является наблюдение показаний датчиков Холла, и нужно видеть (контролировать) ток на обмотках двигателя, данный список параметров до конца мне не известен, возможно он расширится, но минимум такой. Так вот, как я понимаю, чтобы отслеживать данные параметры в режиме реального времени (даже пусть это математическая модель), мне нужно реализовать стек протоколов CanOpen, речи о сети не идёт, нужно только наладить CanOpen связь между ПК и микроконтроллером stm32f103c8t6. Я поковырялся на различных форумах, сайтах, и нашёл информацию про 2 библиотеки под данное семейство микроконтроллеров - это CanOpenNode и CanFestival. Данные библиотеки реализованы, как я прочитал, с использованием стандартов ds-301, ds-302 и ds-305, а для реализации устройств CANopen для приводов нужен стандарт ds-402 ( возможно я несу полную околесицу ), который не указан ни в CanOpenNode, ни в CanFestival. Я правильно понимаю, что для выполнения моей задачи библиотека должа содержать стандарт ds-402 или можно обойтись без этого стандарта (ds-402), а реализовать "сеть" на основе имеющихся библиотек. Если всё же это так (библиотека должна содержать стандарт ds-402), то подскажите есть ли такая библиотека в бесплатном доступе? А если ответ будет " можно реализовать на основе имеющихся библиотек", то какую лучше выбрать с точки зрения простоты реализации?- 6 replies
-
- bldc
- canfestival
-
(and 3 more)
Tagged with:
-
Имеем частотный преобразователь для погрузчика с выходом на управляющую шину CAN (ремонт/подъемник). На периферийном блоке (железный "тазик") расположен разъем, физически - круглый, в металлическом корпусе, 4-пин с 1 ключем, вилка. Диаметр наружной резьбы 12 мм. (?) 1. Если ли стандарт на подключение такими разъемами в промышленном/авто секторе ? (?) 2. Стандартизация на распиновку. Прозвонил, получилось 1-CAN_x 2-CAN_y 3-POWER(+) 4-POWER(-) (?) 3. Питание, которое идет по линиям . Есть ли стандарт на уровень напряжения и максимальный ток ? ps Буду благодарен, если кто подскажет производителя-марку-код подходящих разъемов. гуглом, digikey итп владеем, временем (и кольцами ) - нет
- 10 replies
-
- can
- industrial
-
(and 1 more)
Tagged with:
-
Error frames на шине
Polaris posted a topic in Controller Area Network (CAN)
Занимаюсь реализацией самописного протокола для CAN на ATSAMC21, в целом все понятно и четко, скорость работы - 500 кбит/с. Для отладки и управления со стороны компьютера использую CAN-USB адаптер от Kvaser. Вроде бы все работало, начал смотреть, что там происходит на шине и обнаружил достаточно большое количество Error frames. Причем обнаруживаются они только в том случае, когда на шине более одного участника. Если к адптеру подключена одна плата - все хорошо, подключаешь вторую - до одного процента пакетов испорчены. Выглядит это вот так: Зеленый канал - это состояние питания микроконтроллера, желтый - сама шина. Второй участник при этом совершенно точно ничего не передает, я специально становился в отладке на функцию передачи - она ни разу не вызывалась. Кабель достаточно короткий, с обеих сторон терминирован 120 Ом. Как видно из скриншотов, выброс связан с искажение бита ACK, но кто это может делать - я совершенно не понимаю. Фильтры на участниках настраивал и таким образом, чтобы отбрасывать чужие пакеты, ничего не дало, в принципе, и не должно было дать, это же ACK. Что бы это могло быть? -
stm32f103c8t6 + CAN + Hard Fault
Koteyk0o posted a topic in ARM, 32bit
Всем привет Использую stm32f103c8t6 в связке с MCP2551, с другой стороны к нему подключен CAN Shield для Arduino, чтобы ловить пакеты. При включении со стороны STM32 приходят 2 пустых пакета с заголовком (насколько я понимаю) После этого STM32 уходит в Hard Fault, тактирование я вроде бы настроил правильно, кванты времени выставил для скорости 500 кбит Код генерировал в STM32CubeMX, а отладку провожу в Keil uVision5 Честно говоря это мои первые попытки работы с CAN протоколом, да и до этого я с STM32 не работал, но похоже я что-то делаю не так #include "main.h" CAN_HandleTypeDef hcan; void SystemClock_Config(void); static void CAN_Data_Send(void); static void MX_GPIO_Init(void); static void MX_CAN_Init(void); void CAN_Data_Send(void){ CAN_TxHeaderTypeDef Tx_Header; Tx_Header.StdId = 0x201; Tx_Header.IDE = CAN_ID_STD; Tx_Header.RTR = CAN_RTR_DATA; Tx_Header.DLC = 0x08; uint8_t Tx_Data[8] = {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}; HAL_CAN_AddTxMessage(&hcan, &Tx_Header, Tx_Data, (uint32_t *)CAN_TX_MAILBOX0); } int main(void){ HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_CAN_Init(); while (1){ HAL_Delay(500); CAN_Data_Send(); HAL_GPIO_TogglePin(GPIOC, CAN_Error_LED_Pin); } } void SystemClock_Config(void){ RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK){ Error_Handler(); } 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_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK){ Error_Handler(); } } static void MX_CAN_Init(void){ hcan.Instance = CAN1; hcan.Init.Prescaler = 9; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan.Init.TimeSeg1 = CAN_BS1_4TQ; hcan.Init.TimeSeg2 = CAN_BS2_3TQ; hcan.Init.TimeTriggeredMode = DISABLE; hcan.Init.AutoBusOff = DISABLE; hcan.Init.AutoWakeUp = ENABLE; hcan.Init.AutoRetransmission = ENABLE; hcan.Init.ReceiveFifoLocked = DISABLE; hcan.Init.TransmitFifoPriority = DISABLE; if (HAL_CAN_Init(&hcan) != HAL_OK){ Error_Handler(); } } static void MX_GPIO_Init(void){ GPIO_InitTypeDef GPIO_InitStruct = {0}; __HAL_RCC_GPIOC_CLK_ENABLE(); __HAL_RCC_GPIOD_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); __HAL_RCC_GPIOB_CLK_ENABLE(); HAL_GPIO_WritePin(CAN_Error_LED_GPIO_Port, CAN_Error_LED_Pin, GPIO_PIN_RESET); HAL_GPIO_WritePin(LED_Output_GPIO_Port, LED_Output_Pin, GPIO_PIN_RESET); GPIO_InitStruct.Pin = CAN_Error_LED_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(CAN_Error_LED_GPIO_Port, &GPIO_InitStruct); GPIO_InitStruct.Pin = Button_1_Pin|Button_2_Pin; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_NOPULL; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = LED_Output_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_Output_GPIO_Port, &GPIO_InitStruct); } void Error_Handler(void){ }- 56 replies
-
- hard fault
- stm32f103c8t6
-
(and 1 more)
Tagged with:
-
Доброго времени суток. Еще очень давно мечтал сделать что-нибудь на CAN в своих радиолюбительских целях. И вот, похоже это время пришло :). Появилась задача удобно решаемая на CAN и достаточно раскуренный STM32. Вопрос у меня стоит с выбором прикладного уровня протокола. В принципе можно придумать свой, все-таки я , как радиолюбитель, не зажат стандартами и другими требованиями и по срокам подгонять может меня только я, с ним я договорится могу :). Но я пока кручусь возле CANopen, как кот вокруг холодильника. В общих виде структура протокола CANopen мне вроде как понятна, нюансы, я считаю, лучше разбирать одновременно практически со штудированием документации. Вот на этом этапе у меня и возник вопрос. Изобретая какой-нибудь девайс, несомненно лучше всего его проверять заведомо рабочим инструментом. И в моем случае, мне вроде как нужен какой-то CANopen конфигуратор. Тут я упираюсь в жесткое ограничение бюджета, имеющий крайне малый размер и его надзирателя по имени Жаба, который еще больше его ужимает. Теперь сам вопрос. Существуют ли какие-либо бесплатные инструменты и работы с CANopen? Например, вроде как мне может помочь Kickdrive zero, но она требует некопеечного адаптера CAN-USB. Я наверное ответ то знаю :), но вдруг я что-то упустил в гуглении и существует некий программный бесплатный продукт, пускай с сильно обрезанным функционалом и дешевым адаптером. Китайцы какие-то адаптеры продают, только я не понял с чем они работают. Может можно самому преобразователь интерфейса сделать? Какой-нибудь CAN-232, так ведь надо знать что гнать в 232, вряд ли же есть программы для CANopen которым можно тупо гнать в 232 дублирование пакетов без какой-то служебной информации? Из elm327 тоже наверное не получится сделать? Если я правильно понял, он чисто ат командами управляется. Может есть более удобный протокол для радиолюбителя, но тоже "стандартный"? Вопросы может не совсем корректно задал, каши в голове еще пока много. Если что постараюсь уточнить. Спасибо.
-
CANopenNode
MaksR posted a topic in Controller Area Network (CAN)
Здравствуйте. Сейчас занимаюсь освоением CAN стека CANopenNode. Можете подсказать как настроить этот стек, как настроить словарь и как взаимодействовать с ним? Сконфигурировал стек с настройкой CO_NO_SDO_CLIENT = 0 (так понял, что так просто Client без Master). Запустил стек на STM32F407 без каких-либо других изменений. Смотрю данные с шины через Марафоновский USB-CAN и приложением CANWise. Все, что я вижу в CANwise'е это Heartbeat'ы с состоянием 0x5 и PDO запросы (0x1B0+NodeID(0x30), 0x2B0+NodeID(0x30), 0x3B0+NodeID(0x30)). -
Программисты под Android, Ростов-на-Дону
Иваныч posted a topic in Предлагаю работу
Крупному предприятию требуются программисты под Android. Требования: - Доскональное знание C++, C# и Java - Опыт написания п/о под Android (не менее 5 лет) - Готовность работать с существующими исходными кодами - Написание понятных, хорошо комментированных и документированных исходных кодов - Опыт работы с системами контроля версий - Умение пользоваться аппаратными и программными отладчиками - Умение читать электрические принципиальные схемы - Английский язык достаточный для чтения технической документации - Умение ладить с коллективом, не конфликтный и не вспыльчивый характер Желательный опыт: - Опыт работы с платформой Unity - Опыт модификации и сборки образов ОС Android из существующих исходников - C++ Builder или Visual C++ - i.MX6 процессоры - CAN, J1939, ISOBUS - Внедрение алгоритмов нечёткой логики Что предлагаем: - Грамотным специалистам - достойную, конкурентную белую шестизначную зарплату - Перспективная работа с масштабными поектами. Результаты Вашей работы будут демонстрироваться высшим лицам государства - Дружный коллектив - Иногородним оплачивается: -- приезд на собеседование -- переезд, включая перевоз вещей -- субсидия на съём жилья. Когда купите своё, субсидия всё равно остаётся ;-) -- четыре поездки домой в год - Субсидированные комплексные обеды в 100р. - Предприятие имеет свой детский лагерь на чёрном море и базу отдыха - Тёплый солнечный город, близость к Азовскому и Чёрному морям CV и, желательно, портфолио высылать на alexivanich[на]гмэйл.ком