叙利亚在逃悍夫 2025-10-24 02:03 采纳率: 50%
浏览 4

stm32连接华为云 at指令没有回复

使用串口调试助手连接esp8266发送at指令会有回应 为什么加上单片机的话就没有回应了 ,我这个是上云使用的 ,一切都正常 也可以上传云平台 但是就没有像直接用eso8266连接串口发送AT之后返回的ok这些东西

#include "usart.h"         
uint8_t Serial_RxData;        //定义串口接收的数据变量
uint8_t Serial_RxFlag;        //定义串口接收的标志位变量

u16 USART_RX_STA=0;       //接收状态标记    
u8 USART_RX_BUF[USART_REC_LEN];     //接收缓冲,最大USART_REC_LEN个字节

int fputc(int ch,FILE *p)  //函数默认的,在使用printf函数时自动调用
{
    USART_SendData(USART1,(u8)ch);    
    while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);
    return ch;
}

/*******************************************************************************
* 函 数 名         : USART1_Init
* 函数功能           : USART1初始化函数
* 输    入         : bound:波特率
* 输    出         : 无
*******************************************************************************/ 
void USART1_Init(u32 bound)
{
   //GPIO端口设置
    GPIO_InitTypeDef GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;
    
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);     //打开时钟
 
    
    /*  配置GPIO的模式和IO口 */
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;//TX                   //串口输出PA9
    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;        //复用推挽输出
    GPIO_Init(GPIOA,&GPIO_InitStructure);  /* 初始化串口输入IO */
    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//RX             //串口输入PA10
    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;          //模拟输入
    GPIO_Init(GPIOA,&GPIO_InitStructure); /* 初始化GPIO */
    

   //USART1 初始化设置
    USART_InitStructure.USART_BaudRate = bound;//波特率设置
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式
    USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位
    USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;    //收发模式
    USART_Init(USART1, &USART_InitStructure); //初始化串口1
    
    USART_Cmd(USART1, ENABLE);  //使能串口1 
    
    USART_ClearFlag(USART1, USART_FLAG_TC);
        
    USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启相关中断

    //Usart1 NVIC 配置
    NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;//串口1中断通道
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3;//抢占优先级3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority =3;        //子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;            //IRQ通道使能
    NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器、    
}

/*******************************************************************************
* 函 数 名         : USART1_IRQHandler
* 函数功能           : USART1中断函数
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/ 
void USART1_IRQHandler(void)
{
    if (USART_GetITStatus(USART1, USART_IT_RXNE) == SET)        //判断是否是USART1的接收事件触发的中断
    {
        Serial_RxData = USART_ReceiveData(USART1);                //读取数据寄存器,存放在接收的数据变量
        Serial_RxFlag = 1;                                        //置接收标志位变量为1
        USART_ClearITPendingBit(USART1, USART_IT_RXNE);            //清除USART1的RXNE标志位
                                                                //读取数据寄存器会自动清除此标志位
                                                                //如果已经读取了数据寄存器,也可以不执行此代码
    }
}
    

 






  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2025-10-24 08:55
    关注

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    问题分析

    你使用 STM32 单片机连接华为云,通过串口调试助手发送 AT 指令,但没有收到回应。然而,当直接使用 ESP8266 连接串口发送 AT 指令时,会收到回应。

    可能原因

    1. 串口配置: 检查 STM32 的串口配置是否正确,包括波特率、数据位数、停止位数和校验位数。
    2. AT 指令: 检查 AT 指令是否正确,包括指令格式和参数。
    3. 串口助手配置: 检查串口助手的配置是否正确,包括波特率、数据位数、停止位数和校验位数。
    4. 单片机代码: 检查单片机代码是否正确,包括串口初始化、AT 指令发送和接收。

    解决方案

    1. 检查串口配置: 确保 STM32 的串口配置与 ESP8266 的串口配置一致。
    2. 检查 AT 指令: 确保 AT 指令格式和参数正确。
    3. 检查串口助手配置: 确保串口助手的配置与 STM32 的串口配置一致。
    4. 检查单片机代码: 确保单片机代码正确,包括串口初始化、AT 指令发送和接收。

    核心代码

    // STM32 的串口初始化
    void USART_Init(void) {
        // 配置串口波特率
        USART_BRR = (uint32_t)(USART_BAUDRATE / (float)USART_CLK);
        // 配置串口数据位数
        USART_CR1 = USART_CR1_M | USART_CR1_B8;
        // 配置串口停止位数
        USART_CR2 = USART_CR2_STOP;
        // 配置串口校验位数
        USART_CR3 = USART_CR3_PCE;
    }
    
    // 发送 AT 指令
    void USART_SendAT(void) {
        // 发送 AT 指令
        USART_SendString("AT\r\n");
    }
    
    // 接收 AT 回应
    void USART_ReceiveAT(void) {
        // 接收 AT 回应
        char buffer[256];
        USART_ReceiveString(buffer, 256);
        // 处理 AT 回应
        // ...
    }
    

    注意

    上述代码仅为示例,具体实现可能需要根据 STM32 的具体硬件和软件环境进行调整。

    评论

报告相同问题?

问题事件

  • 创建了问题 10月24日