久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1265|回復: 2
打印 上一主題 下一主題
收起左側

STM32F103單片機與SIM900A通信程序問題

[復制鏈接]
回帖獎勵 100 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
跳轉到指定樓層
樓主

為什么程序一直卡在這里呢?我用PC串口直接接SIM900A模塊是可以正常通信的,用單片機來控制AT指令,就出現問題了,調試串口一直返回AT。各位大佬!!!拜托拜托!!這樣的情況,一般是什么原因?怎么去解決
下面是我SIM900A.C文件//////////////////////////////////////////////////////////////////////////////////        
u8 SIM900_CSQ[3];
u8 dtbuf[50];                                                                   //打印緩存器        
u8 Flag_Rec_Message=0;
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//usmart支持部分
//將收到的AT指令應答數據返回給電腦串口
//mode:0,不清零USART2_RX_STA;
//     1,清零USART2_RX_STA;
void sim_at_response(u8 mode)
{
        if(USART2_RX_STA&0X8000)                //接收到一次數據了
        {
                USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結束符
                printf("%s",USART2_RX_BUF);        //發送到串口
                if(mode)USART2_RX_STA=0;               
        }
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////
//ATK-SIM900A 各項測試(撥號測試、短信測試、GPRS測試)共用代碼
//sim900a發送命令后,檢測接收到的應答
//str:期待的應答結果
//返回值:0,沒有得到期待的應答結果
//    其他,期待應答結果的位置(str的位置)
u8* sim900a_check_cmd(u8 *str)
{
        char *strx=0;
        if(USART2_RX_STA&0X8000)                //接收到一次數據了
        {
                USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加結束符
                strx=strstr((const char*)USART2_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}
//向sim900a發送命令
//cmd:發送的命令字符串(不需要添加回車了),當cmd<0XFF的時候,發送數字(比如發送0X1A),大于的時候發送字符串.
//ack:期待的應答結果,如果為空,則表示不需要等待應答
//waittime:等待時間(單位:10ms)
//返回值:0,發送成功(得到了期待的應答結果)
//       1,發送失敗
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
        u8 res=0;
        USART2_RX_STA=0;USART2_RX_REC_ATCOMMAD=1;
        if((u32)cmd<=0XFF)
        {
                while(DMA1_Channel7->CNDTR!=0);        //等待通道7傳輸完成   
                USART2->DR=(u32)cmd;
        }else u2_printf("%s\r\n",cmd);//發送命令
        if(ack&&waittime)                //需要等待應答
        {
                while(--waittime)        //等待倒計時
                {
                        delay_ms(10);
                        if(USART2_RX_STA&0X8000)//接收到期待的應答結果
                        {
                                if(sim900a_check_cmd(ack))break;//得到有效數據
                                USART2_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        USART2_RX_STA=0;USART2_RX_REC_ATCOMMAD=0;
        return res;
}

u8 sim900a_work_test(void)
{
        if(sim900a_send_cmd((u8 *)"AT",(u8 *)"OK",100))
        {
                if(sim900a_send_cmd((u8 *)"AT",(u8 *)"OK",100))return SIM_COMMUNTION_ERR;        //通信不上
        }               
        if(sim900a_send_cmd((u8 *)"AT+CPIN?",(u8 *)"READY",400))return SIM_CPIN_ERR;        //沒有卡
        if(sim900a_send_cmd((u8 *)"AT+CREG?",(u8 *)"0,1",400))
        {
                if(strstr((const char*)USART2_RX_BUF,"0,5")==NULL)
                {
                         if(!sim900a_send_cmd((u8 *)"AT+CSQ",(u8 *)"OK",200))        
                         {
                                        memcpy(SIM900_CSQ,USART2_RX_BUF+15,2);
                         }
                         return SIM_CREG_FAIL;        //等待附著到網絡
                }
        }        
        return SIM_OK;
}
u8 GSM_Dect(void)
{
        u8 res;
        res=sim900a_work_test();        
        switch(res)
        {
                case SIM_OK:
                        UART3SendString("GSM模塊自檢成功\r\n",strlen("GSM模塊自檢成功\r\n"));
                        break;
                case SIM_COMMUNTION_ERR:
                        UART3SendString("與GSM模塊未通訊成功,請等待\r\n",strlen("與GSM模塊未通訊成功,請等待\r\n"));
                        break;
                case SIM_CPIN_ERR:
                        UART3SendString("沒檢測到卡\r\n",strlen("沒檢測到卡\r\n"));        
                        break;
                case SIM_CREG_FAIL:
                        UART3SendString("注冊網絡中。。。\r\n",strlen("注冊網絡中。。。\r\n"));        
                        UART3SendString("當前信號值:",strlen("當前信號值:"));        UART3SendString(SIM900_CSQ,2);UART3SendString("\r\n",2);
                        break;               
                default:
                        break;
        }
        return res;
}
u8 sim900a_send_enmessage(void)        //讓數字,字母等內容以英文輸出
{        
        if(sim900a_send_cmd((u8 *)"AT+CMGF=1",(u8 *)"OK",100))        return SIM_CMGF_ERR;
        if(sim900a_send_cmd((u8 *)"AT+CSCS=\"GSM\"",(u8 *)"OK",100))        return SIM_CSCS_ERR;
        if(sim900a_send_cmd((u8 *)"AT+CSCA?",(u8 *)"OK",100))        return SIM_CSCA_ERR;
        if(sim900a_send_cmd((u8 *)"AT+CSMP=17,167,0,241",(u8 *)"OK",100))        return SIM_CSMP_ERR;
        if(sim900a_send_cmd((u8 *)"AT+CNMI=2,2",(u8 *)"OK",200))return SIM_CNMI_ERR;        //設置短信自動上報
        return SIM_OK;
}

u8 SIM_HANDLE_MESSAGE_CMD(void)
{
        if(strstr((char*)USART2_RX_BUF,"aa")!=NULL)                        return 1;
        else if(strstr((char*)USART2_RX_BUF,"bb")!=NULL)        return 2;
        else if(strstr((char*)USART2_RX_BUF,"cc")!=NULL)        return 3;
        else if(strstr((char*)USART2_RX_BUF,"dd")!=NULL)        return 4;
        else if(strstr((char*)USART2_RX_BUF,"ee")!=NULL)        return 5;
        return 0;
}

u8 sim900a_send_chmessage_zc(u8*number,u8*content)
{
        u8 cmd[100];
        sprintf((char*)cmd,"AT+CMGS=\"%s\"",number);
        if(sim900a_send_cmd((u8 *)"AT+CMGF=1",(u8 *)"OK",100))        return SIM_CMGF_ERR;
        if(sim900a_send_cmd((u8 *)"AT+CSCS=\"UCS2\"",(u8 *)"OK",100))        return SIM_CSCS_ERR;
        if(sim900a_send_cmd((u8 *)"AT+CSCA?",(u8 *)"OK",100))        return SIM_CSCA_ERR;
        if(sim900a_send_cmd((u8 *)"AT+CSMP=17,167,0,25",(u8 *)"OK",100))        return SIM_CSMP_ERR;
        if(sim900a_send_cmd(cmd,(u8 *)">",100))        return SIM_CMGS_ERR;
        UART2SendString(content,strlen((char*)content));
        //u2_printf("%s",content);
        if(sim900a_send_cmd((u8 *)0x1A,(u8 *)"+CMGS:",1500))        return SIM_CMGS_SEND_FAIL;
        return SIM_OK;
}
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:123289 發表于 2023-4-28 10:14 | 只看該作者
發生命令后,稍等一下對方回應。估計對方未回,再發一次。
回復

使用道具 舉報

板凳
ID:1063563 發表于 2023-5-14 15:25 | 只看該作者
檢查一下雙方的通信格式是否一樣匹配。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 美女高潮网站 | 久草网站 | 亚洲视频在线播放 | 日本精a在线观看 | 久久r精品 | 91婷婷韩国欧美一区二区 | 久久爆操 | 国产一区二区三区久久 | 日韩在线观看视频一区 | 国产精品亚洲一区二区三区在线观看 | 日本一区二区三区四区 | 黄a网| 日韩一区二区免费视频 | 成人久久| 三级黄色大片网站 | 少妇一区在线观看 | 精品久久九 | 一区二区三区在线 | 日日操夜夜操天天操 | 国产成人精品午夜视频免费 | 久久久久久a | 国产精品久久性 | 国产大片一区 | 高清黄色网址 | 精品久久影院 | 成年人在线观看视频 | 欧美精品国产精品 | 亚洲黄色av网站 | 特级做a爱片免费69 精品国产鲁一鲁一区二区张丽 | 在线观看国产三级 | 成人二区 | 国产精品日日做人人爱 | 黄色精品 | 一区二区在线 | 成人三级视频在线观看 | 精品欧美乱码久久久久久 | 色视频成人在线观看免 | 毛片国产 | 精品久久久久久久久久 | 欧美一级免费看 | 国产高清在线精品 |