[mw_shl_code=c,true]USART_Printf(USART3,"AT+IPR=115200&W\r\n"); //发送AT指令
while(USART_GetFlagStatus(USART3 , USART_IT_RXNE) != SET); //查询是否收到GSM模块返回的数据
USART_SendData(UART5 , USART_ReceiveData(USART3)); //将串口3收到的数据发到串口助手查看
for(i = 0; i < 5000; i ++); //延时等待发送完成
u16 receivebuffer[0]=USART_ReceiveData(USART3);
for(i = 0; i < 5000; i ++);
if(receivebuffer[0]==0x004f||receivebuffer[0]==0x004b) //判断是否返回OK,该句用来判断字母O或者K.
USART_Printf(UART5,"M35波特率修改成功!");//证明修改成功,串口助手查看[/mw_shl_code]
如上所示,使用stm32使用了两个串口,串口3和GSM模块m35连接,串口5接pc方便用串口助手查看。采用查询的方式对m35进行初始化,可总是不成功,即无法返回“M35波特率修改成功!”,但程序能够通过
[mw_shl_code=c,true]while(USART_GetFlagStatus(USART3 , USART_IT_RXNE) != SET);的查询执行下面的代码(已经验证)[/mw_shl_code]
请原子哥解答下,其中USART_Printf函数我已经检查过,没有问题,可以打印字符串。具体如下所示。
[mw_shl_code=c,true]void USART_Printf(USART_TypeDef* USARTx,char *pch)
{
while(*pch != '\0') /* 我们这里用指针表示,*pch就是一个字符,pch就是该字符的地址 */
{
USART_SendData(USARTx,*pch);
while(USART_GetFlagStatus(USARTx, USART_FLAG_TXE) == RESET);
USART_ClearFlag(USARTx, USART_FLAG_TXE);
pch++;
}
}[/mw_shl_code]
这个问题困扰我很久了,求大虾解答。。 |