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

 
 
> Правильная инициализация CAN в STM32F103, Как правильно инициализировать и потом менять скорость
LEXIS
сообщение Feb 23 2015, 08:18
Сообщение #1


Участник
*

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



Есть контроллер STM32F103C6, инициализирую CAN модуль на скорость 500 кб/с. На этой скорости работает. Потом по CAN шине приходит команда на смену скорости - меняю, например, на 600 кб/с. - не работает, хотя если принудительно задать эту скорость изначально - то работает. Как правильно надо менять скорость во время работы.
Функция настройки скорости ниже (опущена инициализация портов, фильтров и прерываний):
CODE

void CAN_Config(unsigned int bitrate)//Kbit/sec
{
char BitTimeCAN=0;

CAN_DeInit(CANx);
CAN_StructInit(&CAN_InitStructure);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_CAN1, ENABLE);

/* 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 Baudrate */
// SetSpeed (bitrate/1000);
switch (bitrate)
{
case 1000: BitTimeCAN = 0;break;
case 950: BitTimeCAN = 1;break;
case 900: BitTimeCAN = 2;break;
case 850: BitTimeCAN = 3;break;
case 800: BitTimeCAN = 4;break;
case 750: BitTimeCAN = 5;break;
case 700: BitTimeCAN = 6;break;
case 650: BitTimeCAN = 7;break;
case 600: BitTimeCAN = 8;break;
case 550: BitTimeCAN = 9;break;
case 500: BitTimeCAN = 10;break;
case 450: BitTimeCAN = 11;break;
case 400: BitTimeCAN = 12;break;
case 350: BitTimeCAN = 13;break;
case 300: BitTimeCAN = 14;break;
case 250: BitTimeCAN = 15;break;
case 200: BitTimeCAN = 16;break;
case 150: BitTimeCAN = 17;break;
case 125: BitTimeCAN = 18;break;
case 100: BitTimeCAN = 19;break;
case 50: BitTimeCAN = 20;break;
case 10: BitTimeCAN = 21;break;
}

CAN_InitStructure.CAN_SJW = CAN_BTR[BitTimeCAN][0];
CAN_InitStructure.CAN_BS1 = CAN_BTR[BitTimeCAN][1];
CAN_InitStructure.CAN_BS2 = CAN_BTR[BitTimeCAN][2];
CAN_InitStructure.CAN_Prescaler = CAN_BTR[BitTimeCAN][3];
CAN_Init(CANx, &CAN_InitStructure);

}


Именно эта функция вызывает смену скорости.
Go to the top of the page
 
+Quote Post



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

 


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


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