# Пины МК

Документ составлен по прошивке:

- `..\new rev\john103C8T6\john103C6T6.ioc`
- `..\new rev\john103C8T6\Core\Inc\main.h`
- `..\new rev\john103C8T6\Core\Src\gpio.c`
- `..\new rev\john103C8T6\Core\Src\usart.c`
- `..\new rev\john103C8T6\Core\Src\can.c`
- `..\new rev\john103C8T6\Core\Src\i2c.c`
- `..\new rev\john103C8T6\Core\Src\spi.c`
- `..\new rev\john103C8T6\Core\Inc\ow_port.h`

МК: `STM32F103C8Tx`, корпус `LQFP48`.

## Основные интерфейсы

| Пин МК | Функция | Настройка | Назначение в проекте |
|---|---|---|---|
| `PB6` | `USART1_TX` | AF push-pull, remap USART1 | Modbus RTU slave TX |
| `PB7` | `USART1_RX` | input, no pull, remap USART1 | Modbus RTU slave RX |
| `PA2` | `USART2_TX` | AF push-pull | Modbus RTU master TX |
| `PA3` | `USART2_RX` | input, no pull | Modbus RTU master RX |
| `PA15` | `One_wire` | GPIO, динамически input/output | Шина 1-Wire для DS18B20 |
| `PA10` | `Relay_dc5v` | GPIO output push-pull | Реле 5 В, управляется из Modbus coil `20` |
| `PC13` | GPIO output | push-pull | Светодиод/индикация, используется в `led_blink()` |
| `PA0` | GPIO input | no pull | Вход, назначение в коде не найдено |
| `PA11` | `CAN_RX` | input | CAN RX |
| `PA12` | `CAN_TX` | AF push-pull | CAN TX |
| `PB8` | `I2C1_SCL` | AF open-drain, remap I2C1 | I2C1 SCL |
| `PB9` | `I2C1_SDA` | AF open-drain, remap I2C1 | I2C1 SDA |
| `PB3` | `SPI1_SCK` | AF push-pull, remap SPI1 | SPI1 SCK |
| `PB4` | `SPI1_MISO` | input, no pull, remap SPI1 | SPI1 MISO |
| `PB5` | `SPI1_MOSI` | AF push-pull, remap SPI1 | SPI1 MOSI |
| `PA13` | `SWDIO` | Serial Wire | Отладка |
| `PA14` | `SWCLK` | Serial Wire | Отладка |
| `PD0` | `OSC_IN` | HSE oscillator | Внешний кварц |
| `PD1` | `OSC_OUT` | HSE oscillator | Внешний кварц |

## GPIO output, сконфигурированные в `MX_GPIO_Init`

| Пин МК | Начальное состояние | Комментарий |
|---|---:|---|
| `PC13` | `RESET` | Индикация, мигает при старте через `led_blink(GPIOC, 13, ...)` |
| `PA1` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PA4` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PA5` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PA6` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PA7` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PA8` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PA9` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PA10` | `RESET` | `Relay_dc5v`, в цикле main зависит от `MB_DATA.Coils.coils[1].state_val_bit.state_val_05` |
| `PA15` | `RESET` | 1-Wire, затем драйвер меняет режим пина input/output |
| `PB0` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PB1` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PB2` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PB10` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PB11` | `RESET` | Есть macro `GPIOB11_valve`, но прямой записи в `PB11` в текущем коде не найдено |
| `PB12` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PB13` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PB14` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |
| `PB15` | `RESET` | Выход сконфигурирован, активного использования в коде не найдено |

## Периферия без внешнего пина

| Периферия | Настройка | Назначение |
|---|---|---|
| `TIM1` | internal clock, period `65535`, prescaler `0` | Тайминги 1-Wire, `OW_TIM` |
| `TIM2` | internal clock, period `65535`, prescaler `7199` | Таймер Modbus slave |
| `TIM4` | internal clock, period `65535`, prescaler `7199` | Таймер Modbus master |
| `ADC1` | `ADC_CHANNEL_VREFINT` | Внутренний Vref, внешних ADC-пинов нет |
| `RTC` | LSI | Часы, доступны через Modbus-регистры |

## Замечания

- В `.ioc` пины `PA2/PA3` отмечены как GPIO output, но в актуальном `usart.c` они инициализируются как `USART2_TX/RX`. Для документации использована фактическая инициализация из исходников.
- Функция `handle_valves()` содержит запись в `GPIOC` pin `14`, но `PC14` не инициализирован в `MX_GPIO_Init()` и сама функция в основном цикле закомментирована.
- Для RS-485 direction control (`DE/RE`) отдельный GPIO в `modbus_config.h` не задан: `RS_EnableReceive()` и `RS_EnableTransmit()` закомментированы.
