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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Посылка по CAN в STM32F3
Jenya7
сообщение Sep 21 2018, 07:21
Сообщение #16


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



фигня какая то с этим КАНом.
Прием на мастере и слейве одинаковый
Код
void USB_LP_CAN1_RX0_IRQHandler(void)
{
     can_params.message_received = 1;
     can_params.fifo_num = CAN_FIFO0;
  
      CAN_Receive(CANx, CAN_FIFO0, &RxMessage);
}
посылка тоже
Код
uint8_t CAN_TX(uint8_t mot_id, uint8_t opcode, uint8_t *data, uint32_t data_size)
{
     uint8_t mailbox_num;
    
     TxMessage.RTR = CAN_RTR_DATA;
     TxMessage.IDE = CAN_ID_EXT;  
     TxMessage.ExtId = (opcode << 8) | mot_id;
    
     if (data_size > 8)
         data_size = 8;
    
     TxMessage.DLC = data_size;
     memcpy(&TxMessage.Data[0], data, data_size);
     mailbox_num = CAN_Transmit(CANx, &TxMessage);
    
     return mailbox_num;
}
мастер посылает
Код
void main (void)
{    while(1)    
      {    
          CAN_TX(100, MASTER_COM_WHO_IS, can_data_buf, 0);
      }
}
я вижу четкий прием
Код
void CAN_TX_Slave(uint32_t opcode)
{    
          switch (opcode)    
     {          
             //я сюда попадаю
             case CAN_COM_WHO_IS :
                 size = 0;        
                             //посылка ответа
                  CAN_TX(motor_sys_params.mot_id, CAN_COM_I_AM, data, 0);
             break;
     }
}
но мастер в прерывание приема не заходит. я ставлю паузу на мастере - и тогда он заходит в прерывание приема.
это что мастер должен освободить шину чтоб получить ответ?

в какой то момент на слейве вдруг TEC = 0xFF REC = 0xFF и он отсыхает несмотря на то что CAN1->BTR |= CAN_BTR_SILM;

Подключил слейв к USB-CAN Plus - это ж просто праздник какой то. посылка прием - все в порядке. почему два камня не могут договориться между собой?

Сообщение отредактировал Jenya7 - Sep 21 2018, 08:33
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
esaulenka
сообщение Sep 21 2018, 13:04
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



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

Но, всё-таки
1) чем вы руководствовались при запуске непрерывной передачи без малейших пауз?
2) слышали ли вы что-то о ACK'ах в кан-шине? И если да, то задумывались ли, кто же будет их выдавать?


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 21 2018, 13:49
Сообщение #18


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(esaulenka @ Sep 21 2018, 18:04) *
Не, я понимаю, что читать спецификации не модно, если можно фигачить код и писать вопросы в интернетах...

Но, всё-таки
1) чем вы руководствовались при запуске непрерывной передачи без малейших пауз?
2) слышали ли вы что-то о ACK'ах в кан-шине? И если да, то задумывались ли, кто же будет их выдавать?


вобще то на вехнем уровне я жду ответа от слейва. а кроме того USB-CAN Plus молотит тоже без перерыва однако с ним все нормально.
насчет ACK'а я не понял из документации. это же происходит на автоматическом уровне.

и вообще можно без туманностей и напыщенности? а так по нашему по бразильски по человечески.

я помню был проект. правда на TI Delfino. но там пять узлов молотили каждый как бог на душу положит без согласований и арбитражей. и ничего. все получали свои пакеты и я не помню чтоб КАН когда то отсох.

Сообщение отредактировал Jenya7 - Sep 21 2018, 14:12
Go to the top of the page
 
+Quote Post
Alechek
сообщение Sep 21 2018, 14:17
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 241
Регистрация: 15-11-05
Из: Челябинск
Пользователь №: 10 882



Цитата(Jenya7 @ Sep 21 2018, 18:49) *
а так по нашему по бразильски по человечески.

По-человечески - возьмите осциллограф или хотя бы лог. анализатор типа клон Saleae Logic.
Возмущений много, а схемы подключения - 0.
Где анализ целостности сигналов?

То что принял один - не значит, что примет другой!

ФИЗИЧЕСКИ что на линии?

--
UPD: Так еще и линия 1 Мбит!
Откуда тактирование? Кварц или RC?
Скорость пробовали уменьшать?
с BTR регистром пробовали играться?
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 21 2018, 14:26
Сообщение #20


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Alechek @ Sep 21 2018, 19:17) *
По-человечески - возьмите осциллограф или хотя бы лог. анализатор типа клон Saleae Logic.
Возмущений много, а схемы подключения - 0.
Где анализ целостности сигналов?

То что принял один - не значит, что примет другой!

ФИЗИЧЕСКИ что на линии?


осциллограф показывает обычные пакеты. когда есть ошибки USB-CAN Plus сигнализирует.

ну я вообще то вижу правильные данные при принятии. а что 1 Мбит это большая нагрузка на линию?

тактирование внешний кварц. а BTR с ST примеров. они точно лучше меня знают как его выставлять.

Сообщение отредактировал Jenya7 - Sep 21 2018, 14:40
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Jenya7
сообщение Sep 28 2018, 07:53
Сообщение #21


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



ОК. вроде заработало.

настраиваю маску на слейве
Код
    CAN_FilterInitStructure.CAN_FilterNumber = 0;
    CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask;
    CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit;
    CAN_FilterInitStructure.CAN_FilterIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterIdLow = 0x0064;    
    CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
    CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x00FF;
    CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
    CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
    CAN_FilterInit(&CAN_FilterInitStructure);

мастер посылает
Код
TxMessage.ExtId = (opcode << 8) | 0х64;

однако слейв не принимает. без маски и фильтра принимает.

Сообщение отредактировал Jenya7 - Sep 28 2018, 07:59
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th April 2024 - 19:50
Рейтинг@Mail.ru


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