feat(can-sensor): add STM32F1 bxCAN port
This commit is contained in:
@@ -20,6 +20,7 @@
|
||||
| Файл | Что делает | Зависимости |
|
||||
|---|---|---|
|
||||
| `can_sensor.h`, `can_sensor.c` | сборка и разбор SETTINGS, повторы передачи, счётчики обмена | `stdint.h` |
|
||||
| `ports/stm32f1/` | опросный порт CAN1: GPIO, BTR, фильтр, mailbox/FIFO, тайм-аут ACK | CMSIS `stm32f10x.h` |
|
||||
|
||||
`ZZ` — номер сборки, `YY` — позиция. Нулевой ROM с DLC=8 очищает локацию.
|
||||
|
||||
@@ -47,6 +48,30 @@ CanSensor_Message message;
|
||||
if (CanSensor_Poll(&link, &message)) { /* принят идентификатор */ }
|
||||
```
|
||||
|
||||
## Порт STM32F1
|
||||
|
||||
Порт не использует STM32 HAL и не занимает прерывания. Скопируйте
|
||||
`ports/stm32f1/can_sensor_stm32f1_config.f103.template.h` в приложение под
|
||||
именем `can_sensor_stm32f1_config.h`, добавьте `ports/stm32f1` в include path и
|
||||
соберите `can_sensor_stm32f1.c` вместе с ядром:
|
||||
|
||||
```c
|
||||
CanSensorStm32F1_Port bxcan = {0};
|
||||
CanSensor_Io io;
|
||||
|
||||
CanSensorStm32F1_Start(&bxcan, 500000U, 0x17F00000UL, 0x1FF00000UL, 0U);
|
||||
io = CanSensorStm32F1_MakeIo(&bxcan);
|
||||
CanSensor_Init(&link, &io, &config);
|
||||
|
||||
/* Из главного цикла: */
|
||||
CanSensorStm32F1_Task(&bxcan, now_ms, 20U);
|
||||
```
|
||||
|
||||
Фильтр порта принимает только Extended data-кадры. Маска задаётся приложением:
|
||||
можно пропустить только SETTINGS либо оставить открытым `MsgType` для соседних
|
||||
команд того же узла. `CanSensorStm32F1_Receive()` доступна отдельно, если перед
|
||||
`CanSensor_HandleFrame()` приложению нужно разобрать такие команды самому.
|
||||
|
||||
## Проверено в проектах
|
||||
|
||||
`KONOR_ds18b20` — bxCAN на STM32F103C8T6. Естественная пара — [`ds18b20`](../ds18b20):
|
||||
|
||||
Reference in New Issue
Block a user