OpenEdv-开源电子网

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

sim900a没有任何反应

[复制链接]

9

主题

41

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2016-2-29
在线时间
25 小时
发表于 2016-4-5 17:38:19 | 显示全部楼层 |阅读模式
1金钱
sim900a.c
u8 USART3_RX_BUF[USART3_MAX_RECV_LEN];                                 //½óêÕ»o3å,×î′óUSART3_MAX_RECV_LEN¸ö×Ö½ú.
u8  USART3_TX_BUF[USART3_MAX_SEND_LEN];                         //·¢Ëí»o3å,×î′óUSART3_MAX_SEND_LEN×Ö½ú
//15:1½óêÕμ½êy¾Y£¬0û½óêÕμ½êy¾Y
//[14:0]:½óêÕμ½μÄêy¾Y3¤¶è
vu16 USART3_RX_STA=0;   //unsigned short int

void USART3_IRQHandler(void)
{
        u8 res;
        if(USART_GetITStatus(USART3,USART_IT_RXNE)!=RESET)//½óêÕμ½êy¾Y
        {
                res=USART_ReceiveData(USART3);
                if(USART3_RX_STA&(1<<15)==0)//&#187;1&#206;′&#189;óêüíê&#213;a&#197;úêy&#190;Y,2&#187;&#196;ü&#189;óê&#213;&#198;&#228;&#203;&#251;êy&#190;Y
                {
                        if(USART_RX_STA<USART3_MAX_RECV_LEN)//&#187;o3&#229;&#199;&#248;&#195;&#187;óD&#194;ú£&#172;&#187;1&#191;é&#189;óê&#213;
                        {
                                //′&#203;ê±ó|&#189;&#171;&#188;&#198;êy&#198;÷&#199;&#229;&#191;&#213;,&#214;&#216;D&#194;&#191;aê&#188;&#188;&#198;ê±£&#172;&#188;&#198;êy&#198;÷3ìDò&#195;&#187;D′
                                TIM_SetCounter(TIM2,0);
                                ///////////////////////////////////////////////////
                                if(USART_RX_STA==0)
                                {
                                       
                                        TIM_Cmd(TIM2,ENABLE);//ê1&#196;ü&#182;¨ê±&#198;÷μ&#196;&#214;D&#182;&#207;
                                }
                                USART3_RX_BUF[USART3_RX_STA++]=res;//&#188;&#199;&#194;&#188;ê&#213;μ&#189;μ&#196;&#214;μ
                        }else
                        {
                                        USART_RX_STA|=1<<15;//&#199;&#191;&#214;&#198;±êê&#190;&#206;a&#189;óê&#213;íê3é
                        }
               
                }
        }
}

//3&#245;ê&#188;&#187;ˉ′&#174;&#191;ú3
void usart3_init(u32 bound)
{
        NVIC_InitTypeDef NVIC_InitStructure;//&#182;¨ò&#229;3&#245;ê&#188;&#187;ˉ&#189;á11ì&#229;
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;
        //×¢òa′&#174;&#191;ú3ê±&#214;óê&#199;1ò&#212;&#216;&#212;úAPB1×ü&#207;&#223;é&#207;
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);        // GPIOBê±&#214;ó
        RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3,ENABLE); //′&#174;&#191;ú3ê±&#214;óê1&#196;ü
       
        USART_DeInit(USART3);//&#184;′&#206;&#187;′&#174;&#191;ú3
        //USART3_TX PB10  
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;//PB10
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;//&#184;′ó&#195;í&#198;íìê&#228;3&#246;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//ê&#228;3&#246;&#198;μ&#194;ê50MHz
        GPIO_Init(GPIOB,&GPIO_InitStructure);//&#189;á11ì&#229;&#212;a&#203;&#216;D′è&#235;&#189;á11ì&#229;
        // USART3_RX PB11
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//PB11
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;//&#184;&#161;&#191;&#213;ê&#228;è&#235;
        GPIO_Init(GPIOB,&GPIO_InitStructure);//3&#245;ê&#188;&#187;ˉPB11
       
        USART_InitStructure.USART_BaudRate=bound;//2¨ì&#216;&#194;ê9600
        USART_InitStructure.USART_HardwareFlowControl=USART_HardwareFlowControl_None;//&#206;Tó2&#188;tá÷&#191;&#216;&#214;&#198;
        USART_InitStructure.USART_Mode=USART_Mode_Rx | USART_Mode_Tx;//′&#174;&#191;úê&#213;·¢&#196;£ê&#189;
        USART_InitStructure.USART_Parity=USART_Parity_No;//&#206;TD£&#209;é
        USART_InitStructure.USART_StopBits=USART_StopBits_1;//1&#206;&#187;í£&#214;1&#206;&#187;
        USART_InitStructure.USART_WordLength=USART_WordLength_8b;//×&#214;3¤&#206;a8&#206;&#187;
       
        USART_Init(USART3,&USART_InitStructure);//D′è&#235;&#189;á11ì&#229;
       
        USART_Cmd(USART3,ENABLE);//ê1&#196;ü′&#174;&#191;ú
       
        USART_ITConfig(USART3,USART_IT_RXNE,ENABLE);//&#191;a&#198;&#244;′&#174;&#191;ú&#214;D&#182;&#207;
        //éè&#214;&#195;&#214;D&#182;&#207;ó&#197;&#207;è&#188;&#182;
        NVIC_InitStructure.NVIC_IRQChannel=USART3_IRQn;
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=2;//&#199;à&#213;&#188;ó&#197;&#207;è&#188;&#182;2
        NVIC_InitStructure.NVIC_IRQChannelSubPriority=3;//&#207;ìó|ó&#197;&#207;è&#188;&#182;3
        NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
        NVIC_Init(&NVIC_InitStructure);
        //////&#187;1Dèéè&#214;&#195;&#182;¨ê±&#198;÷&#214;D&#182;&#207;£&#172;3&#172;1y10ms×&#212;&#182;ˉ·&#197;&#198;ú±&#190;′&#206;&#189;óê&#213;
       
        //TIM2_Init(99,7199);//&#182;¨ê±10ms
        //TIM2_Int_Init(99,7199);
        USART3_RX_STA=0;//&#199;&#229;0 ±ê&#214;&#190;
        TIM_Cmd(TIM2,DISABLE);//1&#216;±&#213;&#182;¨ê±&#198;÷2
       
}

///////////////////////////////////////////////////////////////////////////////
//′&#174;&#191;ú3 printfoˉêy
void u3_printf(char*fmt,...)
{
        va_list ap;
        u16 i,j;
        va_start(ap,fmt);
        vsprintf((char*)USART3_TX_BUF,fmt,ap);
        va_end(ap);
        i=strlen((const char*)USART3_TX_BUF);                //′&#203;′&#206;·¢&#203;íêy&#190;Yμ&#196;3¤&#182;è);
        for(j=0;j<i;j++)                                                        //&#209;-&#187;··¢&#203;íêy&#190;Y
        {
          while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET); //&#209;-&#187;··¢&#203;í,&#214;±μ&#189;·¢&#203;ííê±&#207;   
                USART_SendData(USART3,USART3_TX_BUF[j]);
        }
}

////////////////////////////////////////////////////////////////////////
//str:&#198;ú′yμ&#196;ó|′e&#189;á1&#251;//0:NULL&#195;&#187;óDμ&#195;μ&#189;&#198;ú′y&#189;á1&#251;
//′ó&#189;óê&#213;μ&#189;μ&#196;USART3_RX_BUF&#214;D&#209;°&#213;òstr,è&#244;óD£&#172;·μ&#187;&#216;&#214;μ&#206;astr
u8* sim900a_check_cmd(u8 *str)
{
        char *strx;
        if(USART3_RX_STA&0X8000)//&#189;óê&#213;μ&#189;ò&#187;′&#206;êy&#190;Y
        {
                USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//ìí&#188;ó&#189;áê&#248;·&#251;
                strx=strstr((const char*)USART3_RX_BUF,(const char*)str);
        }
        return (u8*)strx;
}
///////////////////////////////////////////
//·μ&#187;&#216;&#214;μ0:&#189;óê&#213;3é1|1:&#189;óê&#213;ê§°ü
//cmd:·¢&#203;íμ&#196;&#195;üá&#238;ack:&#198;ú′yμ&#196;ó|′e&#189;á1&#251;waittime:μè′yê±&#188;&#228; μ¥&#206;&#187;:10ms
u8 sim900a_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
        u8 res=0;//&#212;ú3ìDò&#214;Dresμ&#196;&#214;μ±£3&#214;&#206;a0&#212;ò&#206;a3é1|&#189;óê&#213;
        USART3_RX_STA=0;
        if((u32)cmd<=0xff)
        {
                while((USART3->SR&0X40)==0);//μè′yé&#207;ò&#187;′&#206;êy&#190;Y·¢&#203;ííê3é
                USART3->DR=(u32)cmd;//êy&#190;Y·&#197;è&#235;data&#188;&#196;′&#230;&#198;÷
        }else u3_printf("%s\r\n",cmd);//·¢&#203;í&#195;üá&#238;
        if(ack&&waittime)//μè′yó|′e
        {
                while(--waittime)//waittime*10ms
                {
                        delay_ms(10);
                        if(USART3_RX_STA&0X8000)
                        {
                                if(sim900a_check_cmd(ack))break;//μ&#195;μ&#189;óDD§êy&#190;Y
                                USART_RX_STA=0;
                        }
                }
                if(waittime==0)res=1;//μè′yê±&#188;&#228;ò&#209;μ&#189;£&#172;&#187;1&#206;Tó|′e,&#212;ò&#189;óê&#213;ê§°ü
        }
        return res;       
}

main.c


while(1)
        {     
                if(sim900a_send_cmd(p,"OK",1000)==0)
                {
                 aa++;
                 sprintf((char*)ADD,"%d",aa);
                 OLED_ShowStr(62,2,ADD,2);

                }
       }
给sim900a发at,返回ok就让oled显示的数加1,但为啥就是没反应呢?


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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2016-4-6 22:17:55 | 显示全部楼层
直接连电脑串口调试下试试.
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-19 02:31

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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