реклама на сайте
подробности

 
 
> CAN_stm32
Ekka
сообщение Nov 7 2017, 14:22
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 164
Регистрация: 12-04-16
Из: Белгород
Пользователь №: 91 250



Привет всем, новичок в этом деле. Пытаюсь настроить CAN в режиме "слушать себя". Использую CubeMX HAL, ну и ручками немного понацарапалось. Кто может мне, тугодуму, подсказать,
почему в прерывание по приему и передаче входит только раз? Может, я какие-то флаги не сбрасываю? или фильтр не правильно настроен.
Куда копать хоть...

настройка CAN
Код
static void MX_CAN1_Init(void)
{

  hcan1.Instance = CAN1;
  hcan1.Init.Prescaler = 16;
  hcan1.Init.Mode = CAN_MODE_SILENT_LOOPBACK;
  hcan1.Init.SJW = CAN_SJW_1TQ;
  hcan1.Init.BS1 = CAN_BS1_3TQ;
  hcan1.Init.BS2 = CAN_BS2_3TQ;
  hcan1.Init.TTCM = DISABLE;
  hcan1.Init.ABOM = ENABLE;
  hcan1.Init.AWUM = DISABLE;
  hcan1.Init.NART = DISABLE;
  hcan1.Init.RFLM = ENABLE;
  hcan1.Init.TXFP = DISABLE;
  if (HAL_CAN_Init(&hcan1) != HAL_OK)
  {
    Error_Handler();
  }

}


функция отправки
Код
void CAN_Transmit(void)
{
    hcan1.pTxMsg->StdId = 0x002;
    hcan1.pTxMsg->DLC = 3;
    hcan1.pTxMsg->Data[0] = tx++;
    hcan1.pTxMsg->Data[1] = 2;
    hcan1.pTxMsg->Data[2] = 3;
    HAL_CAN_Transmit(&hcan1, 10);


прерывания
Код
void CAN1_TX_IRQHandler(void)
{
  /* USER CODE BEGIN CAN1_TX_IRQn 0 */

  /* USER CODE END CAN1_TX_IRQn 0 */
  HAL_CAN_IRQHandler(&hcan1);
  /* USER CODE BEGIN CAN1_TX_IRQn 1 */
    //HAL_CAN_Transmit_IT(&hcan1);
  /* USER CODE END CAN1_TX_IRQn 1 */
}

/**
* @brief This function handles CAN1 RX0 interrupt.
*/
void CAN1_RX0_IRQHandler(void)
{
  /* USER CODE BEGIN CAN1_RX0_IRQn 0 */
    HAL_CAN_IRQHandler(&hcan1);
  /* USER CODE END CAN1_RX0_IRQn 0 */
  HAL_CAN_Receive(&hcan1,CAN_FIFO0,10);
    hcan1.pRxMsg->DLC = 0x00;
  hcan1.pRxMsg->StdId =0x00;
  hcan1.pRxMsg->Data [0] = 0x00;
  hcan1.pRxMsg->Data [1] = 0x00;
  hcan1.pRxMsg->Data [2] = 0x00;
  hcan1.pRxMsg->Data [3] = 0x00;
  hcan1.pRxMsg->Data [4] = 0x00;
  hcan1.pRxMsg->Data [5] = 0x00;
  hcan1.pRxMsg->Data [6] = 0x00;
  hcan1.pRxMsg->Data [7] = 0x00;
  /* USER CODE BEGIN CAN1_RX0_IRQn 1 */
  /* USER CODE END CAN1_RX0_IRQn 1 */
}


МЭЙН
Код
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();

  /* Configure the system clock */
  SystemClock_Config();

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_CAN1_Init();

  /* USER CODE BEGIN 2 */
    hcan1.pTxMsg = &canTxMessage;
    hcan1.pRxMsg = &canRxMessage;
    
    //фильтры CAN
    // настраиваем фильтр — приём всех посылок
    CAN_FilterConfTypeDef canFilterConfig;
    canFilterConfig.FilterNumber = 0;
    canFilterConfig.FilterMode = CAN_FILTERMODE_IDMASK;
    canFilterConfig.FilterScale = CAN_FILTERSCALE_32BIT;
    canFilterConfig.FilterIdHigh = 0x0000;
    canFilterConfig.FilterIdLow = 0x0000;
    canFilterConfig.FilterMaskIdHigh = 0x0000 << 5;
    canFilterConfig.FilterMaskIdLow = 0x0000;
    canFilterConfig.FilterFIFOAssignment = 0;
    canFilterConfig.FilterActivation = ENABLE;
    canFilterConfig.BankNumber = 1;
    
    HAL_CAN_ConfigFilter(&hcan1, &canFilterConfig);
    HAL_CAN_Receive_IT(&hcan1, CAN_FIFO0); //разрешаем приём посылок
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
        CAN_Transmit();
        HAL_Delay(10);
  /* USER CODE END WHILE */

  /* USER CODE BEGIN 3 */

  }
  /* USER CODE END 3 */

}



Что не так???? stm32105R8Tx

Сообщение отредактировал Ekka - Nov 7 2017, 14:23
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ekka   CAN_stm32   Nov 7 2017, 14:22
- - Эдди   Жутко нечитаемый код.   Nov 7 2017, 18:36
- - Andreas1   Цитата(Ekka @ Nov 7 2017, 17:22) Что не т...   Nov 7 2017, 18:59
- - Эдди   Подозреваю, что вообще никто не связывается с HAL ...   Nov 7 2017, 20:07
- - Andrew_Q   Осмелюсь предположить, что нет сброса битов прерыв...   Nov 8 2017, 04:57
|- - adnega   Цитата(Andrew_Q @ Nov 8 2017, 07:57) Осме...   Nov 8 2017, 06:20
|- - Ekka   ткните носом, пожалуйста, где в datasheet про КАН ...   Nov 8 2017, 10:43
|- - Ekka   Все, вопрос снят   Nov 9 2017, 10:45
- - Эдди   Это вам не в даташит, а в RM на линейку используем...   Nov 8 2017, 11:13
- - yes   на всякий случай: сталкивались с глюками "HAL...   Nov 9 2017, 11:46
|- - Ekka   разобрались потихоньку, не знаю, правильно ли, но ...   Nov 10 2017, 07:49
|- - Ekka   вопрос другой возник...пытаюсь связать две stm32f1...   Nov 13 2017, 14:52
|- - Ekka   Ребят, неужели такой ошибки не у кого не было? Пон...   Nov 14 2017, 07:52
|- - Andreas1   Цитата(Ekka @ Nov 14 2017, 10:52) Ребят, ...   Nov 14 2017, 12:08
- - esaulenka   Копать: 1) в сторону рассмотрения шины осциллограф...   Nov 14 2017, 08:08


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th June 2025 - 00:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01369 секунд с 7
ELECTRONIX ©2004-2016