#include <rtthread.h>
#include <board.h>
#include <string.h>
#include <rtdevice.h>
#include <at.h>
#define DBG_TAG "main"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>
#include <zlib.h>
#define EC800M_UART_NAME "uart5" // 使用 UART5 与 EC800M 模块通信
// 定义接收缓冲区大小
#define RX_BUFFER_SIZE 256
rt_size_t size=RX_BUFFER_SIZE;
// 定义全局接收缓冲区
static char rx_buffer[RX_BUFFER_SIZE];
//给移远芯片发送指令
void send_ec800m_command(const char *command)
{
rt_device_t serial = rt_device_find(EC800M_UART_NAME);
rt_device_init(serial);
if (serial == RT_NULL)
{
rt_kprintf("Serial device not found!\n"); //找不到
return;
}
else
rt_kprintf("Serial device %s found!\n",serial); //找到
rt_err_t err= rt_device_open(serial, RT_DEVICE_FLAG_DMA_RX|RT_DEVICE_FLAG_DMA_TX);
if (err == RT_NULL)
{
rt_kprintf("Serial device not open!\n"); //找不到
return;
}
else
rt_kprintf("Serial device %s open!\n",serial); //找到
// 发送指令
rt_size_t select= rt_device_write(serial, 0, command, strlen(command)); //目标设备 起始位置,指令,长度
if(select!=RT_NULL)
{
rt_kprintf("send %s command!\n",command);
rt_kprintf("send at success\n");
}
else {
rt_kprintf("failed\n");
}
// 等待一段时间,等待 EC800M 模块响应并处理响应数据
rt_thread_mdelay(2000);
rt_size_t mes =rt_device_read(serial, 0, rx_buffer, size);
if(mes!=RT_NULL)
{
rt_kprintf("Received data: %s\n", rx_buffer);
rt_kprintf("Receive message successful\n");
}
else {
rt_kprintf("Received data: %s\n", rx_buffer);
rt_kprintf("failed receive\n");
}
rt_thread_mdelay(2000);
rt_kprintf("1111\n");
rt_kprintf("wait\n");
}
void ec800m_task(void *parameter)
{
// 发送 AT 指令查询设备信息
send_ec800m_command("AT\r\n");
send_ec800m_command("AT\n");
send_ec800m_command("AT+cops? \n");
}
int ec800m_init(void)
{
// 创建一个线程用于与 EC800M 模块通信
rt_thread_t thread = rt_thread_create("ec800m_task", ec800m_task, RT_NULL, 1024, 25, 10);
if (thread != RT_NULL)
{
rt_thread_startup(thread);
rt_kprintf("Successful\n");
return RT_EOK;
}
else
{
return -RT_ERROR;
}
}
int main(void)
{
ec800m_init();
return RT_EOK;
}

用stm32f413和EC800M成功发送了AT指令,但接收不到返回信息