#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?