|
STM32F4 ETHERNET + CAN, Не отправляет сообщения, однако, по строчкам кода отправки проходит |
|
|
|
Feb 18 2017, 11:48
|
Группа: Участник
Сообщений: 7
Регистрация: 27-09-16
Пользователь №: 93 508

|
Здравствуйте! Проект: Управление отправкой и приёмом CAN сообщений через Ethernet с помощью браузера. Проблема: Не работает CAN, как на приём, так и на передачу сообщений. Судя по флагам, микроконтроллер проходит по всем строчкам инициализации CAN, заходит в функцию отправки сообщений, однако, ничего не отправляет. Коммутация рабочая. Подскажите, пожалуйста, как чинить? Инициализация: CODE void CAN1_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* CAN GPIOs configuration **************************************************/
/* Enable GPIO clock */ RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); /* Connect CAN pins */ GPIO_PinAFConfig(GPIOB, GPIO_PinSource8, GPIO_AF_CAN1); GPIO_PinAFConfig(GPIOB, GPIO_PinSource9, GPIO_AF_CAN1); /* Configure CAN RX and TX pins */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP; GPIO_Init(GPIOB, &GPIO_InitStructure);
/* CAN configuration ********************************************************/ /* Enable CAN clock */ RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE); /* CAN register init */ CAN_DeInit(CAN1); CAN_StructInit(&CAN_InitStructure);
/* CAN cell init */ CAN_InitStructure.CAN_TTCM = DISABLE; CAN_InitStructure.CAN_ABOM = DISABLE; CAN_InitStructure.CAN_AWUM = DISABLE; CAN_InitStructure.CAN_NART = DISABLE; CAN_InitStructure.CAN_RFLM = DISABLE; CAN_InitStructure.CAN_TXFP = DISABLE; CAN_InitStructure.CAN_Mode = CAN_Mode_Normal; CAN_InitStructure.CAN_SJW = CAN_SJW_1tq; /* CAN Baudrate = 1MBps (CAN clocked at 30 MHz) */ CAN_InitStructure.CAN_BS1 = CAN_BS1_6tq; CAN_InitStructure.CAN_BS2 = CAN_BS2_8tq; CAN_InitStructure.CAN_Prescaler = 2; CAN_Init(CAN1, &CAN_InitStructure);
/* CAN filter init */ CAN_FilterInitStructure.CAN_FilterNumber = 0; CAN_FilterInitStructure.CAN_FilterFIFOAssignment = CAN_Filter_FIFO0; CAN_FilterInitStructure.CAN_FilterMode = CAN_FilterMode_IdMask; CAN_FilterInitStructure.CAN_FilterScale = CAN_FilterScale_32bit; CAN_FilterInitStructure.CAN_FilterActivation = ENABLE; CAN_FilterInitStructure.CAN_FilterIdHigh = 0; CAN_FilterInitStructure.CAN_FilterIdLow = 0; CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0; CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0; CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE); CAN_ITConfig(CAN1, CAN_IT_TME, ENABLE); CAN_FilterInit(&CAN_FilterInitStructure); }
void NVIC_Config(void) { NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = CAN1_RX0_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = CAN1_TX_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x1; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
Функция отправки: Код void ASK_1(void) { CanTxMsg TxMessage;
// if (CAN_GetITStatus (CAN1, CAN_IT_TME)) // { // CAN_ClearITPendingBit(CAN1,CAN_IT_TME);
ASK1_DATA0='1';
TxMessage.StdId = 0x101; TxMessage.RTR = CAN_RTR_DATA; TxMessage.IDE = CAN_ID_STD; TxMessage.DLC = 1; TxMessage.Data[0] = ASK1_DATA0; //CAN1->TSR&CAN_TSR_TXOK0; CAN_Transmit(CAN1,&TxMessage); // } } Функция приёма: Код void CAN1_RX0_IRQHandler(void) { CanRxMsg RxMessage; if (CAN_GetITStatus (CAN1, CAN_IT_FMP0)) { CAN_ClearITPendingBit(CAN1,CAN_IT_FMP0);
CAN_Receive(CAN1,CAN_FIFO0, &RxMessage); CAN_FIFORelease (CAN1,CAN_FIFO0); READ_DATA0=RxMessage.Data[0]; READ_DATA1=RxMessage.Data[1]; READ_DATA2=RxMessage.Data[2]; READ_DATA3=RxMessage.Data[3]; Can1Flag = ENABLE; } }
Сообщение отредактировал IgorKossak - Feb 19 2017, 17:31
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
|
|
|
|
|
 |
Ответов
|
Feb 18 2017, 16:43
|
Группа: Участник
Сообщений: 7
Регистрация: 27-09-16
Пользователь №: 93 508

|
Цитата(pitt @ Feb 18 2017, 18:58)  Не использую НИКОГДА CUBE, SPL или HAL и Вам не советую. Попробуйте сначала программную заглушку потом аппаратную и пусть поговорит сам с собой. Если вас не затруднит, не могли бы вы разъяснить начинающему, что такое CUBE, SPL или HAL? Я раньше опирался на примеры уже готовых программ, а они были написаны в подобной форме. Что я делаю не так, и где нужно почитать, чтобы делать правильно? Спасибо
|
|
|
|
|
Feb 19 2017, 08:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Не слушаете коллегу, все правильно вы делаете - начинаете работу с чужих примеров и решений. Переход на прямое обращение к регистрам, это уж скорее от безделья или от скуки  Но справедливости ради стоить отметить, что в в критичных к скорости работы участках кода ситуациях это имеет смысл (прерывания, программные интерфейсы через ногодрыгание). Цитата что такое CUBE, SPL или HAL? CUBE, SPL или HAL - это готовые библиотеки от ST. Ваш код выше написан на SPL - Std Periph Lib. HAL пришел на смену SPL, новый проекты лучше начинать на HAL. Цитата Я раньше опирался на примеры уже готовых программ, а они были написаны в подобной форме. Все верно вы делаете - нет ничего постыдного или зазорного в использовании чужого открытого кода Делать наиболее простым и привычным способом - это разумно. Цитата Что я делаю не так, и где нужно почитать, чтобы делать правильно? Скачивайте свежие библиотеки с сайта ST, внутри есть примеры для работы с разной периферией. HAL есть внутри CUBE, поэтому ищите свежий CUBE. Возможно, у вас аппаратно снаружи МК что-то не так подключено. Поищите в том направлении. В гуглях полно информации по этой теме.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Feb 19 2017, 11:20
|
Группа: Участник
Сообщений: 7
Регистрация: 27-09-16
Пользователь №: 93 508

|
Цитата(Forger @ Feb 19 2017, 11:17)  . Понял Вас. Большое Спасибо за помощь.
Сообщение отредактировал IgorKossak - Feb 19 2017, 17:31
Причина редактирования: бездумное цитирование
|
|
|
|
|
Feb 20 2017, 06:39
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(pitt @ Feb 20 2017, 07:48)  Использовать CUBE, HAL, SPL можно только чтобы понимать что происходит в регистрах. Вот уж точно заняться нечем, как изучать, что там и где пишется в регистры, особенно новичку  Цитата Использовать ЭТО вслепую очень легко и ... самоубийственно. Если у вас не получается ЭТО использовать успешно и эффективно, то это вовсе не означает, что у других это тоже не получается )) Цитата Конечно, что-то получится и даже заработает, но потом, почему-то перестанет, а знаний нет. Неужели такая большая проблема для опытного инженера, посмотреть и разобраться, что именно там неправильно настраивается в регистрах в этих библиотеках с открытыми исходниками? Цитата Но это уже дело вкуса и требований к качеству. Дело вкуса - это в ресторане. Тут же все как правило упирается в некий компромисс: надежность кода/время. Если через HAL/CUBE задача решается быстрее и эффективнее, то именно так ее и следует решать. Но коли страх перед чужим пусть и бесплатным кодом сильнее, чем следует, то, разумеется, использовать чужой код категорически запрещается!  Цитата Если для инженера-электрика или хоббииста это простительно, но для профессионального программера - приговор. Значит, подавляющее большинство сидящих тут - "инженеры-электрики или хоббиисты", и лишь один - "профессиональный программер" ...
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Feb 20 2017, 13:10
|
Местный
  
Группа: Участник
Сообщений: 328
Регистрация: 1-06-06
Из: USA
Пользователь №: 17 672

|
Цитата(Forger @ Feb 20 2017, 01:39)  Желаю всяческих успехов: об'яснять слепому от рождения, что такое белый цвет я не буду.
--------------------
|
|
|
|
|
Feb 20 2017, 14:16
|

Профессионал
    
Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831

|
Цитата(pitt @ Feb 20 2017, 16:10)  об'яснять слепому от рождения, что такое белый цвет я не буду. Нет ничего постыдного признаться в своем неумении что-то делать - нет людей, которые умеют все! Стыдно другое - слепо убеждать обывателей в том, во что сам когда-то фанатично уверовал, не понимая истинной сути сего "учения" ...  зы. При приеме на работу в большинстве крупных контор умение работать в CUBE (или подобных инструментах) крайне желательно, а в некоторых даже обязательно! Уверен, что считать деньги и время они умеют ... Я сам лично не пользуюсь кубом и пока не планирую, но и отговаривать от этого новичков не стану. Пользуюсь HAL/SPL вперемешку с прямым обращением. Пока что этого мне достаточно. Нисколько не навязываю, просто, делюсь своим опытом
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
DmitryG STM32F4 ETHERNET + CAN Feb 18 2017, 11:48      jcxz Цитата(Forger @ Feb 20 2017, 12:39) Значи... Feb 20 2017, 17:48       Forger Цитата(jcxz @ Feb 20 2017, 20:48) Да, про... Feb 20 2017, 18:00        jcxz Цитата(Forger @ Feb 21 2017, 00:00) Если ... Feb 20 2017, 18:26         Forger Цитата(jcxz @ Feb 20 2017, 21:26) Это нап... Feb 20 2017, 18:36 Neborak Вроде еще нужно инициализировать тактирование альт... Feb 20 2017, 09:59 AHTOXA Цитата(Forger @ Feb 20 2017, 11:39) Значи... Feb 20 2017, 15:42 Forger Цитата(AHTOXA @ Feb 20 2017, 18:42) По кр... Feb 20 2017, 17:34  jcxz Цитата(Forger @ Feb 20 2017, 23:34) Может... Feb 20 2017, 18:49   Forger Цитата(jcxz @ Feb 20 2017, 21:49) Интерес... Feb 20 2017, 18:59    jcxz Цитата(Forger @ Feb 21 2017, 00:59) Бессм... Feb 21 2017, 06:06     Forger Цитата(jcxz @ Feb 21 2017, 09:06) Пока от... Feb 21 2017, 06:29
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|