# STM32WB55CGU6 Zigbee Master/Slave Keil Project

Проект для STM32WB55CGU6 в Keil MDK на базе официального CubeWB Zigbee-примера.

Основной Keil-файл:

```text
MDK-ARM/Zigbee_OnOff_Server_Coord.uvprojx
```

## Что реализовано

- Глобальная структура `g_app` хранит роль, состояние Zigbee, конфиг сети, кнопки и аналоговый канал.
- Роль можно переключать во время работы через `App_SetRole()` или аппаратный переключатель в `Hardware_ReadRoleSwitchIsMaster()`.
- Режим `slave` читает 3 кнопки и 1 аналоговый канал, фильтрует ADC и отправляет отчет через `ZigbeePort_SendSlaveInputs()`.
- Режим `master` отделен архитектурно: он должен открыть Zigbee-сеть и принимать отчеты slave в `zigbee_port.c`.
- ST `main.c`, `app_entry.c`, startup, scatter, HAL, BSP и `STM32_WPAN` взяты из `STM32Cube_FW_WB_V1.23.0`.

## Следующие аппаратные шаги

1. Проверить, что установлен `STM32Cube_FW_WB_V1.23.0`.
2. Открыть `MDK-ARM/Zigbee_OnOff_Server_Coord.uvprojx`.
3. В `App/hardware.c` назначить реальные пины роли, 3 кнопок и ADC.
4. В `App/zigbee_port.c` заменить текущий адаптер на реальные STM32_WPAN/Zigbee send/receive вызовы.
5. Для STM32WB55CGU6 проверить memory layout и package pinout, потому что ST-база взята от `P-NUCLEO-WB55.Nucleo`.

## Где менять поведение

- `App/app_config.h` - период отправки, endpoint, cluster id, роль по умолчанию.
- `App/app_types.h` - глобальные структуры.
- `App/slave_inputs.c` - debounce кнопок и фильтр ADC.
- `App/zigbee_app.c` - общая логика master/slave.
- `App/zigbee_port.c` - реальные Zigbee вызовы STM32WB.
