OpenEdv-开源电子网

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

想做一个用SIM900A以短信的方式发送GPS的数据。可是发不了短信

[复制链接]

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-8-20
在线时间
0 小时
发表于 2015-1-23 12:07:16 | 显示全部楼层 |阅读模式
5金钱
是这样的。GPS和GPRS模块全部都用原子的模块。GPS连接串口2 ,GPRS连接串口3,向串口3发送AT指令想把GPS数据以短信的形式发送到手机。代码如下。难道是不能 用4G的移动卡发么?
[mw_shl_code=c,true]#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include "usart2.h" #include "lcd.h" #include "gps.h" #include "usart3.h" u8 USART1_TX_BUF[USART2_MAX_RECV_LEN]; /*?®??1,·????????? ×??ó?????®??2?????????????÷?????? ?ó???á×??®??2???????®??1??·???????*/ nmea_msg gpsx; //GPS???? __align(4) u8 dtbuf[50]; //?ò???????÷ //const u8*fixmode_tbl[4]={"Fail","Fail"," 2D "," 3D "}; //fix mode×?·??® u8 count_1=0; u8 command_1[15]="AT+CSCS=\"GSM\"\r\n"; u8 count_2=0; u8 command_2[11]="AT+CMGF=1\r\n"; u8 count_3=0; u8 command_3[23]="AT+CMGS=\"177****5507\"\r\n";// u8 count_4=0; u8 command_4[62]; // 16 15 10 9 10 //????GPS?¨?????? void Gps_Msg_Show(void) { float tp; u8 i=0; u8 i_offset=0; POINT_COLOR=BLUE; tp=gpsx.longitude; sprintf((char *)dtbuf,"longi:%.5f %1c ",tp/=100000,gpsx.ewhemi); //????????×?·??® LCD_ShowString(30,130,200,16,16,dtbuf); printf("?±?°??????%s\n",dtbuf); //°??±?°???????±·??????????ú while(i<16) { command_4[i++]=dtbuf[i_offset++]; } tp=gpsx.latitude; sprintf((char *)dtbuf,"lati:%.5f %1c ",tp/=100000,gpsx.nshemi); //????????×?·??® LCD_ShowString(30,150,200,16,16,dtbuf); printf("?±?°??????%s\n",dtbuf); //°??±?°???????±·??????????ú i_offset=0; while(i<31) { command_4[i++]=dtbuf[i_offset++]; } tp=gpsx.altitude; sprintf((char *)dtbuf,"Alti:%.1fm ",tp/=10); //????????×?·??® LCD_ShowString(30,170,200,16,16,dtbuf); printf("?±?°??????%s\n",dtbuf); //°??±?°???????±·??????????ú i_offset=0; while(i<41) { command_4[i++]=dtbuf[i_offset++]; } // tp=gpsx.speed; // sprintf((char *)dtbuf,"Speed:%.3fkm/h ",tp/=1000); //????????×?·??® // LCD_ShowString(30,190,200,16,16,dtbuf); sprintf((char *)dtbuf,"Valid:%02d",gpsx.posslnum); //?????¨?????????? LCD_ShowString(30,230,200,16,16,dtbuf); i_offset=0; while(i<50) { command_4[i++]=dtbuf[i_offset++]; } sprintf((char *)dtbuf,"Visible:%02d",gpsx.svnum%100); //?????????? LCD_ShowString(30,250,200,16,16,dtbuf); i_offset=0; while(i<62) { command_4[i++]=dtbuf[i_offset++]; } /* sprintf((char *)dtbuf,"UTC Date:%04d/%02d/%02d ",gpsx.utc.year,gpsx.utc.month,gpsx.utc.date); //????UTC???? //printf("year2:%d\r\n",gpsx.utc.year); LCD_ShowString(30,270,200,16,16,dtbuf); sprintf((char *)dtbuf,"UTC Time:%02d:%02d:%02d ",gpsx.utc.hour,gpsx.utc.min,gpsx.utc.sec); //????UTC?±?? LCD_ShowString(30,290,200,16,16,dtbuf); */ } int main(void) { //GPRS u8 key2; u8 key3; u16 ii=0; u8 send_usart3=0; u8 key_temp; u16 i,rxlen,lenx; //u8 upload=0; u8 key=0xFF; delay_init(); //???±?????????? NVIC_Configuration(); //?è??NVIC????·?×é2:2??????????????2???ì???????? uart_init(9600); //?®??1????????9600 USART2_Init(38400); //?®??2????????38400 USART3_Init(38400); LED_Init(); //LED?????????? KEY_Init(); //????????°??ü?????????????? LCD_Init(); //??????LCD POINT_COLOR=RED; LCD_ShowString(30,70,200,16,16,"----GPS Test----"); LCD_ShowString(30,90,200,16,16,"Chailang SB"); //GPS???é?????????? if(Ublox_Cfg_Rate(1000,1)!=0) //?è???¨???????ü????????1000ms,??±?????GPS???é??·?????. { LCD_ShowString(30,120,200,16,16,"NEO-6M Setting..."); while((Ublox_Cfg_Rate(1000,1)!=0)&&key) //????????,?±???????ì?é??NEO-6M,??????±??????? { USART2_Init(9600); //???????®??2?¨??????9600(EEPROM????±??????????±?ò,?¨??????9600.) Ublox_Cfg_Prt(38400); //?????è?????é???¨??????38400 Ublox_Cfg_Tp(1000000,100000,1); //?è??PPS??1????????1??,?????í????100ms key=Ublox_Cfg_Cfg_Save(); //±???????·?????0±í??±??????? ?????±?ò??????????&???±?ò?????á????while } LCD_ShowString(30,120,200,16,16,"NEO-6M Set Done!!"); delay_ms(500); LCD_Fill(30,120,30+200,120+16,WHITE);//???????? } //????GPS????×??? while(1) { key_temp=KEY_Scan(0); delay_ms(1); if(USART2_RX_STA&0X8000) //???®??2????????????×??????ò?????????????????? { rxlen=USART2_RX_STA&0X7FFF; //?????????¤?? for(i=0;i<rxlen;i++)USART1_TX_BUF=USART2_RX_BUF; USART2_RX_STA=0; //?????®??2????????????×???????×?±??????????????? USART1_TX_BUF=0; //×????í???á??·? GPS_Analysis(&gpsx,(u8*)USART1_TX_BUF);//·???×?·??® Gps_Msg_Show(); //???????? //if(upload)printf("\r\n%s\r\n",USART1_TX_BUF);//·??????????????????®??1 } /* key=KEY_Scan(0); if(key==KEY_RIGHT) { upload=!upload; POINT_COLOR=RED; if(upload)LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:ON "); else LCD_ShowString(30,100,200,16,16,"NMEA Data Upload:OFF"); }*/ // if((lenx%500)==0)LED0=!LED0; // lenx++; //GRPS key2=key_temp; if(key2==KEY_LEFT) { send_usart3=!send_usart3; if(send_usart3) { LCD_ShowString(30,300,200,16,16,"Message is sending``` "); printf("The data form USART3:\r\n"); while(ii<rxlen) { USART_SendData(USART3,USART2_RX_BUF[ii++]); delay_ms(10); }ii=0; } else { LCD_ShowString(30,300,200,16,16,"MB``` "); } } key3=key_temp; if(key3==KEY_RIGHT) { while(count_1<15) { USART_SendData(USART3,command_1[count_1++]); delay_ms(1); } count_1=0; delay_ms(50); while(count_2<11) { USART_SendData(USART3,command_2[count_2++]); delay_ms(1); } count_2=0; delay_ms(50); while(count_3<23) { USART_SendData(USART3,command_3[count_3++]); delay_ms(1); } count_3=0; delay_ms(50); while(count_4<62) { USART_SendData(USART3,command_4[count_4++]); delay_ms(1); } count_4=0; delay_ms(500); USART_SendData(USART3,0x1A); LED1=0; } delay_ms(10); } } [/mw_shl_code]

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

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-8-20
在线时间
0 小时
 楼主| 发表于 2015-1-23 12:08:00 | 显示全部楼层
啊。。中文复制过来乱码啦。。。
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-8-20
在线时间
0 小时
 楼主| 发表于 2015-1-23 15:18:59 | 显示全部楼层
原子大哥求救呀
回复

使用道具 举报

14

主题

338

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
464
金钱
464
注册时间
2013-6-15
在线时间
15 小时
发表于 2015-1-23 18:27:07 | 显示全部楼层
注意短信长度
回复

使用道具 举报

24

主题

208

帖子

0

精华

高级会员

Rank: 4

积分
714
金钱
714
注册时间
2014-4-8
在线时间
160 小时
发表于 2015-1-23 21:32:23 | 显示全部楼层
我不知道你的代码完整吗,我只是简单的说一下,当然,也有可能说错,就是参考一下,好吧
最后还是要原子哥说说才好
1、你的代码没有unicode gbk 转换函数(并不是说你把串口2的东西发出去就算是发出去了,你要把你要发送短信的内容转换一下)。
2、发送短信还需要AT命令,我也没有看到AT命令,你去参考一下原子的sim900的例程吧。
建议你用usb-串口先调试一下吧
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-8-20
在线时间
0 小时
 楼主| 发表于 2015-1-23 22:54:12 | 显示全部楼层
回复【5楼】xinxian:
---------------------------------
嗯。  AT指令是有的   在开始的时候定义的  u8 command_1【】  这个数组
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-1-23 22:54:39 | 显示全部楼层
回复【5楼】xinxian:
---------------------------------
对的,建议很中肯.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-8-20
在线时间
0 小时
 楼主| 发表于 2015-1-23 23:12:44 | 显示全部楼层
回复【7楼】正点原子:
---------------------------------
原子哥。 我用移动的4G卡应该可以的吧。 因为我看你的说明文档里说只能用2G卡
回复

使用道具 举报

3

主题

14

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2014-8-20
在线时间
0 小时
 楼主| 发表于 2015-1-23 23:43:17 | 显示全部楼层
回复【5楼】xinxian:
---------------------------------
嗯 谢啦哥们
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-26 13:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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