STM Урок 99. HC-05. Master. Соединяем два МК. Часть 1



В уроке 97 мы научились настроенный в обзоре модуль HC-05 в режиме ведомого устройства подключать к ведущему устройству в виде смартфона. Также мы смогли передать данные в обоих направлениях в виде строк. Данные передаются весьма уверенно, поэтому мы можем смело продолжать продвигаться вперёд по данной теме.

В рамках сегодняшнего занятия мы попробуем настроить данный модуль в качестве ведущего устройства (Master), соединить его с таким же модулем, выступающем в роли ведомого устройства, оставив его подключенным к контроллеру STM32F103. Затем мы уже модуль, настроенный в качестве ведущего устройства, подключим к аналогичному микроконтроллеру и в результате этого два контроллера у нас соединятся без проводов по беспроводному интерфейсу Bluetooth. Также к данному контроллеру мы подключим символьный дисплей разрешением 20×4 через переходник к шине I2C для того, чтобы отслеживать данные, которые будут нам приходить от ведомого устройства.

Задача на первый взгляд кажется сложной, но это вовсе не так. Мы обязательно справимся и вы поймёте. что страшного в этом нет ничего абсолютно.

Для начала давайте возьмём ещё один модуль HC-05 и также, как и в обзоре, подключим его к переходнику USB-TTL, который в свою очередь подключим к ПК и запустим терминальную программу CoolTerm также настроенную, как в том же самом обзоре. и, прежде чем подключать его к контроллеру, настроим его в режиме ведущего устройства.

Первым делом переведём наш модуль в режим работы с командами AT. Затем проверим его, отправив команду

 

 

Адрес и имя нам данного модуля нам в принципе не потребуются. Нам главное знать адрес ведомого устройства, к которому мы будем подключать ведущее.

Далее идём по пунктам:

1) Для начала произведём сброс всех настроек при помощи команды «AT+ORGL«.

2) Произведём сброс всех спаренных устройств, введя в терминал команду «AT+RMAAD«.

3) Установим в модуле режим ведущего устройства — «AT+ROLE=1«.

4) Можно установить желаемую скорость USART, например 115200 — «AT+UART=115200,0,0«. Причём не обязательно, чтобы скорость была одинаковой на модулях, они между собой договорятся.

5) Перезагрузим модуль командой «AT+RESET«. и снова переведём в режим приёма AT-команд.

6) Установим пароль ведомого устройства «AT+PSWD=1234«.

7) Вспомним адрес ведомого устройства из занятия по обзору и свяжем ведущее устройство с ведомым по команде «AT+BIND=98d3,31,4058cf«. Если не помним или не знаем адрес ведомого устройства, то его можно узнать, также подключив к USART-переходнику и терминальной программе и затем введя универсальную команду. Но если мы не можем этого сделать, например, ведомое устройство у нас куда-то впаяно и мы его не можем подключить и испытать с помощью AT-команд, то есть альтернативные способы узнавания адреса.

8) Ещё раз перезагружаемся «AT+RESET» и уже можем не переводить устройство в режим приёма команд, а только организовать поддержку, соединив на короткое время ножку KEY к ножке питания. После этого не забываем сменить скорость в терминальной программе на ту, которую мы установили в 4 шаге.

9) Добавляем пару «AT+PAIR=98d3,31,4058cf,5» (терминал в этом случае скорее всего не ответит ОК) и на всякий случай ещё раз перезагружаемся.

Теперь контроллер, к которому подключено ведомое устройство можно включить, подав на него питание. Устройства должны будут соединиться и за счёт программы, которую мы написали в уроке 97, будут приходить соответствующие данные из ведомого контроллера в терминальную программу, к которой подключен с помощью переходника ведущий контроллер. Также мы теперь можем убрать эхо из настройки порта в терминальной программе и попробовать передавать удалённо строки из неё, так как эхо у нас, как вы помните, есть своё в программе контроллера ведомого устройства. И в результате мы увидим следующую картину

 

 

Отлично!

Мы соединили ведущий модуль с ведомым.

 

 

Следующая задача: соединить его с контроллером, чтобы потом связать два контроллера. Для этого мы возьмём подобную маленькую отладочную плату. У меня такой же на данный момент не нашлось, есть парочка плат NUCLEO-F303K8, одну из которых мы и возьмём. У контроллера, установленного на ней всего 32 ножки, но нам много и не потребуется. Хоть данная плата стоит и недёшево, но зато она очень удобная, так как не требует наличия программатора, который в ней уже есть и также не требует переходников USART, так как данный порт виртуализирован там прямо через ST-Link. Пока мы сразу модуль HC-05 к данной плате подключать не будем, а подключим мы к ней дисплей 20х4 через переходник I2C. С данным дисплеем мы очень много занимались, поэтому он нам знаком. К каким именно ножкам подключать дисплей, мы узнаем, когда будем создавать проект в Cube MX, к чему мы, собственно, сейчас и приступим.

Вы, конечно, можете применять любые платы и любые контроллеры, которые у вас есть в наличии, не обязательно такие, как я.

Запустим Cube MX, создадим новый проект и выберем контроллер

 

 

Включим кварцевый резонатор

 

 

Затем включим отладку через SWD

 

 

Включим USART1

 

 

Включим I2C для переходника дисплея

 

 

Причём ножку SCL мы в нём переопределим, так как ножка по умолчанию не выведена наружу и используется для порта сквозь ST-Link

 

 

Ножку PB3 установим на выход, так как на ней у нас светодиод

 

 

Clock Configuration настроим следующим образом (нажмите на картинку для увеличения изображения)

 

 

 

Переходим в Configuration и для начала настроим USART

 

 

Включим прерывания

 

 

В I2C ничего не трогаем.

А вот для USART в разделе NVIC изменим приоритет, иначе почему-то как только начиналась обработка прерываний от USART, I2C переставал работать

 

 

Настроим проект, немного добавив стека и кучи, также укажем путь и придумаем проекту имя, ну и выберем среду программирования

 

 

Сгенерируем проект, откроем его в Keil, настроим атоперезагрузку программатора, а также включим уровень оптимизации 1 и попробуем наш проект собрать.

Далее мы из проекта урока 22 I2CLCD80 возьмём файлы lcd.h и lcd.c и скопируем их в соответствующие папки нашего проекта.

Затем подключим к проекту файл lcd.c.

Откроем файл lcd.h и заменим там наименование подключаемой библиотеки HAL, а также подключим библиотеку для работы со строками

 

#include "stm32f3xx_hal.h"

#include <string.h>

 

Заодно немного поправим ошибки в комментариях

 

#define setled() LCD_WriteByteI2CLCD(portlcd|=0x08) //включение бита подсветки

#define setwrite() LCD_WriteByteI2CLCD(portlcd&=~0x02) //установка линии RW в 0

 

В файле lcd.c уберём объявление глобального строкового массива

 

extern I2C_HandleTypeDef hi2c1;

char str1[100];

 

Подключим в main.c библиотеку LCD

 

/* USER CODE BEGIN Includes */

#include "lcd.h"

/* USER CODE END Includes */

 

Добавим глобальный строковый массив

 

/* Private variables ---------------------------------------------------------*/

char str1[21];

/* USER CODE END PV */

 

Также проинициализируем и очистим дисплей в функции main() и запустим приём байта в шину USART

 

/* USER CODE BEGIN 2 */

LCD_ini();

LCD_Clear();

HAL_UART_Receive_IT(&huart1,(uint8_t*)str1,1);

 

Ну и затем проверим наш дисплей

 

HAL_UART_Receive_IT(&huart1,(uint8_t*)str1,1);

LCD_SetPos(0,0);

sprintf(str1,"String 1");

LCD_String(str1);

LCD_SetPos(4,1);

sprintf(str1,"String 2");

LCD_String(str1);

LCD_SetPos(8,2);

sprintf(str1,"String 3");

LCD_String(str1);

LCD_SetPos(12,3);

sprintf(str1,"String 4");

LCD_String(str1);

 

Давайте посмотрим расположение ножек на нашей отладочной плате, так как явно ножки портов не указаны — всё указано как в Arduino

 

 

Руководствуясь данным изображением, а также распиновкой в Cube MX, подключим наш дисплей к плате, соберём наш код, прошьём контроллер и посмотрим его работоспособность

 

 

Как мы видим — всё у нас работает.

 

В следующей части нашего занятия мы напишем некоторые функции по приёму строки из модуля и отправки их на дисплей и испытаем наш код на практике.

 

 

Предыдущий урок Программирование МК STM32 Следующая часть

 

 

Переходник USB to TTL можно приобрести здесь ftdi ft232rl

Модуль bluetooth HC-05 можно купить здесь bluetooth HC-05

Отладочную плату STM32F103C8T6 можно приобрести здесь STM32F103C8T6

Отладочную плату NUCLEO-F303K8 можно купить здесь NUCLEO-F303K8

Программатор недорогой можно купить здесь ST-Link V2

 

 

Смотреть ВИДЕОУРОК (нажмите на картинку)

 

STM HC-05. Master. Соединяем два МК

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*