Skip to content

Задача – сделать прием пакетов по BT (uart), распарсить их по формату, сформировать команду в другом формате и отправить в uart (9600). Использовать свободные ножки микроконтроллера на стенде.

License

Notifications You must be signed in to change notification settings

ITMO-lab/UART_message_transformer

Repository files navigation

UART_message_transformer

Как запускать?

Если у вас нет stm32 (в трёх разных окнах терминала) (для использования Serial порта самой stm32 используйте код с ветки USB_Serial):

  1. python3 python_prototype_socket/message_receiver.py
  2. python3 python_prototype_socket/programm.py
  3. python3 python_prototype_socket/message_sender.py

Если у вас есть stm32 (команды также в разных окнах терминала):

  1. Залейте код UART_message_transformer.ino в микроконтроллер (например, Nucleo-F031K4). В этом файле простейший пример использования либы. Да, она имеет максимально простой интерфейс.

  2. Настройте пины вывода, идущие к ble HM-10 (по умолчанию 2 и 3).

  3. python3 python_bluetooth_tester/bluetooth_and_socket_sender.py
  4. python3 python_bluetooth_tester/serial_receiver.py

    Опционально можно запустить этот же код на python для сравнения значений:

  5. python3 python_prototype_socket/programm.py

Видео тесты

https://vk.com/video252833211_456239726

Частота 1/3 Гц. Тест корректности работы.

https://vk.com/video252833211_456239725

Частота 100 Гц. Тест скорости работы.

Документация в формате Doxygen

https://github.com/d3dx13/UART_message_transformer/tree/main/doc/html

Задача

Задача – сделать прием пакетов по BT (uart), распарсить их по формату, сформировать команду в другом формате и отправить в uart (9600). Использовать свободные ножки микроконтроллера на стенде.

Шаг 1

От BT приходят посылки (массив байт) следующего формата: В пакете данных старший бит первого байта равен 1, во всех остальных байтах старший бит равен нулю.

Номер байта Описание
1 Маркер начала пакета данных, bit 7 = 1, bit 6 - 0 = Adr (Адрес модуля)
2 Циклический контрольный счетчик передаваемого пакета данных. Изменяется от 0 до 0x7F. Увеличивается на 1 при передаче каждого пакета данных. Для контроля потерь данных при передаче. Bit 7 = 0, bit 6 - 0 - counter++
3 Cтаршая часть номера команды. Bit 7 = 0, bit 6 - 0 – биты 13 – 7 команды
4 Младшая часть номера команды. Bit 7 = 0, bit 6 - 0 – биты 6 – 0 команды
5 Контрольная сумма XOR первых 4 байтов с обнуленным старшим битом:
bit 7 = 0, bit 6 – 0 = (byte0 ^ byte1 ^ byte2 ^ byte3) & 0x7F;
Шаг 2

На основе полученной посылки если контрольная сумма сошлась формируется другая посылка по следующему формату:

Номер байта Описание
1 0xFF
2 0x02
3 0x14
4 Команда, полученная по BT. Младший байт.
5 Контрольная сумма первых 4 байт. Алгоритм приведен ниже.

Функция расчета CRC:

char crc(unsigned char *pcBlock, int len)
{
    unsigned char crc = 0xFF;
    unsigned int i;
    while (len--)
    {
        crc ^= *pcBlock++;
        for (i = 0; i < 8; i++) crc = crc & 0x80 ? (crc << 1) ^ 0x31 : crc << 1;
    }
    return crc;
}

Полученный массив из 5 байт необходимо отправить по Uart порту 3 раза с промежутком 100мс.

Шаг 3

Если полученная посылка по BT прошла контрольную сумму - сделать отправку этого же пакета обратно по BT. Создать эхо.

About

Задача – сделать прием пакетов по BT (uart), распарсить их по формату, сформировать команду в другом формате и отправить в uart (9600). Использовать свободные ножки микроконтроллера на стенде.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages