先上代码//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:后面的程序都可以完美运行,因为在串口助手上已经实现功能。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
应该是你串口发送部分等待的是"USART_FLAG_TC"这个标志位,串口使能之后这个标志位被置位了,当你第一次发送数据的时候第一个字节会被第二个字节覆盖,之后就没问题了。你这个if进不去实际情况你发送的AT指令是"T"不是"AT",那肯定就不会返回"OK"了嘛,自然就进不去了嘛。第一次发"AT"是为了同步时钟的,与波特率有关,也有可能第一个指令不会正常响应,这属于正常现象。
一周热门 更多>