金牌会员
 
- 积分
- 1177
- 金钱
- 1177
- 注册时间
- 2015-11-9
- 在线时间
- 249 小时
|
1金钱
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;
}
这个函数中if( (u32)cmd <= 0XFF)判断语句, (u32)cmd得到的应该是要发送的字符或是字符串的内存地址吧。如果要发送的字符恰好是放在小于0xff的内存空间中(比如要发送"a"这个字符,而a恰好被放在了0x11这个内存空间中),那岂不是就发送0x11了,而达不到发送‘a’的目的了?
原子求教?????????????
|
最佳答案
查看完整内容[请看2#楼]
命令分,HEX格式命令,和字符串式命令,那句就是判断,到底是HEX命令还是ASCII码式命令,要是想不通,就自己好好琢磨吧,只能告诉你,这句话没有BUG
|