• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

управление esp-01 AT командами с stm32 [HAL]

killerzon

New member
Доброе время суток, уважаемые форумчане.
уже в который день пытаюсь принять данные по UART от модуля esp-01.
Принимаю контроллером stm32, с библиотекой HAL.
есть две задачи (поднял FreeRTOS) - одна отправляет на вайфай модуль команду "AT"
в другой задаче хочу словить "OK", но получаю почему-то "AT".

Код:
/* StartTask03 function */
void StartTask03(void const * argument)
{
  /* USER CODE BEGIN StartTask03 */
    uint8_t str[] = "AT\r\n";
    /* Infinite loop */
  for(;;)
  {
    osDelay(2 * 1000);
       
        for(;;)
        {
            HAL_UART_Transmit(&huart4, str, sizeof(str)-1, 0xFF);
           
            osDelay(1500);
        }
  }
  /* USER CODE END StartTask03 */
}


/* StartTask05 function */
void StartTask05(void const * argument)
{
  /* USER CODE BEGIN StartTask05 */
    HAL_UART_Receive_IT(&huart4, (uint8_t *)&rsvdt, 1);
   
  /* Infinite loop */
  for(;;)
  {
    osDelay(1);
  }
  /* USER CODE END StartTask05 */
}
В отладчике в событии на приход символа получаю "A" или "T" (хотя ожидаю "O" или "K"):
uart_stm32_1.png

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

CodeNameHawk

Moderator
Команда форума
В есп возможно включено эхо.
Попробуйте выключить послав ATE0
 

killerzon

New member
В есп возможно включено эхо.
Попробуйте выключить послав ATE0
Спасибо огромное, попробую ближе к вечеру, но на сколько помню, при отправке команд с ПК в терминале эхо не видел.
При этом если даже включено эхо, то после ведь ответ "OK" приходить то должен? а его не видел...
Вечером попробую
 
Последнее редактирование:

killerzon

New member
Попробовал отключить эхо, но как и раньше в результате получаю то же, что и отправляется.

Код:
/* StartTask03 function */
void StartTask03(void const * argument)
{
  /* USER CODE BEGIN StartTask03 */
    uint8_t echo_off[] = "ATE0\r\n";
    uint8_t str[] = "AT\r\n";
    /* Infinite loop */
  for(;;)
  {
    osDelay(2 * 1000);
       
        HAL_UART_Transmit(&huart4, echo_off, sizeof(echo_off) - 1, 0xFF);
       
        osDelay(1500);
       
        for(;;)
        {
            HAL_UART_Transmit(&huart4, str, sizeof(str)-1, 0xFF);
           
            osDelay(1500);
        }
  }
  /* USER CODE END StartTask03 */
}
Так же пробовал заведомо слать не валидные АТ команды, но так же вижу то что и отправляю.
 

killerzon

New member
Попробуйте вообще без есп, похоже дело не в ней.
это попробую, но раньше такие же симптомы были, когда DiscoveryVL была подключена... (правда я в ней почему-то дебажить не мог, верифай не проходил после компиляции), и потому по приему, через другой ("отладочный" UART, который только пересылал данные на комповый уарт) отправлял данные на комп.

Попробую с компом по UART пообщаться, вдруг таки реально что-то не так настроил или сконфигурил(
 

killerzon

New member
К сожалению, с компом связь не получилась...
данные только отправляются.
вообще в обработчик не заходит HAL_UART_TxCpltCallback

Попробовал HAL_UART_Receive_DMA, но так же пока не получилось ничего принять там(
п.с. может ли быть такое потому, что ловлю в Receive функции сообщение длиной в 1 байт, а отправляю больше, чем один??
 
Сверху Снизу