Jump to content
    

Search the Community

Showing results for tags 'can'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Сайт и форум
    • Новости и обсуждения сайта и форума
    • Другие известные форумы и сайты по электронике
    • В помощь начинающему
    • International Forum
    • Образование в области электроники
    • Обучающие видео-материалы и обмен опытом
  • Cистемный уровень проектирования
    • Вопросы системного уровня проектирования
    • Математика и Физика
    • Операционные системы
    • Документация
    • Системы CAD/CAM/CAE/PLM
    • Разработка цифровых, аналоговых, аналого-цифровых ИС
    • Электробезопасность и ЭМС
    • Управление проектами
    • Neural networks and machine learning (NN/ML)
  • Программируемая логика ПЛИС (FPGA,CPLD, PLD)
    • Среды разработки - обсуждаем САПРы
    • Работаем с ПЛИС, области применения, выбор
    • Языки проектирования на ПЛИС (FPGA)
    • Системы на ПЛИС - System on a Programmable Chip (SoPC)
    • Methods and tools for FPGA/ASIC verification
  • Цифровая обработка сигналов - ЦОС (DSP)
    • Сигнальные процессоры и их программирование - DSP
    • Алгоритмы ЦОС (DSP)
  • Микроконтроллеры (MCU)
    • Cредства разработки для МК
    • ARM
    • RISC-V
    • AVR
    • MSP430
    • Все остальные микроконтроллеры
    • Отладочные платы
  • Печатные платы (PCB)
    • Разрабатываем ПП в САПР - PCB development
    • Работаем с трассировкой
    • Изготовление ПП - PCB manufacturing
  • Сборка РЭУ
    • Пайка и монтаж
    • Корпуса
    • Вопросы надежности и испытаний
  • Аналоговая и цифровая техника, прикладная электроника
    • Вопросы аналоговой техники
    • Цифровые схемы, высокоскоростные ЦС
    • RF & Microwave Design
    • Метрология, датчики, измерительная техника
    • АВТО электроника
    • Умный дом
    • 3D печать
    • Робототехника
    • Repair and debug
  • Силовая электроника - Power Electronics
    • Силовая Преобразовательная Техника
    • Обратная Связь, Стабилизация, Регулирование, Компенсация
    • Первичные и Вторичные Химические Источники Питания
    • Высоковольтные Устройства - High-Voltage
    • Электрические машины, Электропривод и Управление
    • Индукционный Нагрев - Induction Heating
    • Системы Охлаждения, Тепловой Расчет – Cooling Systems
    • Моделирование и Анализ Силовых Устройств – Power Supply Simulation
    • Компоненты Силовой Электроники - Parts for Power Supply Design
  • Интерфейсы
    • Форумы по интерфейсам
  • Поставщики компонентов для электроники
    • Поставщики всего остального
    • Компоненты
  • Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир
    • Обсуждение Майнеров, их поставки и производства
  • Дополнительные разделы - Additional sections
    • Встречи и поздравления
    • Ищу работу
    • Предлагаю работу
    • Куплю
    • Продам
    • Объявления пользователей
    • Общение заказчиков и потребителей электронных разработок

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Город


Код проверки


skype


Facebook


Vkontakte


LinkedIn


Twitter


G+


Одноклассники

Found 0 results

  1. Настроил таймер на режим output compare togle.И всё погасло а тыкал на выход С1-112А абсолюный ноль.Что не так?
  2. Пробую простенький тестовый проект с CAN. Но я или что то упустил или что то не разрешил. На ножках нет передачи . На прием тоже нет прерывания. Может свежим глазом что- то бросится. #include "state.h" #include "can_my.h" #include "stm32f1xx_hal_cortex.h" CAN_HandleTypeDef hcan; /* USER CODE BEGIN PV */ CAN_FilterTypeDef canFilterConfig;/* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); static void MX_GPIO_Init(void); static void MX_CAN_Init(void); int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); MX_CAN_Init(); /* USER CODE BEGIN 2 */ HAL_CAN_Start(&hcan); HAL_CAN_ActivateNotification(&hcan, CAN_IT_RX_FIFO0_MSG_PENDING); while (1) { if(flag_1s==1){ flag_1s=0; if (HAL_CAN_GetTxMailboxesFreeLevel(&hcan) != 0) { msgTxHeader.StdId = 0x200; msgTxHeader.DLC = 8; msgTxHeader.TransmitGlobalTime = DISABLE; msgTxHeader.RTR = CAN_RTR_DATA;// ïåðåäàåì ñàìè íå çàïðîñ ïàðàìåòðà msgTxHeader.IDE = CAN_ID_STD; uint32_t mailBoxNum = 0; for (uint8_t i = 0; i < 8; i++) { msgTxData[i] = i; } HAL_CAN_AddTxMessage(&hcan, &msgTxHeader, msgTxData, &mailBoxNum); } }//flag 1 s }//while }//main static void MX_CAN_Init(void) { canFilterConfig.FilterBank = 0; canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; canFilterConfig.FilterIdHigh = 0x0000;//ñòàðøàÿ ÷àñòü ID canFilterConfig.FilterIdLow = 0x0000;// ìëàäøàÿ ÷àñòü ID canFilterConfig.FilterMaskIdHigh = 0x0000;// ñòàðøàÿ ÷àñòü ìàñêè canFilterConfig.FilterMaskIdLow = 0x0000;// ìëàäíàÿ ÷àñòü ìàñêè canFilterConfig.FilterFIFOAssignment = CAN_RX_FIFO0; canFilterConfig.FilterActivation = ENABLE; canFilterConfig.SlaveStartFilterBank = 14; HAL_CAN_ConfigFilter(&hcan, &canFilterConfig); hcan.Instance = CAN1; hcan.Init.Prescaler = 16; hcan.Init.Mode = CAN_MODE_NORMAL; hcan.Init.SyncJumpWidth = CAN_SJW_1TQ; hcan.Init.TimeSeg1 = CAN_BS1_13TQ; hcan.Init.TimeSeg2 = CAN_BS2_2TQ; hcan.Init.TimeTriggeredMode = DISABLE; hcan.Init.AutoBusOff = DISABLE; hcan.Init.AutoWakeUp = ENABLE ; hcan.Init.AutoRetransmission = DISABLE; hcan.Init.ReceiveFifoLocked = DISABLE; hcan.Init.TransmitFifoPriority = DISABLE; if (HAL_CAN_Init(&hcan) != HAL_OK) { Error_Handler(); } } void HAL_CAN_MspInit(CAN_HandleTypeDef* hcan) { GPIO_InitTypeDef GPIO_InitStruct = {0}; if(hcan->Instance==CAN1) { __HAL_RCC_CAN1_CLK_ENABLE(); __HAL_RCC_GPIOA_CLK_ENABLE(); /**CAN GPIO Configuration PA11 ------> CAN_RX PA12 ------> CAN_TX */ GPIO_InitStruct.Pin = GPIO_PIN_11; GPIO_InitStruct.Mode = GPIO_MODE_INPUT; GPIO_InitStruct.Pull = GPIO_PULLUP ; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); GPIO_InitStruct.Pin = GPIO_PIN_12; GPIO_InitStruct.Mode = GPIO_MODE_AF_PP; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH; HAL_GPIO_Init(GPIOA, &GPIO_InitStruct); /* CAN1 interrupt Init */ HAL_NVIC_SetPriority(USB_HP_CAN1_TX_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USB_HP_CAN1_TX_IRQn); HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0); HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn); } } void USB_LP_CAN1_RX0_IRQHandler(void) { HAL_CAN_IRQHandler(&hcan); } void HAL_CAN_RxFifo0MsgPendingCallback(CAN_HandleTypeDef *hcan) { HAL_CAN_GetRxMessage(hcan, CAN_RX_FIFO0, &msgRxHeader, msgRxData); if (msgRxHeader.IDE == CAN_ID_EXT) { msgId = msgRxHeader.ExtId; } else { msgId = msgRxHeader.StdId; } }
  3. Имеется контроллер от GigaDevice GD32F103R. В контроллере имеется аппаратный модуль CAN. Этот модуль настроил согласно UserManual и успешно использовал это ПО сначала в отладчике, а затем и в целевом устройстве. Всё было замечательно до тех пор, пока не пришлось прошить очередной образец устройства уже отлаженным ПО. В этом конкретном образце устройства обнаружился баг в работе CAN. Баг проявляется, когда устройству необходимо направить в шину помимо ID ещё и байты с данными. В моём проекте устройство отправляет в шину за раз до 8 байт данных. В случае если устройство отправляет от 0 до 6 байт включительно, багов не возникает. В случае если устройство отправляет 7 байт, то последний байт данных представляет случайное значение, хотя при формировании посылки байт имеет определённое значение. В случае если устройство отправляет 8 байт, то уже последние два байта представляют случайные значения. Что было сделано: 1) Естественно, сначала проверил, что я записываю в почтовый ящик для отправки. Оказалось что записываю я всё верно. 2) Проверил работу внешнего преобразователя TTL->CAN на плате и даже заменил его - не помогло. 3) Проверил посылку осциллографом прямо на ноге микроконтроллера: 7й и 8й байт - всегда случайные значения. 4) Проверил ещё раз ПО на отладчике и ещё раз на другом образце целевого устройства - всё работает правильно, никаких случайных значений в 7м и 8м байтах. 5) На косячном образце стёр всю FLASH и заново записал ПО - не помогло. 6) Заменил на косячном образце микроконтроллер на новый, записал ПО, и....... БАГ ПРОПАЛ! Всё стало работать правильно. Что это было? Кто сталкивался? Есть ли какие-то особенности в использовании/настройке CAN, которые могут влиять подобным образом?
  4. Есть такая проблема вывести на экран отрицательную температуру. Играюсь с avr протеусе.От нуля до 100 показывает на дисплее а от нуля до -55 какие то символы.Как можно настроить что бы показывало минусовую температуру.Вариантов сколько?
  5. Добрый вечер, настроена база для передачи информации по сети 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); } }
  6. Доброго дня! Есть задача не пропускать в панель приборов определенные пакеты по CAN шине. Создал проект шлюза на STM32F107RTB6 с двумя кан. Но столкнулся с тем, что при запуске двигателя шлюз затыкается пропадают пакеты и панель приборов загорается как новогодняя елка, если двигатель глушу, оставляя только включенным зажигание, то все восстанавливается. Попробовал в качестве шлюза использовать проект Canny7.2 duo он справляется с передачей, но запихать планируемую обработку в диаграмму невозможно, очень сложные расчеты. На стм же не получается даже прокинуть сообщения из кана в кан без обработки. Гляньте, может у меня где по коду затык. /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * <h2><center>&copy; 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****/
  7. Analog Devices предлагает лучшую в своем классе запатентованную технологию цифровой изоляции данных iCoupler, мощные изолированные преобразователи напряжения, протоколы связи, от RS-485 (ADM2795E), USB (ADuM4160) и CAN (ADM3050E) до гигабитного LVDS (ADN4654), изолированные драйверы для IGBT и SiC (ADuM4122), переключатели и изолированные сигма-дельта-АЦП, модуляторы и усилители. Подробнее о технологии iCoupler в цифровой изоляции Analog Devices>>
  8. Добрый день, я являюсь новичком в работе с can, но возникла необходимость связаться с этим протоколом. Описываю задачу: нужно реализовать блок управления бесколлекторным электродвигателем (с датчиками холла) с защитой от перегрузок (скорее всего придётся обойтись его математической моделью). Так вот, основной задачей данного проекта является наблюдение показаний датчиков Холла, и нужно видеть (контролировать) ток на обмотках двигателя, данный список параметров до конца мне не известен, возможно он расширится, но минимум такой. Так вот, как я понимаю, чтобы отслеживать данные параметры в режиме реального времени (даже пусть это математическая модель), мне нужно реализовать стек протоколов CanOpen, речи о сети не идёт, нужно только наладить CanOpen связь между ПК и микроконтроллером stm32f103c8t6. Я поковырялся на различных форумах, сайтах, и нашёл информацию про 2 библиотеки под данное семейство микроконтроллеров - это CanOpenNode и CanFestival. Данные библиотеки реализованы, как я прочитал, с использованием стандартов ds-301, ds-302 и ds-305, а для реализации устройств CANopen для приводов нужен стандарт ds-402 ( возможно я несу полную околесицу ), который не указан ни в CanOpenNode, ни в CanFestival. Я правильно понимаю, что для выполнения моей задачи библиотека должа содержать стандарт ds-402 или можно обойтись без этого стандарта (ds-402), а реализовать "сеть" на основе имеющихся библиотек. Если всё же это так (библиотека должна содержать стандарт ds-402), то подскажите есть ли такая библиотека в бесплатном доступе? А если ответ будет " можно реализовать на основе имеющихся библиотек", то какую лучше выбрать с точки зрения простоты реализации?
  9. Имеем частотный преобразователь для погрузчика с выходом на управляющую шину CAN (ремонт/подъемник). На периферийном блоке (железный "тазик") расположен разъем, физически - круглый, в металлическом корпусе, 4-пин с 1 ключем, вилка. Диаметр наружной резьбы 12 мм. (?) 1. Если ли стандарт на подключение такими разъемами в промышленном/авто секторе ? (?) 2. Стандартизация на распиновку. Прозвонил, получилось 1-CAN_x 2-CAN_y 3-POWER(+) 4-POWER(-) (?) 3. Питание, которое идет по линиям . Есть ли стандарт на уровень напряжения и максимальный ток ? ps Буду благодарен, если кто подскажет производителя-марку-код подходящих разъемов. гуглом, digikey итп владеем, временем (и кольцами ) - нет
  10. Занимаюсь реализацией самописного протокола для CAN на ATSAMC21, в целом все понятно и четко, скорость работы - 500 кбит/с. Для отладки и управления со стороны компьютера использую CAN-USB адаптер от Kvaser. Вроде бы все работало, начал смотреть, что там происходит на шине и обнаружил достаточно большое количество Error frames. Причем обнаруживаются они только в том случае, когда на шине более одного участника. Если к адптеру подключена одна плата - все хорошо, подключаешь вторую - до одного процента пакетов испорчены. Выглядит это вот так: Зеленый канал - это состояние питания микроконтроллера, желтый - сама шина. Второй участник при этом совершенно точно ничего не передает, я специально становился в отладке на функцию передачи - она ни разу не вызывалась. Кабель достаточно короткий, с обеих сторон терминирован 120 Ом. Как видно из скриншотов, выброс связан с искажение бита ACK, но кто это может делать - я совершенно не понимаю. Фильтры на участниках настраивал и таким образом, чтобы отбрасывать чужие пакеты, ничего не дало, в принципе, и не должно было дать, это же ACK. Что бы это могло быть?
  11. Всем привет Использую 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){ }
  12. Доброго времени суток. Еще очень давно мечтал сделать что-нибудь на CAN в своих радиолюбительских целях. И вот, похоже это время пришло :). Появилась задача удобно решаемая на CAN и достаточно раскуренный STM32. Вопрос у меня стоит с выбором прикладного уровня протокола. В принципе можно придумать свой, все-таки я , как радиолюбитель, не зажат стандартами и другими требованиями и по срокам подгонять может меня только я, с ним я договорится могу :). Но я пока кручусь возле CANopen, как кот вокруг холодильника. В общих виде структура протокола CANopen мне вроде как понятна, нюансы, я считаю, лучше разбирать одновременно практически со штудированием документации. Вот на этом этапе у меня и возник вопрос. Изобретая какой-нибудь девайс, несомненно лучше всего его проверять заведомо рабочим инструментом. И в моем случае, мне вроде как нужен какой-то CANopen конфигуратор. Тут я упираюсь в жесткое ограничение бюджета, имеющий крайне малый размер и его надзирателя по имени Жаба, который еще больше его ужимает. Теперь сам вопрос. Существуют ли какие-либо бесплатные инструменты и работы с CANopen? Например, вроде как мне может помочь Kickdrive zero, но она требует некопеечного адаптера CAN-USB. Я наверное ответ то знаю :), но вдруг я что-то упустил в гуглении и существует некий программный бесплатный продукт, пускай с сильно обрезанным функционалом и дешевым адаптером. Китайцы какие-то адаптеры продают, только я не понял с чем они работают. Может можно самому преобразователь интерфейса сделать? Какой-нибудь CAN-232, так ведь надо знать что гнать в 232, вряд ли же есть программы для CANopen которым можно тупо гнать в 232 дублирование пакетов без какой-то служебной информации? Из elm327 тоже наверное не получится сделать? Если я правильно понял, он чисто ат командами управляется. Может есть более удобный протокол для радиолюбителя, но тоже "стандартный"? Вопросы может не совсем корректно задал, каши в голове еще пока много. Если что постараюсь уточнить. Спасибо.
  13. Здравствуйте. Сейчас занимаюсь освоением 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)).
  14. Крупному предприятию требуются программисты под Android. Требования: - Доскональное знание C++, C# и Java - Опыт написания п/о под Android (не менее 5 лет) - Готовность работать с существующими исходными кодами - Написание понятных, хорошо комментированных и документированных исходных кодов - Опыт работы с системами контроля версий - Умение пользоваться аппаратными и программными отладчиками - Умение читать электрические принципиальные схемы - Английский язык достаточный для чтения технической документации - Умение ладить с коллективом, не конфликтный и не вспыльчивый характер Желательный опыт: - Опыт работы с платформой Unity - Опыт модификации и сборки образов ОС Android из существующих исходников - C++ Builder или Visual C++ - i.MX6 процессоры - CAN, J1939, ISOBUS - Внедрение алгоритмов нечёткой логики Что предлагаем: - Грамотным специалистам - достойную, конкурентную белую шестизначную зарплату - Перспективная работа с масштабными поектами. Результаты Вашей работы будут демонстрироваться высшим лицам государства - Дружный коллектив - Иногородним оплачивается: -- приезд на собеседование -- переезд, включая перевоз вещей -- субсидия на съём жилья. Когда купите своё, субсидия всё равно остаётся ;-) -- четыре поездки домой в год - Субсидированные комплексные обеды в 100р. - Предприятие имеет свой детский лагерь на чёрном море и базу отдыха - Тёплый солнечный город, близость к Азовскому и Чёрному морям CV и, желательно, портфолио высылать на alexivanich[на]гмэйл.ком
×
×
  • Create New...