Uaena.454 2024-02-26 15:10 采纳率: 16.7%
浏览 55
已结题

关于#单片机#的问题:为什么无法成功发送at指令到移远芯片上,飞线处理后发现时指令无法成功发送


#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指令到移远芯片上,飞线处理后发现时指令无法成功发送

img

  • 写回答

10条回答 默认 最新

  • 百锦再@新空间 优质创作者: 编程框架技术领域 2024-02-26 15:37
    关注

    根据代码内容以及问题描述,可能出现at指令发送失败的原因可能有以下几点:

    1. 串口配置错误:可能是串口参数配置有误,导致无法成功发送数据。建议检查串口配置参数是否正确设置。

    2. 串口通信错误:可能是串口通信出现问题,导致数据传输失败。建议检查串口通信是否正常。

    3. 移远芯片接收问题:移远芯片接收功能可能存在问题,导致无法正确接收到发送的数据。建议检查移远芯片接收端是否正常工作。

    4. 代码逻辑错误:可能是代码逻辑有误,导致数据发送不成功。建议检查代码逻辑是否正确。

    建议逐一排查以上可能的原因,对照代码进行调试,以确保正确发送at指令到移远芯片。


    有问题你别着急,评论留言都可以,看到马上就回复,尽量及时补充齐
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月26日
  • 创建了问题 2月26日