UART ESP8266 и STM32

#c #stm32 #uart #at-command

Вопрос:

Здравствуйте, я пытаюсь подключить ESP8266 к STM32 через UART. Я хочу использовать STM32 для отправки команд AT ESP, чтобы ESP мог выполнять запросы HTTP GET.

Приведенный здесь код работает, когда я использую свой компьютер для отправки данных через FTDI в STM, затем прерывание вызывается каждый раз при получении байта. Но когда я подключаю ESP8266, я не получаю ответа, даже если думал, что отправляю ATrn ;

Кроме того, я просто соединил все так:

SMT32 Tx — ESP Rx

ESP Tx — FTDI Rx

И я отправил команду ATrn из SMT в ESP, и на моем компьютере в putty я получил команду OK, так что ESP отвечает. Но прерывание не вызывается.

 #include "main.h"
#include "usb_device.h"
#include "usbd_cdc_if.h"
 
UART_HandleTypeDef huart1;
 
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
 
char Rx_Byte[1];        // Creating a single byte buffer
uint8_t Rx_Buffer[256]; // Full buffer
uint8_t Rx_Buffer_Index = 0;
 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
 
    HAL_UART_Receive_IT(amp;huart1, (uint8_t *)Rx_Byte, 1);
    memcpy(Rx_Buffer   Rx_Buffer_Index, Rx_Byte, 1);
    Rx_Buffer_Index  ;
    if (*Rx_Byte == 'r' || *Rx_Byte == 'n') {
// I could send data via putty and FTDI, and when enter was pressed it printed the data in the buffer back to you via uart
//        HAL_UART_Transmit(amp;huart1, (uint8_t *) Rx_Buffer, Rx_Buffer_Index, 1000);  
        memset(Rx_Buffer, 0, sizeof(Rx_Buffer)); // Clear buffer
        Rx_Buffer_Index = 0;
    }
}
 
int main(void)
{
 
  HAL_Init();
 
  SystemClock_Config();
 
  MX_GPIO_Init();
  MX_USART1_UART_Init();
  MX_USB_DEVICE_Init();
 
  char echo_off[] = "ATE0rn";
  char data[] = "ATrn";
  HAL_Delay(1000);
  HAL_UART_Transmit(amp;huart1, (uint8_t*)echo_off, sizeof(echo_off), 10);
 
  while (1)
  {
      HAL_GPIO_TogglePin(GPIOA, LED_1_Pin);
      HAL_UART_Transmit(amp;huart1, (uint8_t*)data, sizeof(data), 1000);
      HAL_Delay(500);
  }
}
 

Комментарии:

1. Нет ответа на последовательный, как правило, скорость передачи данных или управление потоком.

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

3. Незначительное примечание: sizeof(echo_off) это 7, а не 6, как вы ожидаете. sizeof(data) также на 1 меньше по сравнению с тем, что HAL_UART_Transmit() нужно.

4. Используйте осциллограф для проверки сигналов на проводах.

5. Вы пытались сначала создать прототип с использованием платформы Arduino?