OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2283|回复: 5

写了个简单的短信操作单片机程序,在串口中断函数加入发送短信的代码后,程序跑死了

[复制链接]

5

主题

12

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-12-13
在线时间
11 小时
发表于 2016-12-17 13:45:40 | 显示全部楼层 |阅读模式
1金钱
按着理解写了个短信控制单片机的实验,但是效果并不好。在中断函数中加入发送短信的代码后,开机自动跑进中断函数里面就跑死了(发送短信执行到了)。如果没有加发送短信的代码,只控制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\r\n");
                delay_ms(100);
                u3_printf("AT+CMGS=\"GSM\"\r\n");
                delay_ms(100);
          u3_printf("AT+CMGF=1\r\n");
                delay_ms(100);
                u3_printf("AT+CMGS=\"15603001234\"\r\n");
                delay_ms(100);
                u3_printf("aaaa\r\n");
                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\"\r\n");
                delay_ms(100);
          u3_printf("AT+CMGF=1\r\n");
                delay_ms(100);
                u3_printf("AT+CMGS=\"15603001234\"\r\n");
                delay_ms(100);
                u3_printf("bbbb\r\n");
                delay_ms(100);
                USART_SendData(USART3,0x1a);       
    LED1=!LED1;}               
USART_ClearITPendingBit(USART3,USART_IT_RXNE);
}  [/mw_shl_code]

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

12

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-12-13
在线时间
11 小时
 楼主| 发表于 2016-12-17 13:48:40 | 显示全部楼层
存在的问题有:
1.每次我开机都会自动触发一次中断
2.由于这样的新消息提示触发中断是无差别的,我不能按着我的需求实现不同操作,比如有时我想控制LED灯,有时我想控制蜂鸣器
3.在中断函数上加入发送短信的代码后,每次打开单片机,都会自动触发一次中断,中断内容实现后,程序就好像卡死在中断函数里面一样,因为我main函数里面设置了LED提示灯,如果程序一直运行下去,那个LED是会闪亮的,但实验结果是没有根本没有亮。我在中断函数中只写控制LED开关的时候,不会出现这样卡死的情况。
回复

使用道具 举报

mrxsean 该用户已被删除
发表于 2016-12-17 14:11:48 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

5

主题

12

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2016-12-13
在线时间
11 小时
 楼主| 发表于 2016-12-23 17:16:09 | 显示全部楼层
mrxsean 发表于 2016-12-17 14:11
串口开中断接收模块的数据,判断到有新短信来后,发送命令去读短信。然后再解析,解析完后根据短信内容回复 ...

我按着你的数据写了程序,但是程序还是无法判断我的发送的内容,可以帮我看看吗
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2016-12-25 21:39:16 | 显示全部楼层
帮顶
回复

使用道具 举报

mrxsean 该用户已被删除
发表于 2016-12-27 11:40:03 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-29 04:47

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表