08.09.2011, 20:29
|
|
Временная регистрация
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Кто-нибудь запустил CAN на STM32 ???
Собственно суть вопроса:
- есть STM32 VL DISCOVERY в который был впаян 32F105RC, прикрутил к нему ч/б дисплей от нокии, запустил УСАРТ, теперь дело до CANа дошло..
- запустил из STM библиотеки пример с 2-мя CAN. Когда они работаю друг на друга - все отлично! (передают, принимают). Но когда дель дошло до подключению к сторонним устройствам они друг друга не видят..
Начал разбираться, не одинаковый период пакета данных. Смотрю анализатором, пробую разные варианты BS1, BS2 и пресколера. все равно не могу добиться правильной длины пакета. Нашел небольшую П/п-му вычисляющую эти коэффициенты, тоже не помогло.
В нете гуляет еще экселевская таблица для вычисления- результат тот же.
Может натолкнет кто, куда копать...
Да, кварц 8 МГц, пробовал менять. Частота проца 72. Пробовал на разных скоростях CAN (бывает мой сниффер отлавливает на 250Кб иногда). По приему не видел ни разу.
Если надо могу проект (или нужную часть) выложить.
Пользуюсь ИАР 6.10.1.52143
|
|
|
|
08.09.2011, 23:00
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Я делал SAE J1939. 250 кбит. Времени было мало реализовывал на их либах. Всё работало. Но с CANом разбирался плотно. Лазил и в регистры - там вроде ничего сложного не нашёл. Он мне наоборот понравился. Я делал на 107 - но там то же самое. Единственное второй канал не проверял. Руки не дошли.
Кварц нужен действительно 8 с 16 не делится нормально...
|
|
|
|
09.09.2011, 12:03
|
|
Временная регистрация
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Цитата:
|
Кварц нужен действительно 8 с 16 не делится нормально...
Вчера 19:29
|
Вот тут я думаю как раз наоборот....
Я до этого на MCP2551 все делал, там кварц 16, коэфф. легко расчитываются и работают 100%..
А 72 не кратно 16ти, вот копаю сейчас поменять частоту на кратную 16
|
|
|
|
09.09.2011, 13:25
|
|
Прописка
Регистрация: 09.11.2010
Сообщений: 102
Сказал спасибо: 4
Сказали Спасибо 28 раз(а) в 22 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Сообщение от Pavlike
|
Может натолкнет кто, куда копать...
Да, кварц 8 МГц, пробовал менять. Частота проца 72.
|
Я делал. На 103, но вроде у них модули одинаковые.
http://www.reaa.ru/cgi-bin/yabb/YaBB...111077/281#281
Все чирикает нормально, связывается со всеми в сети (STM8S208, ATMEGA168+MCP2515 и, иногда, USB-CAN переходник от IXXAT)
Вот инициализация. Делал тоже через библиотеки. Кварц 8МГц, тактовая 72МГц.
Код:
|
//îïðåäåëåíèå ïèíîâ
//CAN
#define RCC_APB2Periph_GPIO_CAN RCC_APB2Periph_GPIOB
#define GPIO_Remap_CAN GPIO_Remap1_CAN1
#define GPIO_CAN GPIOB
#define GPIO_Pin_CAN_RX GPIO_Pin_8
#define GPIO_Pin_CAN_TX GPIO_Pin_9
void AI23_CAN_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
CAN_InitTypeDef CAN_InitStructure;
/* GPIO clock enable */
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO |RCC_APB2Periph_GPIO_CAN, ENABLE);
/* Configure CAN pin: RX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CAN_RX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_Init(GPIO_CAN, &GPIO_InitStructure);
/* Configure CAN pin: TX */
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_CAN_TX;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIO_CAN, &GPIO_InitStructure);
GPIO_PinRemapConfig(GPIO_Remap_CAN , ENABLE);
/* CAN1 Periph clock enable */
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_InitStructure.CAN_BS1 = CAN_BS1_3tq;
CAN_InitStructure.CAN_BS2 = CAN_BS2_5tq;
CAN_InitStructure.CAN_Prescaler = 16;//250 kbps
CAN_Init(CAN1, &CAN_InitStructure);
/* CAN filter init */
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);
} |
|
|
|
Сказали "Спасибо" Serega_B
|
|
|
09.09.2011, 14:13
|
|
Временная регистрация
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Поставил Вашы коэфф-ы, длинна пакета получается в 3 раза больше нужной...
Не могли бы Вы привести инициализацию RCC ?
Видать грабли с установкой частоты камня...
|
|
|
|
09.09.2011, 16:18
|
|
Прописка
Регистрация: 09.11.2010
Сообщений: 102
Сказал спасибо: 4
Сказали Спасибо 28 раз(а) в 22 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Сообщение от Pavlike
|
Не могли бы Вы привести инициализацию RCC ?
|
В компиляторе ИАРа в определяемых символах:
STM32F10X_MD
USE_STDPERIPH_DRIVER
Все остальное - в функции SetSysClockTo72 из system_stm32f10x.c подставилось само.
|
|
|
|
09.09.2011, 19:05
|
|
Временная регистрация
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Да вроде все так и есть... Только никак...
Пробовал только что еще пример, так в 3 раза медленнее, пресколер уменьшил в 3 раза, почти... но в 10 мкс разница и не видят друг друга.
А SJW в формировании кадра не участвует? Я смотрю везде 1 стоит?
|
|
|
|
12.09.2011, 09:20
|
|
Прописка
Регистрация: 09.11.2010
Сообщений: 102
Сказал спасибо: 4
Сказали Спасибо 28 раз(а) в 22 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Сообщение от Pavlike
|
А SJW в формировании кадра не участвует? Я смотрю везде 1 стоит?
|
Нет, впрямую не участвует. Определяет, насколько может скакать длительность бита при синхронизации.
SJW[1:0]: Resynchronization jump width
These bits define the maximum number of time quanta the CAN hardware is allowed to
lengthen or shorten a bit to perform the resynchronization.
Когда-то, очень давно, где-то прочитал, что при кварцованых генераторах SJW=1 - в самый раз. С тех пор везде и всегда - 1.
|
|
|
Сказали "Спасибо" Serega_B
|
|
|
12.09.2011, 10:36
|
|
Гражданин KAZUS.RU
Регистрация: 04.08.2006
Сообщений: 911
Сказал спасибо: 28
Сказали Спасибо 180 раз(а) в 139 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Pavlike, попробую сегодня вечером свою инициализацию кинуть ... Если не забуду ...
|
|
|
Сказали "Спасибо" SasaVitebsk
|
|
|
12.09.2011, 14:41
|
|
Временная регистрация
Регистрация: 16.05.2005
Адрес: Киев
Сообщений: 58
Сказал спасибо: 38
Сказали Спасибо 4 раз(а) в 4 сообщении(ях)
|
Re: Кто-нибудь запустил CAN на STM32 ???
Выяснил интересную вещь... если вынуть кварц вообще - девайс переключается на внутренний генератор и тогда время совпадает!
Отсюда вопрос - почему от кварца не работает???
Я думаю еще попробовать кварц не 8МГц а 16, но пока не разобрался где править настройки внешнего генератора...
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 08:05.
|
|