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

 
 
> libopencm3 + stm32f4 + CAN, CAN на забытой всеми библиотеке
Ekka
сообщение May 29 2018, 13:21
Сообщение #1


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

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



Привет всем!

Ребята, помогите, пожалуйста разобраться, что не так.
Пытаюсь запустить CAN в нормальном режиме ( в loopback работает)
на stm32f4 в среде CodeBlock на библиотеке libopencm3 (ибо именно оно и надо - хотя оч ненависто)

После того, как использует все ящики - зависает.
Почему данные не уходят из почтовых ящиков?
Второе устройство на шине имеется.
Может я не сбрасываю какой-то флаг? Или неправильно настройки?

Инициализация
CODE
uint32_t _canConfig(uint32_t bitrate)
{
int prescaler = 0;
switch(bitrate)
{
case 500:
prescaler = 2; //500kb/s=2000ns
break;

case 250:
prescaler = 4; //250kb/s=4000ns
break;

case 125:
prescaler = 8; //125kb/s=8000ns
break;

case 100:
prescaler = 10; //100kb/s=10000ns
break;

case 50:
prescaler = 20; //50kb/s=20000ns
break;

case 20:
prescaler = 50; //20kb/s=50000ns
break;

case 10:
prescaler = 100; //10kb/s=100000ns
break;

default:
prescaler = 2; //500kb/s=2000ns
break;

}

//CANRX поставлено nopull по аналогии с халом
rcc_periph_clock_enable(CAN_RX_PERIPH);
gpio_mode_setup(CAN_RX_PORT, GPIO_MODE_INPUT, GPIO_PUPD_NONE, CAN_RX_PIN);
gpio_set(CAN_RX_PORT, CAN_RX_PIN);

//CANTX
rcc_periph_clock_enable(CAN_TX_PERIPH);
gpio_mode_setup(CAN_TX_PORT, GPIO_MODE_AF|GPIO_OSPEED_50MHZ, GPIO_OTYPE_PP, CAN_TX_PIN);

//CANmodul
rcc_periph_clock_enable(CAN_PERIPH);
nvic_enable_irq(NVIC_CAN1_RX0_IRQ);
nvic_set_priority(NVIC_CAN1_RX0_IRQ, 1);

can_reset(CAN_NUM);
if(can_init(CAN1,
false, //TTCM: Time triggered comm mode?
false, //ABOM: Automatic bus-off management?
false, //AWUM: Automatic wakeup mode?
false, //NART: No automatic retransmission?
false, //RFLM: Receive FIFO locked mode?
false, //TXFP: Transmit FIFO priority?
CAN_BTR_SJW_1TQ,
CAN_BTR_TS1_9TQ,
CAN_BTR_TS2_6TQ,
prescaler, //BRP+1: Baud rate prescaler
false, //LOOPBACK?
false) == 1) //SILENT?
{
return 1;
}

//CAN filter 0 init
can_filter_id_mask_32bit_init(
0, // Filter ID - принимать все
0, // CAN ID
0, // CAN ID mask
0, // FIFO assignment (here: FIFO0)
true); // Enable the filter

//Enable CAN RX interrupt
can_enable_irq(CAN1, CAN_IER_FMPIE0);


Прерывание на получение данных мне пока не нужно, но вот
Код
void can1_rx0_isr(void)
{
    can_fifo_release(CAN1, 0);
}


и в мейне отправка по-тупому
Код
while (1)
    {
        time++;
        if(time>1000000)
        {
            can_transmit(CAN1, 0x00, 0, 0,8, datat);
            time=0;
        }


В чем может быть проблема? Эта libopen... такая гадость... понимаю, что кейл+куб лучше
да я и не против. Но задача стоит именно на этих средствах сделать.
ХЕЛП

Сообщение отредактировал IgorKossak - May 29 2018, 18:46
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
yes
сообщение May 31 2018, 13:19
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 198
Регистрация: 23-12-04
Пользователь №: 1 640



EWG, EVP и BOF - это уже следствия ошибок - то есть многократные попытки автомата по передаче сообщения были неуспешными.
нужно в первом прерывании по ошибке смотреть LEC - там будет код ошибки

еще раз обращу внимание - второе устройство у вас подключено? CAN не работает "в одиночку", не сможет передать сообщение, если нет второго CAN-а на шине. если второе есть, то нужно смотреть, что тактовые частоты и битовые интервалы правильно настроены на обоих устройствах - у меня например это самая частая причина неустановления связи
Go to the top of the page
 
+Quote Post
Ekka
сообщение Jun 7 2018, 11:27
Сообщение #3


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

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



Пытаюсь настроить устройства одинаково.

stm32f4 CAN настроен на 500 кбит/сек
stm32f1 тоже. Ниже привожу настройки. Но почему-то, как только пытаюсь с f4 что-то отправить или получить - вылетает в ошибки.
f1 себя чувствует хорошо и не выпендривается.

Что я делаю не так?

Настройки кана у обоих stm-к одинаковы

Вылетаю в ошибку FOR, по ней читаю что-то вроде, "Некоторые части CAN-сообщения имеют одинаковое значение во всех типах сообщений. Т.е. протокол CAN точно определяет какие уровни напряжения и когда должны появляться на шине. Если формат сообщений нарушается, то узлы генерируют ошибку Form Error". Немного не въезжаю... Где и что и ПОчему формат сообщения нарушен.

Сообщение отредактировал Ekka - Jun 7 2018, 11:31
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Ekka
сообщение Jun 7 2018, 13:20
Сообщение #4


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

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



Как можно избавиться от этой ошибки? С чем может быть такое связано?
две stm32f1 нормально общаются. Стоит подключить f4 с такими же настройками, как она вылетает в ошибки.



везде пишут, что это за ошибка, а как от нее отделаться не пишут( crying.gif


Может я сообщение не правильно формирую...О_О

Код
CanTxMsgTypeDef tx;
tx.StdId = 0xFF;
tx.ExtId = 0xFF;
tx.RTR = CAN_RTR_DATA;
tx.IDE = CAN_ID_STD;
tx.DLC = 2;
tx.Data[0] = 'C';
tx.Dаta[1] = 'A';
hcan1.pTxMsg = &tx;

Go to the top of the page
 
+Quote Post
k155la3
сообщение Jun 9 2018, 05:07
Сообщение #5


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

Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848



Цитата(Ekka @ Jun 7 2018, 16:20) *
. . . две stm32f1 нормально общаются. Стоит подключить f4 с такими же настройками, как она вылетает в ошибки. . . .
Зря игнорируете рекомендацию посмотреть что на линиях осцилографом. Какие трансиверы используются, схема-номиналы выходных цепей.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ekka   libopencm3 + stm32f4 + CAN   May 29 2018, 13:21
- - RadiatoR   Почему RX pin устанавливается как GPIO_MODE_INPUT?...   May 29 2018, 13:44
|- - Ekka   Цитата(RadiatoR @ May 29 2018, 14:44) По...   May 29 2018, 13:51
- - RadiatoR   Вообще странно. Я, конечно, не пользуюсь HAL и ope...   May 29 2018, 14:00
- - Эдди   ТС, почитайте даташит или хотя бы примеры opencm3...   May 29 2018, 16:50
|- - Ekka   Цитата(Эдди @ May 29 2018, 17:50) ТС, поч...   May 30 2018, 12:49
- - yes   сообщения не отправляются. вопрос - а есть на шине...   May 30 2018, 13:00
- - k155la3   ну, и, конечно извиняюсь, проверить как проводки п...   May 30 2018, 13:24
|- - Ekka   Цитата(k155la3 @ May 30 2018, 14:24) ну, ...   May 31 2018, 05:36
|- - Ekka   Ребята, читаю про ошибки Кана. Не пойму ошибку Stu...   May 31 2018, 12:31
- - esaulenka   https://www.kvaser.com/about-can/the-can-pr...erro...   May 31 2018, 12:49
|- - esaulenka   на F407 действительно стоит кварц частотой 26 МГц?   Jun 8 2018, 13:04
- - yes   если есть возможность, хорошо бы посмотреть осцилл...   Jun 7 2018, 15:44
|- - Ekka   Цитата(yes @ Jun 7 2018, 15:44) если есть...   Jun 9 2018, 09:15
|- - Ekka   Сигнал на ногц RX у stm32f4 приходит такой, как н...   Jun 9 2018, 11:28
- - esaulenka   Ну и что толку с этих картиночек? Вы их самостояте...   Jun 11 2018, 08:51
|- - Ekka   Все запустилось, проблема была в том, что вывод RS...   Jun 12 2018, 06:41
|- - Ekka   мда... в кейле-то оно на хале шпарит без проблем, ...   Jun 12 2018, 08:54
|- - k155la3   Цитата(Ekka @ Jun 12 2018, 09:41) Все зап...   Jun 13 2018, 10:04
- - esaulenka   Ложит и ложит, хад такой... Очередной бесценный ...   Jun 13 2018, 07:20
|- - Ekka   Похоже, была ошибка в том, что скорость у приемник...   Jun 13 2018, 12:37
- - k155la3   Не полагайтесь на всякие "железобетонные...   Jun 13 2018, 17:33


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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 21:38
Рейтинг@Mail.ru


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