#include <rtthread.h>
#include <board.h>
#include <string.h>
#include <rtdevice.h>
#include <at.h>
#include "dma.h"
#include "usart.h"
#include "gpio.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); //找到
// 配置串口参数
struct serial_configure config = RT_SERIAL_CONFIG_DEFAULT;
config.baud_rate = BAUD_RATE_115200;
rt_device_control(serial, RT_DEVICE_CTRL_CONFIG, &config);
// 发送指令
rt_device_write(serial, 0, command, (sizeof(command)-1)); //目标设备 起始位置,指令,长度
// 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(5000);
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\n");
send_ec800m_command("AT+QATCMD=1\r\n");
send_ec800m_command("AT\n");
send_ec800m_command("AT+QATCMD=1\n");
send_ec800m_command("AT+QATCMD=1\n");
send_ec800m_command("AT\n");
send_ec800m_command("AT\n");
send_ec800m_command("AT\n");
send_ec800m_command("AT\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)
{
HAL_Init();
MX_GPIO_Init();
MX_DMA_Init();
MX_UART5_Init();
MX_USART1_UART_Init();
ec800m_init();
return RT_EOK;
}
为什么无法成功发送at指令到移远芯片上,飞线处理后发现时指令无法成功发送

