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

Не проходит инициализация CAN Stm32

https://istarik.ru/blog/stm32/159.html

STMCubeMX, настраиваю CAN по этой статье для STM32F103, открываю пример с Гита и пробовал сам всё проинициализировать, но программа вешается при инициализации CAN в отладчике, при этом после POR(выключения питания) нормально запускается из FLASH. Что может быть?

 

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 = CAN1;
  hcan.Init.Prescaler = 4;
  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 = 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 */
 
  /* USER CODE END CAN_Init 2 */
 
}

 

улетает в

 

 

/**
  * @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 */
  __disable_irq();
  while (1)
  {
  }
  /* USER CODE END Error_Handler_Debug */
}

 

Запускал на stm32f446, та же история.

 

Если идти по шагам, крутиться в этом цикле.

 

/* Exit from sleep mode */
  CLEAR_BIT(hcan->Instance->MCR, CAN_MCR_SLEEP);
 
  /* Get tick */
  tickstart = HAL_GetTick();
 
  /* Check Sleep mode leave acknowledge */
  while ((hcan->Instance->MSR & CAN_MSR_SLAK) != 0U)
  {
    if ((HAL_GetTick() - tickstart) > CAN_TIMEOUT_VALUE)
    {
      /* Update error code */
      hcan->ErrorCode |= HAL_CAN_ERROR_TIMEOUT;
 
      /* Change CAN state */
      hcan->State = HAL_CAN_STATE_ERROR;
 
      return HAL_ERROR;
    }
  }

Есть у кого-нибудь рабочий проект с инициализацией CAN для stm32f103c8t6 синяя платка?

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


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

А на шине все в порядке? Например, без терминатора там может не установиться рецессивный уровень.

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


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

1 hour ago, ovn said:

У кого-нибудь есть рабочий пример работы с CAN для STM32F103С8?

На github 100500 рабочих примеров ждут уже как лет 10.

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


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

38 minutes ago, adnega said:

Не проще RM почитать и сделать самому?

Это кому как. Да и более интересные книжки есть.

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


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

Примеры эти у меня не работают их всего то штуки 3 на весь GIT, всё перелопачено за эти дни по нескольку раз. В конечном итоге в режиме закоротки CAN_MODE_LOOPBACK, после танцев с бубном пару дней, подключением кварца на плате, USB, чтобы получить Clock для Can, я стал передавать и получать пакеты. В режиме CAN_MODE_NORMAL, уже не работает, смотрю логическим анализатором, на ножках тишина, приёма нет. 

Я поражён на STM32, да библиотека HAL и калокуб - кака, но какого фига я должен писать под CMSIS, работать с битами и регистрами, если хочу быстро его поднять в проекте что-то простое, не читая десятки страниц мануалов. На Zynq 7000 CAN заработал через час под Линукс, а ещё через час на голом железе, используя библиотеку Xilinx и примеры, так с этим железом работает в разы меньше народу, и для самого дешманского и распространённого контроллера STM и платы нет сразу рабочего, простого проекта, чтоб залил и работает, я фигею.  

Изменено пользователем ovn

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


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

39 минут назад, ovn сказал:

подключением кварца на плате, USB, чтобы получить Clock для Can

Без кварца кан не будет работать, в F103 с подключенным USB  кан не работает.

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


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

43 минуты назад, ovn сказал:

но какого фига я должен писать под CMSIS, работать с битами и регистрами, если хочу быстро его поднять в проекте что-то простое, не читая десятки страниц мануалов.

Так и не говорите! Враги кругом. Понаворотили кучи регистров и битов - всё чтоб человека запутать! Ещё и RM читать заставляют....  :treaten: :biggrin:

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


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

46 minutes ago, ovn said:

всего то штуки 3 на весь GIT

Нельзя так писать ! Упал со стула (со смеха) и чуть ногу не сломал.

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


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

3 часа назад, x893 сказал:

Нельзя так писать ! Упал со стула (со смеха) и чуть ногу не сломал.

Поделитесь проектиком с CAN, чтобы открывался свежем STM32CubeIDE 1.6.1, чтобы мог открыть для отладки в Дебагере, прошить bin в синюю плату и чтобы оно РАБОТАЛО. Подобных тем по вопросу на этом форуме уже несколько. 

3 часа назад, Vasily_ сказал:

Без кварца кан не будет работать, в F103 с подключенным USB  кан не работает.

У меня виснет инициализация CAN пока USB не включишь в Кубике, что не очевидно, похоже клока для can без него нет, хотя контроллер вроде как висит на APB1.  При включении Нормал, похоже контроллеру нужен физический интерфейс с конкретной рабочей шиной, шильд, терминаторы и т. п. 

 

Вот что-то мне подсказывает, что так оно и есть, помимо ранее дешманского Blue Pill, есть ещё платка Nucleo F446RE, на ней тоже не запускается скаченный с GITa проект под неё, подозреваю что нужно запаивать кварц(и сразу вопрос какой, на 8 или 16?).  

Изменено пользователем ovn

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


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

4 часа назад, ovn сказал:

В режиме CAN_MODE_NORMAL, уже не работает, смотрю логическим анализатором, на ножках тишина, приёма нет. 

Вам надо иметь минимум два устройства с трансиверами, что бы в таком режиме работало. Пока физически шины не будет - ничего не заработает. Это не UART.

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


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

48 minutes ago, ovn said:

Поделитесь проектиком с CAN, чтобы открывался свежем STM32CubeIDE 1.6.1, чтобы мог открыть для отладки в Дебагере, прошить bin в синюю плату и чтобы оно РАБОТАЛО. Подобных тем по вопросу на этом форуме уже несколько.

А смысл ? Следующий опять за вас искать. Надо самому учиться рыбу ловить.

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


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

нужно запаивать кварц(и сразу вопрос какой, на 8 или 16?).


В свете услышанного - не меньше 24ёх, "чтоб два раза не вставать" (-8Ж... ей-ей, детский сад.

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


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

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

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

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

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

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

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

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

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

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