OpenEdv-开源电子网

标题: 关于STM32读取GSM模块的短信来控制电路的实现 [打印本页]

作者: 鹏程万里    时间: 2013-5-7 10:53
标题: 关于STM32读取GSM模块的短信来控制电路的实现
通过手机发送短信给GSM模块(sim300模块),STM32读取GSM收到的短信,按照短信来控制电路的灯亮或其他功能,请问该怎么实现,这段程序是实现接收的吗?按照这个写该怎么实现,附件是串口的源文件和GPRS发送短信的源文件,求指导接收短信怎么实现????

#ifdef EN_USART1_RX   //如果使能了接收
//串口1中断服务程序
//注意,读取USARTx->SR能避免莫名其妙的错误  
u8 USART_RX_BUF[64];     //接收缓冲,最大64个字节.
//接收状态
//bit7,接收完成标志
//bit6,接收到0x0d
//bit5~0,接收到的有效字节数目
u8 USART_RX_STA=0;       //接收状态标记  
  
void USART1_IRQHandler(void)
{
u8 res;    
if(USART1->SR&(1<<5))//接收到数据
{  
res=USART1->DR; 
if((USART_RX_STA&0x80)==0)//接收未完成
{
if(USART_RX_STA&0x40)//接收到了0x0d
{
if(res!=0x0a)USART_RX_STA=0;//接收错误,重新开始
else USART_RX_STA|=0x80; //接收完成了 
}else //还没收到0X0D
{
if(res==0x0d)USART_RX_STA|=0x40;
else
{
USART_RX_BUF[USART_RX_STA&0X3F]=res;
USART_RX_STA++;
if(USART_RX_STA>63)USART_RX_STA=0;//接收数据错误,重新开始接收  
}  
}
}       
}    
#endif


作者: 正点原子    时间: 2013-5-7 12:12
回复【楼主位】鹏程万里:
---------------------------------
明天看我们的GSM模块例程吧!
作者: 鹏程万里    时间: 2013-5-7 14:50
回复【2楼】正点原子:
---------------------------------
原子哥我想问下,这个是通过你那个串口程序改的发短信和打电话,但是收短信部分(就上面那段程序)有写,但是主程序里是没那部分功能的,想问下你现在那部分程序有实现的吗?
作者: 鹏程万里    时间: 2013-5-7 15:51
#ifndef __USART_H
#define __USART_H
#include <stm32f10x_lib.h>
#include "stdio.h"  
//串口1初始化    
extern u8 USART_RX_BUF[64];     //接收缓冲,最大63个字节.末字节为换行符 
extern u8 USART_RX_STA;         //接收状态标记

//#define EN_USART1_RX      //使能串口1接收
void uart_init(u32 pclk2,u32 bound);

#endif

这是你的串口程序头文件,为什么红色部分注释掉才行,红色部分加进去就会出现下面这个问题

..\Obj\STM32_SIM300_Lib202.axf: Error: L6200E: Symbol USART1_IRQHandler multiply defined (by usart.o and stm32f10x_it.o).
..\Obj\STM32_SIM300_Lib202.axf: Not enough information to list image symbols.
..\Obj\STM32_SIM300_Lib202.axf: Not enough information to list the image map.
..\Obj\STM32_SIM300_Lib202.axf: Finished: 2 information, 0 warning and 1 error messages.
Target not created



  

作者: 正点原子    时间: 2013-5-7 17:58
回复【3楼】鹏程万里:
---------------------------------
我们的包括:电话拨打/接听,短信发送/接收,GPRS数据传输。
作者: 117788674    时间: 2013-5-7 21:29
回复【5楼】正点原子:
---------------------------------
原子哥,我想问下。。。那个关于读取短信的。我是想读取中文短信,然后显示在T屏幕上面。我做了个码表,UNICODE-GBK的。。用查表法。。。但是无法精确的找出UNICODE码的位置。。就是有用的UNICODE码。。。希望能得到你的帮助与提示,想了好久了。!
作者: 正点原子    时间: 2013-5-7 21:33
回复【6楼】117788674:
---------------------------------
我的直接用的FATFS提供的UNIGBK转换表。
作者: 117788674    时间: 2013-5-7 21:39
回复【7楼】正点原子:
---------------------------------
额,是啊。。我也是用这个!我主要就是识别有效的起始UNICODE码。。。这个不知道该用什么办法!!论坛有人发过帖子,就是问--GSM短信中字符串的识别。。。你也在其中留言了。。但是没说出具体解决办法。。。望赐教。
作者: 鹏程万里    时间: 2013-5-8 09:41
回复【5楼】正点原子:
---------------------------------
我的版本是V1.3  , 这个没有,有其他新版本吗?能不能发一份参考(705270346@qq.com)非常感谢
作者: 正点原子    时间: 2013-5-8 10:34
回复【9楼】鹏程万里:
---------------------------------
回复【8楼】117788674:
---------------------------------
等我们资料吧
作者: worldisprose    时间: 2013-11-13 11:21
..\OBJ\库函数调用1.axf: Error: L6200E: Symbol USART1_IRQHandler multiply defined (by stm32f10x_it.o and usart.o).
..\OBJ\库函数调用1.axf: Not enough information to list image symbols.
..\OBJ\库函数调用1.axf: Not enough information to list the image map.
..\OBJ\库函数调用1.axf: Finished: 2 information, 0 warning and 1 error messages.


这是因为在stm32f10x_it。c 中已经有了串口中断响应函数的定义 USART1_IRQHandler() 。 

方法:1. 将
stm32f10x_it。c 中的 USART1_IRQHandler()屏蔽掉。
          2. 将你的中断响应函数直接写在
stm32f10x_it。c 中的USART1_IRQHandler()就可以了。
         (错误提示中很明显告诉你是 
USART1_IRQHandler 重复定义






作者: qi le rong rong    时间: 2014-11-24 20:31
楼主,请问你实现功能了吗?可不可以发代码我学习一下,497917869@qq.com,谢谢
作者: 活到老,学到老    时间: 2018-2-14 12:07
楼主在吗,可以请教一波吗?





欢迎光临 OpenEdv-开源电子网 (http://47.111.11.73/) Powered by Discuz! X3.4