53 lines
3.5 KiB
Markdown
53 lines
3.5 KiB
Markdown
# STM32F407 / STM32F4 HAL
|
||
|
||
Порт UART для `ds2480.c`. Платформа настраивает тактирование и GPIO, порт
|
||
формирует BREAK через TX GPIO, восстанавливает UART 9600 8N1 и проверяет
|
||
ошибки приёма. DMA и обработчики UART-прерываний не нужны. HAL tick должен
|
||
работать; вызывать из прерывания или при запрещённых прерываниях нельзя.
|
||
|
||
```c
|
||
ds2480 bridge;
|
||
ds2480_port io;
|
||
ds2480_stm32f4_hal platform = {&huart6, GPIOC, GPIO_PIN_6, GPIO_AF8_USART6};
|
||
/* Before this point: enable GPIOC/USART6 clocks, configure PC6/PC7 as AF8. */
|
||
if (ds2480_stm32f4_hal_bind(&platform, &io) != DS2480_OK) return;
|
||
if (ds2480_init(&bridge, &io, 20) != DS2480_OK) return;
|
||
```
|
||
|
||
В сборку добавляются `ds2480_stm32f4_hal.c`, ядро библиотеки, путь к этому
|
||
каталогу и STM32F4 HAL/CMSIS. UART выделяется только для моста. Порт принимает
|
||
по одному байту за операцию: ответ сохраняется в DR во время завершения TX,
|
||
затем читается без сброса RX. FE/NE/ORE/PE означают ошибку обмена даже при RXNE.
|
||
|
||
## Подключение в climate F407VET6
|
||
|
||
| STM32 / питание | DS2480B |
|
||
|---|---|
|
||
| PC6, USART6_TX | TXD, вывод 7 (вход моста) |
|
||
| PC7, USART6_RX | RXD, вывод 8 (выход моста) |
|
||
| Общая земля | GND, вывод 1 |
|
||
| +5 В | VDD, вывод 4; VPP, вывод 5; POL, вывод 6 |
|
||
| DQ датчиков DS18B20 | 1-W, вывод 2 |
|
||
|
||
DS2480B работает от 5 В. Проверьте согласование логических уровней по
|
||
электрическим характеристикам конкретной платы/модуля; не считайте питание
|
||
DS2480B от 3,3 В допустимым. Для внешнего питания DS18B20 подключите VDD;
|
||
при паразитном питании VDD датчика соединяется с GND. В обоих случаях общий GND.
|
||
|
||
PC6/PC7 выбраны в `climate` (AF8). UART1/2 используются Modbus, SDIO использует
|
||
4-битную шину PC8..PC12/PD2. Пины для другой платы задаются её приложением.
|
||
|
||
## Неблокирующее питание датчиков
|
||
|
||
`ds2480_power_begin` посылает команду датчика с strong pullup на последнем
|
||
слоте. Приложение возвращается в главный цикл, отсчитывает 750 мс для
|
||
преобразования либо минимум 10 мс для EEPROM, затем вызывает
|
||
`ds2480_power_end`. До завершения импульса остальной обмен возвращает BUSY.
|
||
При отмене вызывайте `power_end`, при потере синхронизации — `ds2480_init`.
|
||
|
||
Используется в `climate_control_f407vet6_f4`: `ds2480_app.c` связывает порт
|
||
из сабмодуля с существующим каталогом датчиков и диагностикой Modbus.
|
||
|
||
Источники: [STM32F407, таблица alternate functions](https://www.st.com/resource/en/datasheet/stm32f407ve.pdf),
|
||
[DS2480B, выводы и UART](https://www.analog.com/media/en/technical-documentation/data-sheets/ds2480b.pdf).
|