天线|RF射频
直播中

刘飞

8年用户 153经验值
私信 关注
[问答]

请问SIM900a例程中if((u32)cmd<=0XFF)是怎么判断的?

以下是程序源码,求大神告知
//向sim900a发送命令//cmd:发送的命令字符串(不需要添加回车了),当cmd<0XFF的时候,发送数字(比如发送0X1A),大于的时候发送字符串.
//ack:期待的应答结果,如果为空,则表示不需要等待应答
//waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果)
//       1,发送失败
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
        u8 res=0;
        USART3_RX_STA=0;
        if((u32)cmd<=0XFF)
        {
                while((USART3->SR&0X40)==0);//等待上一次数据发送完成  
                USART3->DR=(u32)cmd;
        }else u3_printf("%srn",cmd);//发送命令
        if(ack&&waittime)                //需要等待应答
        {
                while(--waittime)        //等待倒计时
                {
                        delay_ms(10);
                        if(USART3_RX_STA&0X8000)//接收到期待的应答结果
                        {
                                if(sim900a_check_cmd(ack))break;//得到有效数据
                                USART3_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;
        }
        return res;
}

回帖(5)

张涛

2019-4-29 09:40:26
cmd是一个指针,当我赋值指针=0XFE的时候,或者更小的时候,就<0xff了,此时指针就用来传递一个数字而已。 如果只想字符串,必定大于0XFF。所以,可以做两种应用。
举报

刘双正

2019-4-29 09:59:11
谢谢原子哥。
举报

张舒婷

2019-4-29 10:12:33
这个视频里说的也是比较清楚的呢,为什么是0xFF。加入是1a,发送短信指令,则就小于FF,而除了1A,其他的AT指令的地址都是0x0800 0000,肯定大于FF,所以,这样来区分是其他AT指令,还是1A
举报

王峥

2019-4-29 10:18:31
谢谢了大兄弟
举报

更多回帖

发帖
×
20
完善资料,
赚取积分