初级会员

- 积分
- 148
- 金钱
- 148
- 注册时间
- 2012-11-1
- 在线时间
- 29 小时
|
1金钱
小弟想通过MINI板的内部RTC的闹钟模块,定时用SIM900A发送短信。单独的闹钟程序和SIM900A程序都调通了:闹钟程序在我设置的固定时间进入闹钟中断,点亮LED;SIM900A程序在我按键后向手机发送一条短信。但是在进行两个程序合并的时候,能够进行闹钟中断,却发送不了短信,请问是什么问题呢?程序如下:
主程序:
[mw_shl_code=c,true]int main(void)
{
u8 t=0;
Stm32_Clock_Init(9); //系统时钟设置
delay_init(72); //延时初始化
uart_init(72,9600); //串口1初始化
LED_Init();
RTC_Init();
sim900a_init();
USART2_Init(36,115200); //初始化串口2
calendar_alarm_init(&alarm); //初始化闹钟
alarm_set(8,48); //闹钟设置
// RTC_Set(2016,7,19,16,12,0); //设置时间
while(1)
{
if(t!=timer.sec)
{
t=timer.sec;
delay_ms(10);
}
}
}[/mw_shl_code]
中断函数:[mw_shl_code=c,true]void RTC_IRQHandler(void)
{
if(RTC->CRL&0x0001)//秒钟中断
{
RTC_Get();//更新时间
}
if(RTC->CRL&0x0002)//闹钟中断
{
//printf("Alarm!\n");
RTC->CRL&=~(0x0002);//清闹钟中断
if(alarm.weekmask&(1<<calendar.week))
{
alarm.ringsta|=1<<7;//标记为闹铃状态.
if(alarm.ringsta&1<<7)
{
sim900a_sms_test();//短信发送
//delay_ms(40);
}
}
calendar_alarm_init(&alarm);//重新设置下一次闹铃
}
RTC->CRL&=0X0FFA; //清除溢出,秒钟中断标志
while(!(RTC->CRL&(1<<5)));//等待RTC寄存器操作完成
}[/mw_shl_code]
[mw_shl_code=c,true]u8 sim900a_sms_test(void)
{
u8 key;
u8 timex=0;
if(sim900a_send_cmd("AT+CMGF=1","OK",200))return 1; //设置文本模式
if(sim900a_send_cmd("AT+CSCS=\"UCS2\"","OK",200))return 2; //设置TE字符集为UCS2
if(sim900a_send_cmd("AT+CSMP=17,0,2,25","OK",200))return 3; //设置短消息文本模式参数
//sim900a_sms_ui(40,30);
sim900a_sms_send_test();
delay_ms(10);
sim_at_response(1); //检查GSM模块发送过来的数据,及时上传给电脑
sim900a_send_cmd("AT+CSCS=\"GSM\"","OK",200); //设置默认的GSM 7位缺省字符集
return 0;
} [/mw_shl_code]
[mw_shl_code=c,true]//测试短信发送内容(70个字[UCS2的时候,1个字符/数字都算1个字])
//SIM900A发短信测试
void sim900a_sms_send_test(void)
{
u8 *p="Hello World!";
// sim900a_init();
if(sim900a_send_cmd("AT+CMGS=\"1835109####\"\r\n",">",200)==0);//设置要发送的手机号码
{
delay_ms(40);
if(sim900a_check_cmd(">"))//是否收到">"
{
LED1=!LED1;
u2_printf((char*)p); //发短息内容到GSM模块
if(sim900a_send_cmd((u8*)0X1A,"+CMGS:",1000)==0)//发送结束符,等待发送完成(最长等待10秒,因为短信长了的话,等待时间会长些)
{
LED1=!LED1;
}
USART2_RX_STA=0;
}
}
}[/mw_shl_code]
|
|