OpenEdv-开源电子网

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

求助大神,stm32和sim900通信不正常,发什么接收什么,没有OK~~~!!!!!

[复制链接]

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-5-30
在线时间
0 小时
发表于 2014-5-30 14:49:58 | 显示全部楼层 |阅读模式
5金钱
我用USART2和sim900连接,接线没有问题,现在的情况是,我在测试其功能时发送"ATE1",只是返回了"ATE1",正常值应该返回"ATE1    OK   ",我给出主要代码,大家帮我看看

我的USART3连接GPS , USART2连接sim900, USART1连接上位机

如下是串口的中断部分:
[mw_shl_code=c,true]void NVIC_Configuration(void) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn; //通道设置为串口3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中断响应先占式优先级为2 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //中断响应从优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; //通道设置为串口2中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; //中断响应先占式优先级为1 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //中断响应从优先级0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); NVIC_InitStructure.NVIC_IRQChannel = WWDG_IRQn; //使能窗口定时器中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占式优先级为0 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }[/mw_shl_code]
USART2的中断程序
[mw_shl_code=c,true]void USART2_IRQHandler(void) { u8 i,j,k = 0; if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)//判断是否是接收中断 { //USART_ClearITPendingBit(USART2,USART_IT_RXNE);//清除接收中断位 GsmRcv[GsmRcvCnt] = USART_ReceiveData(USART2); GsmRcvCnt++; //j = strlen(GsmRcv); //delay_nms(50); //k = strlen(GsmRcv); printf("已进入串口2中断"); if(GsmRcvCnt >= 99) { GsmRcvCnt = 0; } if(GsmRcv[GsmRcvCnt-1] == 0x0A && GsmRcv[GsmRcvCnt-2] == 0x0D && GsmRcvCnt >=2 ) { printf("接收完毕"); USART_ITConfig(USART2,USART_IT_RXNE,DISABLE); //关闭USART2接收中断 gsm_num = GsmRcvCnt; printf("给gsm_num赋值"); GsmRcvCnt = 0; GsmAtFlag = 1; i = 0; while(GsmRcv != 0) { gsm_datas = GsmRcv; GsmRcv = 0; i++; printf("gsm_datas已有数据"); } printf("gsm_num: %d\n",strlen(gsm_datas)); for(i=0;i<99;i++) { printf("%c",gsm_datas); } //USART_ITConfig(USART2,USART_IT_RXNE,ENABLE); } } } [/mw_shl_code]
[mw_shl_code=c,true]u8 GPRSConnect(void) { u8 err=0; printf("进入GPRS"); SendAT("ATE1",4); printf("已发送ate1"); err=WaitForStr("OK",2,2); //ATE1 OK printf("已发送AT"); if(err == 0) { printf("ATE1 OK"); } if(err>0) return err; return err; } [/mw_shl_code]

[mw_shl_code=c,true]//发送AT指令 void SendAT(u8 *dat,u16 num) { USART2_Write(dat,num); USART2_SendByte(0x0D); USART2_SendByte(0x0A); }[/mw_shl_code]


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

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-5-30
在线时间
0 小时
 楼主| 发表于 2014-5-30 14:50:14 | 显示全部楼层
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-5-30
在线时间
0 小时
 楼主| 发表于 2014-5-30 14:55:39 | 显示全部楼层
原子哥 在吗????
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-5-30
在线时间
0 小时
 楼主| 发表于 2014-5-30 15:11:09 | 显示全部楼层
求助~~~~求好心人帮忙
回复

使用道具 举报

26

主题

261

帖子

1

精华

高级会员

Rank: 4

积分
734
金钱
734
注册时间
2013-11-1
在线时间
28 小时
发表于 2014-5-30 15:31:22 | 显示全部楼层
我觉得你首先要保证串口正常工作的,先用串口调试助手试一试串口程序是不是对的,然后在下一步,最主要的是要想法设法去找原因
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-31 01:16:35 | 显示全部楼层
回复【4楼】skyboy_23:
---------------------------------
你用串口助手调试下先
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-5-30
在线时间
0 小时
 楼主| 发表于 2014-5-31 17:41:04 | 显示全部楼层
回复【6楼】正点原子:
---------------------------------
原子哥,串口调试没有问题!我现在就是考虑如何确保sim900反馈信息的完整接收  您给个建议~~???
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-31 21:52:59 | 显示全部楼层
将电脑串口的RXD接在SIM900的TXD上,就可以用串口助手观察到SIM900的反馈信息了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

7

帖子

0

精华

新手上路

积分
31
金钱
31
注册时间
2014-5-30
在线时间
0 小时
 楼主| 发表于 2014-6-1 18:43:53 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
这个是没有问题的,我是用stm32的usart2和sim900相连,那如何确保32每次都完整的接收到了sim900的回馈信息呢???
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-6-1 20:49:08 | 显示全部楼层
检查指令返回值。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-7 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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