STM32 - GSM
Здравствуйте.
Пример для работы
Всё тестировалось на стареньком модуле SIM900, думаю и на SIM800 будет работать, но не гарантирую. Пример сделан для платы BluePill (F103C8).
Пример использует два USART'а №1 и №3, к первому нужно подключить модуль, а третий соединить с компьютером через USB to TTL конвертер для вывода отладочных сообщений и отправки команд модулю через терминал (скорость 57600).
Если у вас BluePill, то можно просто прошить пример. Если плата другая, то нужно создать проект (предполагается что он создаётся в Cube), активировать оба USART'а (1 и 3) и включить у них прерывания. В принципе этого достаточно для работы, но у меня сделано ещё так, чтоб раз в секунду запрашивать у модуля время (просто для наглядности), поэтому настройте ещё таймер №4 на ежесекундное переполнение и опять же включите прерывание…
Для 72мГц.
Активируйте какой-нибудь пин как Output и назовите его
К этому пину нужно подключить светик, который будет сигнализировать об ошибке. Удобнее всего использовать PC13, но у меня он перегорел, поэтому я задействовал PA7.
Добавьте в проект файлы
В файле
Из
Подключайте все проводочки и прошивайте — после старта, программа выяснит текущую скорость UART'а модуля, выведет её в терминал, и автоматически настроит скорость 57600. То есть никаких подготовительных действий с модулем не требуется.
После этого будет произведена настройка модуля с выводом подтверждения об успешных действиях, и некоторая информация…
Описание команд в файле
В начале программы делается небольшая пауза чтоб модуль успел инициализироваться если он отключается/включается вместе с ресетом платы. В примере указано 5 сек, можно попробовать уменьшить, главное чтоб при старте модуль вернул
Если модуль не вернёт правильного ответа на какую-либо из команд показанных выше, то программа прекратит дальнейшее выполнение, в терминал будет выведена инфа о том, какая команда не отработала, а
//if(count_err > 49) HAL_NVIC_SystemReset();
… тогда плата будет ресетиться через 5 сек. А если ещё и модуль запитать через реле, и добавить пин для его управления, тогда и модуль можно будет перегружать вместе с платой. В
/* USER CODE BEGIN 2 */
//HAL_Delay(1000);
//HAL_GPIO_WritePin(ON_RELAY_GPIO_Port, ON_RELAY_Pin, GPIO_PIN_SET);
про включение модуля
Про то какой у меня модуль, и как он запитан, и про кнопку «Power» смотрите здесь.
Далее инициализируются прерывания USART'ов, проверяется и устанавливается скорость —
Функция
Работа этих функций продемонстрирована в примере, а посмотреть их и добавить что-то своё можно в файле
Файлы
Теперь о коде.
if(flag == 1)
{
flag = 0;
//get_date_time();
}
Выполнение чего-нибудь раз в секунду, в частности запрос времени на модуле, как писалось выше — сделано просто для наглядности.
Далее в цикле крутится проверка —
Надо немножко подождать.
Блок с балансом закомментирован специально, чтоб модуль не слал смски пока вы тестируете программу.
DTMF — очень удобная штука. Звоните на модем, он определяет что это ваш номер и «поднимает трубку» —
Сечас команда включения DTMF подаётся так —
Чтоб использовать длительность, надо для этого дописать код (в примере нету), поэтому отключите —
В самом конце, функция
Если нужно забирать с модуля какие-то данные, допустим температуру с датчиков подключённых к микроконтроллеру, то можно отправлять их смсками, собственно другого способа то и нет. Например, звоним на модуль, посылаем DTMF-сигнал кнопки 1, а модуль в ответ на это отправляет смс с температурой датчика №1.
Всякий свой функционал просто добавляйте в бесконечный цикл, работе с модулем это не помешает.
GPIO
У моего модуля выведены несколько GPIO, подавать HIGH или LOW, и считывать состояние можно так…
Чтоб управлять светиком подключённым к GPIO №3 нужно сделать так:
AT+SGPIO=0,3,1,1 — включаем.
AT+SGPIO=0,3,1,0 — отключаем.
Чтобы читать состояние на GPIO №3 нужно вначале перевести пин в состояние input:
AT+SGPIO=0,3,0,0
А потом читать состояние:
AT+SGPIO=1,3
Чтение ADC:
AT+CADC=? — инфа.
AT+CADC? — читать значение.
Управление PWM смотрите в справочнике (ссылка выше) — команда AT+SPWM.
Keypad — можно настроить и подключить кнопки — получится телефон, только экран нужно ещё подключить по SPI (имеется в виду к SPI самого модуля).
Чтоб управлять светиком подключённым к GPIO №3 нужно сделать так:
Чтобы читать состояние на GPIO №3 нужно вначале перевести пин в состояние input:
А потом читать состояние:
Чтение ADC:
Управление PWM смотрите в справочнике (ссылка выше) — команда AT+SPWM.
Keypad — можно настроить и подключить кнопки — получится телефон, только экран нужно ещё подключить по SPI (имеется в виду к SPI самого модуля).
Если в ответ на те или иные команды прилетает
В общем разбирайтесь с либой (хотя чего там разбираться то), настраивайте действия на звонки и смс, прописывайте смс-команды, а когда всё отладите можете удалить USART3 и пользоваться, или не удалять, никому он не мешает.
Работа с интернетом в следующей части, на этом всё.
Пример
И ещё удобный справочник по AT-командам
Всем спасибо
Телеграм-чат istarik
Телеграм-чат STM32
- 0
- stD
22446
Поддержать автора
Комментарии (0)