按着理解写了个短信控制单片机的实验,但是效果并不好。在中断函数中加入发送短信的代码后,开机自动跑进中断函数里面就跑死了(发送短信执行到了)。如果没有加发送短信的代码,只控制LED灯开关,虽然开机还是会自动触发一次中断,但程序可以跑出来。
AT指令AT+CNMI=2,1是为了每次收到短信后,给单机发送一个收到新消息的数据触发串口中断,我实在想不到其他好的短信操作单片机的好方法。
这个实验我的最终目的是给单片机发一个短信,他给我回复我预设的内容,求各位大大帮我看看什么是问题
[mw_shl_code=c,true]int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
delay_init(168);
LED_Init();
usart3_init(115200);
delay_ms(200);
u3_printf("AT+CNMI=2,1
");
delay_ms(100);
u3_printf("AT+CMGS="GSM"
");
delay_ms(100);
u3_printf("AT+CMGF=1
");
delay_ms(100);
u3_printf("AT+CMGS="15603001234"
");
delay_ms(100);
u3_printf("aaaa
");
delay_ms(100);
USART_SendData(USART3,0x1a);
while(1)
{
LED0=!LED0;
delay_ms(400);
}
}[/mw_shl_code]
[mw_shl_code=c,true]void USART3_IRQHandler(void)
{ if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
{ u3_printf("AT+CMGS="GSM"
");
delay_ms(100);
u3_printf("AT+CMGF=1
");
delay_ms(100);
u3_printf("AT+CMGS="15603001234"
");
delay_ms(100);
u3_printf("bbbb
");
delay_ms(100);
USART_SendData(USART3,0x1a);
LED1=!LED1;}
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
} [/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>