пятница, 30 марта 2012 г.

CAN bittiming

BitTiming = 1 / NominalBitTime;

NominalBitTime = tq + tBS1 + tBS2;
tq = tPCLK * Prescaler;

STM32F1xx tPCLK = 1 / 36 MHz
STM32F20x tPCLK = 1 / 30 MHz
STM32F40x tPCLK = 1 / 42 MHz


Например, требуется шина частотой 250KHz (NominalBitTime = 4).

Для STM32F1xx:
4 = (1/36) * Prescaler * (1 + tBS1 + tBS2);
Prescaler = 8 (с потолка);
4 = (1/36) * 8 * (tq + tBS1 + tBS2);
1 + tBS1 + tBS2 = 1152;
1152 кратно 16, тогда пусть tBS1 = 11, tBS2 = 4;

Итого:
Prescaler = 8;
tBS1 = 11;
tBS2 = 4;

Для STM32F2xx:
4 = (1/30) * Prescaler * (1 + tBS1 + tBS2);
Prescaler = 8 (опять с потолка);
4 = (1/30) * 8 * (tq + tBS1 + tBS2);
1 + tBS1 + tBS2 = 960;
960 кратно 15, тогда пусть tBS1 = 10, tBS2 = 4;


Комментариев нет:

Отправить комментарий