• Система автоматизации с открытым исходным кодом на базе 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 байт, а отправляю больше, чем один??
 
Сверху Снизу