STM Урок 57. Wi-Fi. SPWF01SA11. Команды. Часть 2



Урок 57

 

Часть 2

 

Wi-Fi. SPWF01SA11. Команды

 

В прошлой части занятия мы познакомились с модулем и платой, создали проект и настроили его.

Теперь мы перейдём в файл SPWF01SA11.c и добавим туда пару функций для выхода из спящего режима и аппаратной перезагрузки модуля

 

//———————————————
void wifi_wakeup(wifi_bool wakeup)
{
  //WiFi_Status_t status = WiFi_MODULE_SUCCESS;    
  if(wakeup)
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_SET);
  else
      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_8, GPIO_PIN_RESET);
}
//———————————————
void wifi_reset(void)
{
  /* ===   RESET PIN — PC12   ===*/
      HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_RESET);
  HAL_Delay(200);  
  /* ===   SET PIN — PC12   ===*/
        HAL_GPIO_WritePin(GPIOC, GPIO_PIN_12, GPIO_PIN_SET);
  HAL_Delay(50);
      HAL_GPIO_DeInit(GPIOC, GPIO_PIN_12);
}
//———————————————

 

Почему мы работаем именно с этими ножками видно из схемы, приведённой в технической документации на плату расширения и на модуль

 

image009

image010

image011

 

Теперь вызовем данные функции в функции инициализации модуля

 

void SPWF01SA11_Ini(void)
{
  wifi_wakeup(WIFI_TRUE);
  wifi_reset();

}

 

В main.c добавим функцию-обработчик прерываний от шины USART и добавим там отслеживание обработки прерываний от каждого USART в отдельности

 

/* USER CODE BEGIN 4 */
//———————————————————
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart==&huart1)
    {
    }
    if(huart==&huart2)
    {
    }
}
//———————————————————

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

 

В файле SPWF01SA11.c добавим переменную для USART1

 

//———————————————
extern UART_HandleTypeDef huart1;
extern UART_HandleTypeDef huart2;
 

 

Добавим также ещё 2 функции

 

//———————————————
void WIFI_UART_RxCpltCallback(void)
{
}
//———————————————
void UART2_RxCpltCallback(void)
{
}
//———————————————

void SPWF01SA11_Ini(void)

 

Добавим для них прототипы

 

void SPWF01SA11_Ini(void);
void WIFI_UART_RxCpltCallback(void);
void UART2_RxCpltCallback(void);

//————————————————

 

Вызовем их в обработчике в файле main.c

 

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart==&huart1)
    {
        WIFI_UART_RxCpltCallback();
    }
    if(huart==&huart2)
    {
        UART2_RxCpltCallback();
    }
}

 

Удалим строковые переменные в файле SPWF01SA11.c и вместо них добавим другие, причем не только строковые

 

extern UART_HandleTypeDef huart2;
uint8_t str_msg[30]={0};
uint8_t str_cmd[30]={0};
uint8_t buf_uart2tx[30]={0};
uint8_t buf_uart2rx[30]={0};
uint8_t buf_msgrx[100]={0};
uint8_t buf_cmdrx[30]={0};
uint16_t usart_msg_bit=0;
uint16_t usart_cmd_bit=0;

//———————————————

 

Также напишем код в функции для обработки прерываний от обеих шин USART в этом же файле

 

//———————————————
void WIFI_UART_RxCpltCallback(void)
{
    HAL_UART_Receive_IT(&huart1,(uint8_t*)str_msg,1);
    buf_msgrx[usart_msg_bit++]=str_msg[0];
    if(buf_msgrx[usart_msg_bit-2]==0x0D)
    {
        if(buf_msgrx[usart_msg_bit-1]==0x0A)
        {
            if(usart_msg_bit>3)
            {
                HAL_UART_Transmit_DMA(&huart2, (uint8_t*)buf_msgrx,usart_msg_bit);
                usart_msg_bit=0;
            }
        }
    }

}
//———————————————
void UART2_RxCpltCallback(void)
{
    HAL_UART_Receive_IT(&huart2,(uint8_t*)str_cmd,1);
    buf_cmdrx[usart_cmd_bit++]=str_cmd[0];
    if(buf_cmdrx[usart_cmd_bit-2]==0x0D)
    {
        if(buf_cmdrx[usart_cmd_bit-1]==0x0A)
        {
            if(usart_cmd_bit>3)
            {
                HAL_UART_Transmit_DMA(&huart2, (uint8_t*)buf_cmdrx,usart_cmd_bit);
                HAL_UART_Transmit(&huart1, (uint8_t*)buf_cmdrx,usart_cmd_bit,0x1000);
                usart_cmd_bit=0;
            }
        }
    }

}
//———————————————

 

 

Также вызовем в функции инициализации запуск приема данных от USART1 по прерыванию

 

    wifi_reset();
    HAL_UART_Receive_IT(&huart1,(uint8_t*)str_msg,1);
    HAL_UART_Receive_IT(&huart2,(uint8_t*)str_cmd,1);

 

А в функции main() уберем

 

  /* USER CODE BEGIN 2 */
    HAL_UART_Receive_IT(&huart2,(uint8_t*)str,8);
 

Соберём проект и прошьём контроллер

 

Запустим терминальную программу. На этот раз была выбрана программа CoolTerm (также приложу в конце архив, установка не требуется) и.

Внесем некоторые настройки порта. Зайдем в Connection -> Options и настроим свой порт. У меня в данный момент COM3, у вас будет свой порт

 

image012

image013

 

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

 

image014

 

Соединяемся с виртуальным портом

 

image015

 

Мы видим попытки подключения к беспроводной сети, скорее всего они будут безуспешными, так как мы не сконфигурировали подключение к точке доступа (к роутеру или ещё к какой-то), не ввели имя, пароль, способ подключения и т.д.

 

image016

 

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

Давайте введём первую команду. Это будет команда «AT» («Attention» или «Внимание»). Она даёт нам возможность проверить работу модуля. Если модуль откликнется, то он ответит нам сообщением «OK»

 

image017 image018

 

Как мы видим, модуль наш откликнулся. Ура! Значит мы правильно написали код инициализации и работы с виртуальным портом, а также с интерфейсом обмена между модулем и нашим контроллером.

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

 

 

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

 

Техническая документация:

SPWF01 Datasheet

SPWF01 User manual

x-nucleo-idw01m1 datasheet

x-nucleo-idw01m1 User manual

 

 

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

и здесь Nucleo STM32F401RE

Оценочную плату можно приобрести здесь STM32 X-NUCLEO-IDW01M1

 

 

Смотреть ВИДЕОУРОК

 

STM32 Wi-Fi. SPWF01SA11. Команды

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

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

*