一、硬件设计

       该硬件原理非常简单,主要是32芯片通过串口通信,发送AT指令来控制EG800K芯片进行云端通信。想必大家很清楚

二、软件设计

   1.串口初始化(配置USART1)

void UART1_Init(void)
{   //1.定义结构体
    USART_InitType USART_InitStructure;
    GPIO_InitType GPIO_InitStructure;
    NVIC_InitType NVIC_InitStructure;
    RCC_ClocksType RCC_ClocksStatus;

    // 2.使能GPIO时钟,使能USART时钟   
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA, ENABLE);// 使能GPIOA的时钟,以便可以使用与USART1相关的引脚 
    RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_USART1, ENABLE);  // 使能USART1的时钟,以便可以进行数据传输 

    // 3.初始化GPIO与串口结构体
    //GPIO_InitStruct(&GPIO_InitStructure);      //复位gpio
    USART_Init(USART1, &USART_InitStructure);  //复位串口1

    // 4.配置USART1 Tx引脚为复用推挽输出
    GPIO_InitStructure.Pin            = GPIO_PIN_9;
    GPIO_InitStructure.GPIO_Mode      = GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_SPEED_HIGH;
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART1;  // 设置GPIO引脚的复用功能为USART1
    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);   
    // 5.配置USART1 Rx引脚为复用推挽输入
    GPIO_InitStructure.Pin            = GPIO_PIN_10; 
    GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART1; // 设置GPIO引脚的复用功能为USART1
    GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure); // 初始化GPIO引脚

   // 6.获取时钟频率值
    RCC_GetClocksFreqValue(&RCC_ClocksStatus); 

    // 7.配置UART参数
    USART_InitStructure.BaudRate = 115200;
    USART_InitStructure.WordLength = USART_WL_8B;
    USART_InitStructure.StopBits = USART_STPB_1;
    USART_InitStructure.Parity = USART_PE_NO;
    USART_InitStructure.HardwareFlowControl = USART_HFCTRL_NONE;
    USART_InitStructure.Mode = USART_MODE_RX | USART_MODE_TX;
    USART_Init(USART1, &USART_InitStructure);
    // 8.使能UART
    USART_Enable(USART1, ENABLE);

    /* 配置中断 */
    NVIC_InitStructure.NVIC_IRQChannel                   = USART2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPriority           = 2;
    NVIC_InitStructure.NVIC_IRQChannelCmd                = ENABLE;
    NVIC_Init(&NVIC_InitStructure);


    /* Enable USARTz Receive and Transmit interrupts */
    USART_ConfigInt(USART1, USART_INT_RXDNE, ENABLE); // 配置USART1接收数据非空中断使能
    USART_ConfigInt(USART1, USART_INT_IDLEF, ENABLE); // 配置USART1空闲中断使能
}

2.串口AT指令编写,根据 EG800K手册进行书写,例如下面的初始化代码

/*****************************************************
该函数用来检测32与4G模块是否串口连接成功
*****************************************************/
void CSTX_4G_Init(void)
{   
	//发送一条命令ATE1
    Uart2_SendStr("AT\r\n"); 
    delay_ms(100);
    strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");//检测OK,buf_uart2.buf:UART2的接收缓冲区,存放4G模块返回的数据,在buf中寻找“ok”/
    Clear_Buffer();	
    errcount = 0;
    while(strx==NULL)
    {   
        Uart2_SendStr("初始化4G模块失败,正在重新初始化4G模块......\r\n");
        Clear_Buffer();	
        Uart2_SendStr("AT\r\n"); 
        delay_ms(300);
        strx=strstr((const char*)buf_uart2.buf,(const char*)"OK");//检测OK
        errcount++;
        if(errcount>20)     //超时退出死循环 表示服务器连接失败
        {   
            Uart2_SendStr("初始化4G模块连续失败,请检查连接......\r\n");
            errcount = 0;
            break;
        } 

    }
	Clear_Buffer();	
}

3.主函数编写,主要调用用到的函数

int main(void)
{
  UART1_Init();
  UART2_Init();
  Uart1_SendStr("UART1 Init Successful\r\n");
  CSTX_4G_Init();             //初始化4G设备
  CSTX_4G_ConTCP();           //关闭之前的连接
  CSTX_4G_CreateTCPSokcet();  //创建新的TCP套接字
  CONTRACT_4G();              //发送接收函数协议
}

4.需要完整代码的私聊加v flingwithcling ,欢迎大家学习交流! 不懂留言,看到回复。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐