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

 
 
> Помогите разобраться с CANом в stm32
batisto4ka
сообщение May 7 2012, 08:13
Сообщение #1


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Помогите, опжалуйста, разобраться с CANом для stm32.

Постановка задачи следующая. Есть отладочная плата sk-mstm32f107 и самодельная плата на основе stm32f103vet. Роль первой платы - мастер, второй- слэйв. Пробую на основе исходников библиотеки StdPeriphLib написать программку, которая просто передаст хоть что-то на вторую платку. Не получается.
Согласно документации на отладочную плату на stm32f107:
CAN_TX1=GPIOD_1;
CAN_RX1=GPIOD_0;
Плата слэйва на stm32f103vet:
CAN_TX=GPIOA_12;
CAN_RX=GPIOA_11;
Прилагаю файлы 2 проектов с настройками CANов. Подскажите, что я не так делаю и почему не срабатывает прерывание у слэйва по получению данных.
P.S.(edited)
Внесла исправления. Добавила в функцию Init_GPIO_CAN проекта для мастера stm32f107 ремап:
Код
GPIO_PinRemapConfig(GPIO_Remap2_CAN1, ENABLE);

Но все равно прерывания по получению не срабатывают.

Сообщение отредактировал batisto4ka - May 7 2012, 10:30
Прикрепленные файлы
Прикрепленный файл  CAN_Testing.rar ( 49.4 килобайт ) Кол-во скачиваний: 65
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
lead_seller
сообщение May 7 2012, 11:55
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 27-10-08
Пользователь №: 41 225



1. Неплохо было бы увидеть принципиальные схемы обоих схемы.

2. Скорости большие - проверьте дальность проводов, и наличие терминирующих резисторов (ну или просто уменьшите скорости)

3. Запустите отправку пакета и посмотрите состояние CAN. Вас должен интересовать регистр ESR, а в нем поле LEC - в нем содержится код последней ошибки. Узнаете на чем конкретно валится передача от Мастера.

4. Гляньте осцилографом (а лучше лог.анализатором, у того же USBee есть расшифровка CAN), чего вообще творится на шине.

5. Банальное. Посмотрите на полярность проводов (CAN полярен) и одинаковые ли у вас микросхемы физического уровня.
Go to the top of the page
 
+Quote Post
batisto4ka
сообщение May 7 2012, 12:44
Сообщение #3


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Вопрос решен. Связь между платами утановлена. Проблемма была в перемычке на бутлоадер на отладочной плате мастера. По-этому, когда отключала программатор, плата после перезагрузки уходила в бут, а не на загрузку основной программы. Но осталась проблемма с платой приемника. Что-то мне кажется, не правильно настроены либо описаны прерывания у меня для stm32f103.Перифэралс Кан ресивер в Кейле при отладке показывает, что принят тот пакет, который отпрвлен мастером, НО прерывания не срабатывают.
Более того, прогрмма заходит на строчку 324 файла startup_stm32f10x_hd.s.
CODE
/*=========================================================================*/
void NVIC_CAN_Configuration(void)
{
NVIC_InitTypeDef NVIC_InitStructure;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
NVIC_InitStructure.NVIC_IRQChannel=USB_LP_CAN1_RX0_IRQn;//|USB_HP_CAN1_TX_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
/*==============================================================================*/
void USB_HP_CAN1_TX_IRQHandler (void)
{
if (CAN_GetITStatus(CAN1,CAN_IT_TME))
{ // request completed mbx 0
CAN_ClearITPendingBit(CAN1,CAN_IT_TME);
CAN_TxRdy++;
}
}
/*========================================================================*/
void USB_LP_CAN1_RX_IRQHandler (void)
{
if (CAN_GetITStatus(CAN1,CAN_IT_FMP0))
{ // message pending ?
CAN_Receive(CAN1,0,&RxMessage); // read the message
CAN_RxRdy++; // set receive flag
}
}
/*===========================================================================*/
int main (void)
{
__disable_irq ();
Init_CLK();
NVIC_CAN_Configuration();
Init_GPIO_CAN();
Init_CAN();

CAN_ITConfig(CAN1, CAN_IT_FMP0, ENABLE);
CAN_ITConfig(CAN1, CAN_IT_FF0, ENABLE);
CAN_ITConfig(CAN1, CAN_IT_FOV0, ENABLE);
__enable_irq ();
while (1)
{
}
}


Сообщение отредактировал IgorKossak - May 10 2012, 07:03
Причина редактирования: [codebox]
Go to the top of the page
 
+Quote Post
batisto4ka
сообщение May 10 2012, 06:08
Сообщение #4


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

Группа: Участник
Сообщений: 89
Регистрация: 3-01-11
Пользователь №: 61 997



Банальная невнимательность
void USB_LP_CAN1_RX0_IRQHandler (void)

Сообщение отредактировал batisto4ka - May 10 2012, 06:09
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- batisto4ka   Помогите разобраться с CANом в stm32   May 7 2012, 08:13
- - aba   Стандартной библиотекой не пользовался, сказать пр...   May 7 2012, 09:47
|- - batisto4ka   Цитата(aba @ May 7 2012, 13:47) Стандартн...   May 7 2012, 11:06
|- - batisto4ka   Подскажите, пожалуйста кто знает по фильтрам в CAN...   May 10 2012, 12:35
|- - vptr   Цитата(batisto4ka @ May 10 2012, 15:35) П...   May 11 2012, 09:18
|- - Danis   Здравствуйте, коллеги! На STM32F2 возникли за...   May 19 2012, 20:01
|- - PoReX   Да, кстати, если используется CAN2, то эти дефайны...   May 28 2012, 07:08
|- - Danis   Цитата(PoReX @ May 28 2012, 10:08) Да, кс...   May 28 2012, 07:51
|- - PoReX   Цитата(Danis @ May 28 2012, 11:51) Пример...   May 28 2012, 08:09
- - aba   это моя инициализация CANа, правда для STM32F2xx ...   May 7 2012, 11:56
- - lead_seller   CODE void CAN_Initialization (uint16_t speed) { ...   May 7 2012, 12:16
- - PoReX   Цитата(Danis @ May 20 2012, 00:01) Соедин...   May 28 2012, 05:38
- - Danis   Цитата(PoReX @ May 28 2012, 08:38) Для на...   May 28 2012, 06:21


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

 


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


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