stm32与sim900A连接短信问题

2019-10-16 06:32发布

先上代码//sim900a初始化void sim900a_init(void)
{

       
   if( sim900a_send_cmd("AT","OK",200)==0)

      {
         if(sim900a_send_cmd("ATE0","OK",200)==0)//不回显

      {  
         if(sim900a_send_cmd("AT+CMGF=1","OK",200)==0)//设置文本模式

          {
              sim900a_send_cmd("AT+CSCS="GSM"","OK",200);//设置GSM字符集


              sim900a_send_cmd("AT+CNMI=2,1","OK",200);//设置新消息提示
          }
      }
sim900a_send_cmd这个函数是原子哥的代码,发送函数也是原子哥的,问题是,现在 if( sim900a_send_cmd("AT","OK",200)==0)这个代码进不去,所以后面无法运行,经过调试发现,当stm32发送第一个指令AT的时候,第一次回复ok没有反应(其实回复什么都一样,只要任何东西都行),第二次回复ok程序就继续执行了,后面的指令也都只要回复一次OK,为什么这样啊,困扰好久了,麻烦各位大神帮帮忙。PS:后面的程序都可以完美运行,因为在串口助手上已经实现功能。




友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
ARM学员
1楼-- · 2019-10-16 11:19
本帖最后由 ARM学员 于 2016-11-22 19:01 编辑

应该是你串口发送部分等待的是"USART_FLAG_TC"这个标志位,串口使能之后这个标志位被置位了,当你第一次发送数据的时候第一个字节会被第二个字节覆盖,之后就没问题了。你这个if进不去实际情况你发送的AT指令是"T"不是"AT",那肯定就不会返回"OK"了嘛,自然就进不去了嘛。第一次发"AT"是为了同步时钟的,与波特率有关,也有可能第一个指令不会正常响应,这属于正常现象。
苗苗猴
2楼-- · 2019-10-16 13:58
ARM学员 发表于 2016-11-22 18:46
应该是你串口发送部分等待的是"USART_FLAG_TC"这个标志位,串口使能之后这个标志位被置位了,当你第一次发 ...

问题是这样的,发送AT过去了,模块也回复OK了,但是,模块必须再次回复一下OK才行,可是在实际过程中不会再次回复ok了啊,第一次是这样,后面模块回复一次就可以了。
lph浩哥
3楼-- · 2019-10-16 15:00
原子哥讲过的,第一次回复ok的时候可能会回复的是乱码,是模块还在配置中,你可以在发送“AT”的那里加个while(1)语句,判断收到的是否是 ok,如果是,就跳出循环语句

一周热门 更多>