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

Stm32F105 И Can


safronov-63

Рекомендуемые сообщения

Делаю адаптер USB-CAN. в режиме CAN_MODE_NORMAL не отправляются и не принимаются сообщения. но в режиме CAN_MODE_LOOPBACK все работает как и должно. Трансивер ISO1050 (работает, проверено). на ноге PB9 при отправке ничего не происходит. Уже неделю мучаюсь.

Инициализация СAN

can_filter.FilterIdHigh = 0;
can_filter.FilterIdLow = 0;
can_filter.FilterMaskIdHigh = 0;
can_filter.FilterMaskIdLow = 0;
can_filter.FilterMode = CAN_FILTERMODE_IDMASK;
can_filter.FilterScale = CAN_FILTERSCALE_32BIT;
can_filter.FilterNumber = 0;
can_filter.FilterFIFOAssignment = CAN_FIFO0;
can_filter.BankNumber = 0;
can_filter.FilterActivation = ENABLE;

can_handle.Instance = CAN1;
can_handle.Init.Prescaler = 450;
can_handle.Init.Mode = CAN_MODE_NORMAL;
can_handle.Init.SJW = CAN_SJW_1TQ;
can_handle.Init.BS1 = CAN_BS1_4TQ;
can_handle.Init.BS2 = CAN_BS2_3TQ;
can_handle.Init.TTCM = DISABLE;
can_handle.Init.ABOM = ENABLE;
can_handle.Init.AWUM = DISABLE;
can_handle.Init.NART = DISABLE;
can_handle.Init.RFLM = DISABLE;
can_handle.Init.TXFP = DISABLE;

HAL_CAN_Init(&can_handle);
HAL_CAN_ConfigFilter(&can_handle, &can_filter);

Инициализация выводов

__HAL_RCC_CAN1_CLK_ENABLE();

__HAL_RCC_AFIO_CLK_ENABLE();

// ремап на PB8 и PB9
__HAL_AFIO_REMAP_CAN1_2();

GPIO_InitTypeDef GPIO_InitStruct;
GPIO_InitStruct.Pin = GPIO_PIN_9;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);


GPIO_InitStruct.Pin = GPIO_PIN_8;
GPIO_InitStruct.Mode = GPIO_MODE_AF_INPUT;
GPIO_InitStruct.Pull = GPIO_NOPULL;
GPIO_InitStruct.Speed = GPIO_SPEED_HIGH;
HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

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

  • 4 месяца спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

Did you have any luck getting this to work? I'm having similar issues (sorry for incorrect language). I'm using STM32F103C8 with CubeMX and FreeRTOS.

/* CAN init function */
void MX_CAN_Init(void)
{
/* Enable CAN clock */
__HAL_RCC_CAN1_CLK_ENABLE ();
hcan.Instance = CAN1;
hcan.Init.Prescaler = 16;
hcan.Init.Mode = CAN_MODE_NORMAL;
hcan.Init.SJW = CAN_SJW_1TQ;
hcan.Init.BS1 = CAN_BS1_1TQ;
hcan.Init.BS2 = CAN_BS2_1TQ;
hcan.Init.TTCM = DISABLE;
hcan.Init.ABOM = DISABLE;
hcan.Init.AWUM = DISABLE;
hcan.Init.NART = DISABLE;
hcan.Init.RFLM = DISABLE;
hcan.Init.TXFP = DISABLE;
/* CAN register init */
HAL_CAN_DeInit(&hcan);
HAL_CAN_Init(&hcan);
/* CAN filter init */
sFilterConfig.FilterNumber = 0; // CAN1 [ 0..13]
sFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK; // IdMask or IdList
sFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT; // 16 or 32
sFilterConfig.FilterIdHigh	 = 0x0000; // Everything, otherwise 11-bit in top bits
sFilterConfig.FilterIdLow	 = 0x0000;
sFilterConfig.FilterMaskIdHigh = 0x0000;
sFilterConfig.FilterMaskIdLow = 0x0000;
sFilterConfig.FilterFIFOAssignment = CAN_FIFO0; // Rx
sFilterConfig.FilterActivation = ENABLE;
HAL_CAN_ConfigFilter(&hcan, &sFilterConfig);
}

void StartDefaultTask(void const * argument)
{
int adcVal;
CanTxMsgTypeDef TxMess;
int TransmitSuccess = 0;
/* Infinite loop */
for(;
{
/* Form the message */
TxMess.StdId = 0x123;
TxMess.ExtId = 0x00;
TxMess.DLC = 8;
TxMess.Data[0] = 0xAA;
TxMess.Data[1] = 0xBB;
TxMess.Data[2] = 0xFF;
TxMess.Data[3] = 0xCC;
TxMess.IDE = CAN_ID_STD ;
TxMess.RTR = CAN_RTR_DATA;
hcan.pTxMsg = &TxMess;
if( HAL_OK == HAL_CAN_Transmit(&hcan,50) ) {
TransmitSuccess++;
HAL_GPIO_TogglePin(GPIOB,GPIO_LED_CREEP_Pin);
osDelay(200);
HAL_GPIO_TogglePin(GPIOB,GPIO_LED_CREEP_Pin);
}
else{
HAL_GPIO_TogglePin(GPIOB,GPIO_LED_CREEP_Pin);
osDelay(100);
HAL_GPIO_TogglePin(GPIOB,GPIO_LED_CREEP_Pin);
osDelay(100);
HAL_GPIO_TogglePin(GPIOB,GPIO_LED_CREEP_Pin);
osDelay(100);
HAL_GPIO_TogglePin(GPIOB,GPIO_LED_CREEP_Pin);
}
}

void MX_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStruct;
/* GPIO Ports Clock Enable */
__GPIOA_CLK_ENABLE();

/* CAN GPIOs configuration **************************************************/
/* Enable GPIO clock */
__HAL_RCC_GPIOA_CLK_ENABLE();
__HAL_RCC_AFIO_CLK_ENABLE ();
/* Connect CAN block to pins */
__HAL_AFIO_REMAP_CAN1_1();
/* Configure CAN RX and TX pins */
GPIO_InitStruct.Pin = GPIO_CAN_TX | GPIO_CAN_RX;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Speed = GPIO_SPEED_MEDIUM;
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}

In main I call
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_CAN_Init();

It seems to transmit only 1 frame. Then nothing. The Rx node never receives anything.

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

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

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

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

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

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

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...