OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3138|回复: 0

求助:sim900a返回数据显示不到lcd上

[复制链接]

5

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2017-2-24
在线时间
11 小时
发表于 2017-5-4 18:31:36 | 显示全部楼层 |阅读模式
试验了下原子哥代码,写了个简单的程序,想通过lcd驱动文件内的显示函数LCD_Showstring显示sim900a返回的数据(例如运营商什么的),但什么都不显示,想是不是sim900a返回的数据用这个函数输出不了[mw_shl_code=c,true]#include "sim900a.h"
#include "usart.h"               
#include "delay.h"       
#include "lcd.h"
#include "string.h"
#include "usart2.h"
#include "remote.h"
#include "malloc.h"


//命令检查
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发送命令
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
       
        u8 res=0;
        USART2_RX_STA=0;
        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;
        }
        return res;
}

void sim900a_simcard_info(void)
{
        u8 *p,*p1,*p2;
        //u8 res=0;
        p=mymalloc(SRAMIN,50);//申请50个字节的内存
        POINT_COLOR=BLUE;        
        USART2_RX_STA=0;
       

        if(sim900a_send_cmd("AT+CPIN?","OK",200))        //查询SIM卡是否在位
        USART2_RX_STA=0;
       
        if(sim900a_send_cmd("AT+COPS?","OK",200)==0)                //查询运营商名字
        {
                p1=(u8*)strstr((const char*)(USART2_RX_BUF),"\"");
                if(p1)//有有效数据
                {
                        p2=(u8*)strstr((const char*)(p1+1),"\"");
                        p2[0]=0;//加入结束符                       
                        sprintf((char*)p,"company:%s",p1+1);
                  LCD_ShowString(60,70,200,16,16,p);
                }
                USART2_RX_STA=0;               
        }
       
        if(sim900a_send_cmd("AT+CSQ","+CSQ:",200)==0)                //查询信号质量
        {
                p1=(u8*)strstr((const char*)(USART2_RX_BUF),":");
                p2=(u8*)strstr((const char*)(p1),",");
                p2[0]=0;//加入结束符
                sprintf((char*)p,"sig quantity:%s",p1+2);
                LCD_ShowString(60,90,200,16,16,p);
                USART2_RX_STA=0;               
        }
       
        myfree(SRAMIN,p);
       
}

//sim900a模块总测试
//红外遥控音量键VOL选择拨号功能或者短信功能
//显示见面的逻辑......
void sim900a_test(void)
{
       
        POINT_COLOR = RED;
       
        LCD_ShowString(60,50,200,16,16,"made by anyuxin");
        //sim900a_send_cmd("ATE0","OK",200);
        sim900a_simcard_info();
}






[/mw_shl_code]
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-8-21 15:12

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表