打印
[STM32F1]

STM32+GSM 检测GSM模块工作状态

[复制链接]
1098|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenho|  楼主 | 2021-11-5 22:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主函数部分
#include "sim900a.h"
#include "usart2.h"
#include "delay.h"
#include "sys.h"
#include "string.h"

int main(void)
{
        u8 res;
        delay_init();                     //延时函数初始化         
        NVIC_Configuration();          //设置NVIC中断分组2:2位抢占优先级,2位响应优先级         LED_Init();                             //LED端口初始化
        USART2_Init(115200);        //初始化串口2
        USART3_Init(9600);        //LOG信息
        UART3SendString("系统初始化完毕\r\n",strlen("系统初始化完毕\r\n"));        
        
        while(1)
        {
                res=GSM_Dect();
                delay_ms(2000);
                if(!res)        
                {
                        while(1);
                }
        }
}

使用特权

评论回复
沙发
zwll| | 2021-11-5 23:01 | 只看该作者

串口初始化
void USART1_Config(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        USART_InitTypeDef USART_InitStructure;

        /* 使能 USART1 时钟*/
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

        /* USART1 使用IO端口配置 */   
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //复用推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &GPIO_InitStructure);   
  
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;        //浮空输入
  GPIO_Init(GPIOA, &GPIO_InitStructure);   //初始化GPIOA
         
        /* USART1 工作模式配置 */
        USART_InitStructure.USART_BaudRate = 9600;        //波特率设置:115200
        USART_InitStructure.USART_WordLength = USART_WordLength_8b;        //数据位数设置:8位
        USART_InitStructure.USART_StopBits = USART_StopBits_1;         //停止位设置:1位
        USART_InitStructure.USART_Parity = USART_Parity_No ;  //是否奇偶校验:无
        USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;        //硬件流控制模式设置:没有使能
        USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;//接收与发送都使能
        USART_Init(USART1, &USART_InitStructure);  //初始化USART1
        USART_Cmd(USART1, ENABLE);// USART1使能
}

使用特权

评论回复
板凳
chenho|  楼主 | 2021-11-5 23:03 | 只看该作者
发送一个字节数据
void UART1SendByte(unsigned char SendData)
{           
        USART_SendData(USART1,SendData);
        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);            
}  

使用特权

评论回复
地板
chenho|  楼主 | 2021-11-5 23:05 | 只看该作者
接收一个字节数据*/
unsigned char UART1GetByte(unsigned char* GetData)
{              
        if(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
        {  return 0;//没有收到数据
                }
        *GetData = USART_ReceiveData(USART1);
        return 1;//收到数据
}

使用特权

评论回复
5
chenho|  楼主 | 2021-11-5 23:07 | 只看该作者
接收一个数据,马上返回接收到的这个数据*/
void UART1Test(void)
{
       unsigned char i = 0;

       while(1)
       {   
                                while(UART1GetByte(&i))
        {
         USART_SendData(USART1,i);
        }      
       }     
}

使用特权

评论回复
6
chenho|  楼主 | 2021-11-5 23:09 | 只看该作者

//usmart支持部分
//将收到的AT指令应答数据返回给电脑串口
//mode:0,不清零USART2_RX_STA;
//     1,清零USART2_RX_STA;
void sim_at_response(u8 mode)
{
        if(USART2_RX_STA&0X8000)                //接收到一次数据了
        {
                USART2_RX_BUF[USART2_RX_STA&0X7FFF]=0;//添加结束符
                printf("%s",USART2_RX_BUF);        //发送到串口
                if(mode)USART2_RX_STA=0;               
        }
}

使用特权

评论回复
7
chenho|  楼主 | 2021-11-5 23:12 | 只看该作者

嗯,预料中的结果,多谢大家啦

使用特权

评论回复
8
paotangsan| | 2021-12-3 13:32 | 只看该作者
是需要发送at指令的那种吗

使用特权

评论回复
9
renzheshengui| | 2021-12-3 13:33 | 只看该作者
都有什么状态参数啊

使用特权

评论回复
10
tpgf| | 2021-12-3 13:36 | 只看该作者
这个是那种通讯模块吗

使用特权

评论回复
11
wakayi| | 2021-12-3 13:37 | 只看该作者
需要对模块进行初始化吗

使用特权

评论回复
12
wowu| | 2021-12-3 13:39 | 只看该作者
是需要插电话卡的那种吗

使用特权

评论回复
13
xiaoqizi| | 2021-12-3 14:33 | 只看该作者
有哪些参数是我们需要的呢

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

748

主题

9853

帖子

5

粉丝