OpenEdv-开源电子网

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

求助GSM模块和STM32的问题!!!!

[复制链接]

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
发表于 2016-10-25 12:39:56 | 显示全部楼层 |阅读模式
1金钱
我用USB转TTL分别测GSM和STM32的串口收发数据都能够正常使用,,可是stm32f发送的AT指令没有返回是怎么回事,,谢谢各位大侠帮助了

最佳答案

查看完整内容[请看2#楼]

找到问题了,,USART1是转到USB上了,,重新配置了一个串口就可以了
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
 楼主| 发表于 2016-10-25 12:39:57 | 显示全部楼层
yuzeyuan1 发表于 2016-10-26 08:20
AT指令改为uint8试试,不要加空格,你的AT指令里好多空格,模块自动识别的是\r\n,我没试过前面加空格还行 ...

找到问题了,,USART1是转到USB上了,,重新配置了一个串口就可以了
回复

使用道具 举报

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
 楼主| 发表于 2016-10-25 12:40:37 | 显示全部楼层
分别测试收发都是正常的,,可是两个连接在一起就不行了
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
发表于 2016-10-25 13:08:32 | 显示全部楼层
统一波特率,再不对感觉就是你代码里写的AT指令格式不对了。。。要不你发一个代码看看
自在随心
回复

使用道具 举报

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
 楼主| 发表于 2016-10-25 13:11:09 | 显示全部楼层
void Usart_sendByte(char Data) {         while(!(USART_FLAG_TXE & USART1->SR));         USART1->DR = (Data & 0x00FF);         while(!(USART1->SR & USART_FLAG_TC)); }   void Usart_sendStr(char *str) {         while(*str != '\0')         {                 Usart_sendByte(*str++);         } }
回复

使用道具 举报

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
 楼主| 发表于 2016-10-25 13:11:23 | 显示全部楼层
void Usart_sendByte(char Data)
{
        while(!(USART_FLAG_TXE & USART1->SR));
        USART1->DR = (Data & 0x00FF);
        while(!(USART1->SR & USART_FLAG_TC));
}


void Usart_sendStr(char *str)
{
        while(*str != '\0')
        {
                Usart_sendByte(*str++);
        }
}
回复

使用道具 举报

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
 楼主| 发表于 2016-10-25 13:11:56 | 显示全部楼层
yuzeyuan1 发表于 2016-10-25 13:08
统一波特率,再不对感觉就是你代码里写的AT指令格式不对了。。。要不你发一个代码看看

void Usart_sendByte(char Data)
{
        while(!(USART_FLAG_TXE & USART1->SR));
        USART1->DR = (Data & 0x00FF);
        while(!(USART1->SR & USART_FLAG_TC));
}


void Usart_sendStr(char *str)
{
        while(*str != '\0')
        {
                Usart_sendByte(*str++);
        }
}
回复

使用道具 举报

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
 楼主| 发表于 2016-10-25 13:13:37 | 显示全部楼层
yuzeyuan1 发表于 2016-10-25 13:08
统一波特率,再不对感觉就是你代码里写的AT指令格式不对了。。。要不你发一个代码看看

#define AT_CMD_AT "AT \r\n"
#define AT_CMD_ATE0  "ATE0 \r\n"
#define AT_CMD_CGATT "AT+CGATT = 1 \r\n"
#define AT_CMD_CGACT "AT+CGACT = 1,1\r\n"
#define AT_CMD_CIPSTART "AT+CIPSTART = \"TCP\",\"120.76.100.197\",10002   \r\n"
#define AT_CMD_CIPSEND "AT+CIPSEND = 20  \r\n"
回复

使用道具 举报

8

主题

45

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-10-25
在线时间
14 小时
 楼主| 发表于 2016-10-25 13:14:34 | 显示全部楼层
yuzeyuan1 发表于 2016-10-25 13:08
统一波特率,再不对感觉就是你代码里写的AT指令格式不对了。。。要不你发一个代码看看

波特率是一样的115200,,串口是按照给手册配置的
回复

使用道具 举报

83

主题

765

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2752
金钱
2752
注册时间
2015-6-1
在线时间
392 小时
发表于 2016-10-26 08:20:45 | 显示全部楼层
AT指令改为uint8试试,不要加空格,你的AT指令里好多空格,模块自动识别的是\r\n,我没试过前面加空格还行不行。
uint8 AT[] = "AT\r\n";

还不行的话,Usart_sendByte改用我这么写试试:
        while(temp<length-1)           //-1是因为取长度时最后一位会多出来一个0
        {
                while((USART3->SR&0X40)==0);  
                USART3->DR = cmd[temp];
                temp++;
        }
你确定用的是串口1发送的?
自在随心
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-23 08:33

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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