15.12.2015, 14:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Сообщение от serb-radio
|
при старте программы TX что то отсылает, затем в цикле ничего не происходит
|
Скорее всего, ответ здесь:
Сообщение от mrKirill
|
Если на шине нет ни одного устройства, кроме Вашего, то в Normal Mode блок будет висеть в состоянии CAN_TxStatus_Pending.
|
Кану нужен хотя бы один собеседник
|
|
|
Эти 2 пользователя(ей) сказали Спасибо Alex9797 за это сообщение:
|
|
|
15.12.2015, 19:10
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
А если нет пока собеседника, я замкнул Rx на Tx, так ж можно, как УАРТ или неправильная аналогия?
сигнал пошел, но прерывания не работают по приему и отправке, причем даже если убрать отправку сообщения из главного цикла, все равно идет непрерывная его отправка, это нормально?
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
15.12.2015, 19:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Сообщение от serb-radio
|
я замкнул Rx на Tx, так ж можно, как УАРТ или неправильная аналогия?
|
Абсолютно неправильная.
Снова приведу чужую цитату, чтобы не повторяться:
Сообщение от mrKirill
|
Для тестирования "на столе" вполне сгодятся Loop mode, Silent mode и их комбинация.
|
В этих режимах наружу ничего не передается, сигнал св ыхода внутри попадает на вход. Таким образом можно отладить некоторые процедуры. Но я не люблю эти режимы, предпочитаю работать с полноценными двумя и более платами. Рекомендую.
|
|
|
|
15.12.2015, 21:41
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Т.е., просто, к примеру две идентичных платы одна слушает другая шлет?
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
|
15.12.2015, 22:20
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.08.2010
Адрес: Днепр
Сообщений: 8,565
Сказал спасибо: 5,041
Сказали Спасибо 10,615 раз(а) в 3,604 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Сообщение от serb-radio
|
две идентичных платы
|
Ну, по поводу идентичности, платы могут быть какими угодно, лишь бы у обеих был CAN на борту.
Сообщение от serb-radio
|
одна слушает другая шлет?
|
Для начала, чтобы хотя бы одну отладить на передачу, второй плате не обязательно даже слушать. Вернее, ей не обязательно прислушиваться, что там ей пришло. Необходимо и достаточно выполнить следующие условия:
1. чтобы вторая плата была правильно подключена к линии связи (с соблюдением полярности)
2. чтобы на обеих платах были подключены параллельно линии терминаторы - резисторы по 120 Ом
3. Чтобы на обеих платах интерфейс CAN был настроен на одинаковую скорость.
|
|
|
|
17.12.2015, 15:08
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Выкладываю калькуляторы скорости и параметров регистров для конфига CAN. Может кому пригодится
__________________
То, что нас не убивает - делает нас сильнее
|
|
|
Сказали "Спасибо" serb-radio
|
|
|
26.01.2018, 15:12
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Кто сталкивался в КАНе с J1939. Есть ли примеры для STM? Гуглил, не нашел.
Как я понял, там меняется просто формат сообщения, ID с 11 битного на 21 битный, так? дфнные как было 8 байт, так и есть.
__________________
То, что нас не убивает - делает нас сильнее
Последний раз редактировалось serb-radio; 26.01.2018 в 15:30.
|
|
|
|
26.01.2018, 16:29
|
|
Модератор
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,258
Сказал спасибо: 11,170
Сказали Спасибо 3,859 раз(а) в 2,929 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
serb-radio, для начала протокол проприетарный. А так только по имеющимся открытым описаниям и на основе анализа потока на шине. Это уже сильно больше софт для диагностики, а реализация его (к железу совсем не привязана) возможна из исходников на чем угодно. Только вот исходники опять проприетарные. Замкнутый круг однако.
Можно попробовать поискать на github, svn,… а дальше уже перетаскивать под себя.
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
|
|
|
|
06.06.2018, 14:07
|
|
Гражданин KAZUS.RU
Регистрация: 01.01.2007
Адрес: Таганрог
Сообщений: 571
Сказал спасибо: 26
Сказали Спасибо 213 раз(а) в 91 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Доброго всем дня! Пытаюсь прерываться по приему CAN2. CAN1 отконфигурировал там прерывания нормально идут и на прием и на передачу. А вот с CAN2 проблема: прерывания по отправке работают, а по приему нет. Подскажите, что я делаю не так?
Конфиг:
void CAN2_TX_IRQHandler (void)
{
if (CAN_GetITStatus(CAN2,CAN_IT_TME))
{ // request completed mbx 0
CAN_ClearITPendingBit(CAN2,CAN_IT_TME);
led0_high;delay_ms(1);led0_low;delay_ms(1);
}
return;
}
void CAN2_RX0_IRQHandler (void)
{
led1_high;delay_ms(10);led1_low;delay_ms(10);
if (CAN_GetITStatus(CAN2,CAN_IT_FMP0))
{ // message pending
CAN_ClearITPendingBit(CAN2,CAN_IT_FF0);
CAN_Receive(CAN2,0,&can2RxMessage); // read the message
can1_transmit (can1RxMessage.StdId,can2RxMessage.DLC,can2RxMessa ge.Data );
}
return;
}
void CAN2_config(void)
{
CAN_InitTypeDef CAN_InitStructure;
CAN_FilterInitTypeDef CAN_FilterInitStructure;
GPIO_InitTypeDef GPIO_InitStructure;
//Tx
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13; //PB13=Tx;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; // Alt Function - Push Pull
GPIO_Init(GPIOB, &GPIO_InitStructure);
//Rx
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_12; //PB12=Rx;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; //
GPIO_Init(GPIOB, &GPIO_InitStructure);
/* CAN2 Periph clock enable */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN2, ENABLE);
// CAN_InitStructure.CAN_TTCM = DISABLE;
CAN_InitStructure.CAN_ABOM = ENABLE;
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;
// Fahb=24Mhz Baud=500kbit/s
CAN_InitStructure.CAN_SJW = CAN_SJW_1tq;
CAN_InitStructure.CAN_BS1 = CAN_BS1_13tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_2tq;
CAN_InitStructure.CAN_Prescaler = 3;
CAN_Init(CAN2, &CAN_InitStructure);
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 = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdHigh = 0x0000;
CAN_FilterInitStructure.CAN_FilterMaskIdLow = 0x0000;
CAN_FilterInitStructure.CAN_FilterFIFOAssignment = 0;
CAN_FilterInitStructure.CAN_FilterActivation = ENABLE;
CAN_FilterInit(&CAN_FilterInitStructure);
can2TxMessage.StdId = 0x321;
can2TxMessage.ExtId = 0x00;
can2TxMessage.RTR = CAN_RTR_DATA;
can2TxMessage.IDE = CAN_ID_STD;
can2TxMessage.DLC = 8;
CAN_ITConfig(CAN2, CAN_IT_FMP0, ENABLE);
CAN_ITConfig(CAN2, CAN_IT_FMP1, ENABLE);
CAN_ITConfig(CAN2, CAN_IT_TME, ENABLE);
NVIC_EnableIRQ (CAN2_RX0_IRQn);
NVIC_SetPriority(CAN2_RX0_IRQn, 3);
NVIC_EnableIRQ (CAN2_RX1_IRQn);
NVIC_SetPriority(CAN2_RX1_IRQn, 4);
NVIC_EnableIRQ (CAN2_TX_IRQn);
NVIC_SetPriority(CAN2_TX_IRQn, 4);
return;
}
__________________
То, что нас не убивает - делает нас сильнее
Последний раз редактировалось serb-radio; 06.06.2018 в 14:22.
|
|
|
|
06.06.2018, 16:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,643
Сказал спасибо: 117
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Сообщение от serb-radio
|
led0_high;delay_ms(1);led0_low;delay_ms(1);
|
Я надеюсь, это прикола ради добавлено?
Потому что целых 2миллисекунды сидеть в прерывании — это просто жесть какая-то!
// дальше не читал, т.к. без форматирования, да еще и не по-человечески, а на SPL, как-то в глазах рябит.
P.S. Блин, прерывание по Rx вообще 20мс сидит "само в себе"! Разве такое может вообще работать?
__________________
Если ты пользуешься Windows, то ты финансируешь мировой терроризм!
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:46.
|
|