SIM800C我的風格 看流程AT

2021-10-01 02:03:48 字數 2804 閱讀 3270

#include "sim800c.h"

#include "gtimer.h"

#include "gkbaseusart.h"

void post_data_stream_to_onenet(void);

char sim_init(void);

static gk_usartbase_type *puart=null;

//++++++++++++使用串列埠框架+++++++++++//

typedef struct

timeflagtype;

timeflagtype t***;

#define receive_max 2048

typedef struct

lbdatatype;

lbdatatype udata;

//++++++++++++使用串列埠框架+++++++++++//

//一共3個腳

#define simrst_gpio_port gpiob

#define simrst_pin gpio_pin_2

#define simrst1 hal_gpio_writepin(simrst_gpio_port, simrst_pin, gpio_pin_set);

#define simrst0 hal_gpio_writepin(simrst_gpio_port, simrst_pin, gpio_pin_reset);

void usart_timer_isr(void) }}

void modesimrxbyte(uint8_t ch)

uint8_t rxbuf[200];

void puart_init(void)

void modesim_resert( void )

void modesim_init(void)

void modesim_send(uint8_t *tx , uint16_t txlen )

void modesim_clear(void)

uint8_t modesim_txrx_l1(uint8_t *tx , uint16_t txlen , uint8_t *rx,uint16_t *rxlen )

hal_delay(10);

//printf("cnt=%d\r\n",cnt);

} memset(&udata,0,sizeof(lbdatatype));

memset(&t***,0,sizeof(timeflagtype));

if(ack==0)

return 0;

printf("tx[%s]\r\n",tx);

printf("rx[%s]rxlen=%d \r\n",rx,*rxlen);

return 1;

}//txrx 攜帶返回比較

uint8_t modesim_txrx_l2(void *tx , uint16_t length , uint8_t repert , void *checkdata)

; uint16_t rxlen=0;

while (1)

memset(rx,0,sizeof(rx));

memset(rxbuf,0,sizeof(rxbuf));

if( modesim_txrx_l1(tx , length ,(uint8_t*)rx , &rxlen) )

}if(repert != 0xff)

}}uint8_t modesim_power_on( void )

printf("gsm開機失敗\n");

return 0;

}#include "sim_init_touch.h"

void gsmtest(void)

//++++++++++gkoson風格++++++++++++++//

typedef struct _attype_

_attype;

const _attype atbank =,,,

,,,,//回答很多次creg: 0,2最後終於回答creg: 0,1

,//回答很多次error最後終於回答ok,,

,//一次ok =0是單鏈結 =1是多連線

,//一次ok,,

,,,,//onenet

};/*連線onenet不容易一次成功

一般如下:tx以後不會立刻回答連線狀態 而是馬上回ok 過來很久很久才回答0, connect ok

而我是急性子 我tx以後只拿到ok 我就再次tx 所以我拿到already connect

tx[at+cipstart=0,"tcp","183.230.40.33",80

]rx[

ok]rxlen=6

tx[at+cipstart=0,"tcp","183.230.40.33",80

]rx[

error

0, already connect

*/#define fun_chk( fun,id) \

do\else \

}\}while(0)

char sim_init(void)

; while(modesim_txrx_l2(at.at , atlen ,50, at.chk)==0)

printf("at send ok now send msg\r\n");

modesim_send((uint8_t *)msg ,len );

}void post_data_stream_to_onenet(void)

SIM800C模組TCP透傳模式AT設定

1 gprs伺服器tcp ip配置 at 檢查模組工作 at ipr 38400 設定波特率 at w 儲存設定 at cpin?查詢網路註冊情況 at csq 查詢訊號質量。at creg?查詢gsm網路註冊狀態 at cgreg?查詢gprs網路註冊狀態 at cgatt 1 使模組附著gprs...

用彙編的眼光看C (之退出流程)

無論是在判斷還是在迴圈的過程中,通常在遇到合適的條件的時候就會退出相應的模組。跳出模組執行的方式很多,break,continue,return都可以。下面我們就可以分別對他們進行將介紹。1 continue只能用於迴圈,而break迴圈 判斷都可以應用。兩者有什麼區別呢?view plain 21...

用彙編的眼光看C (之退出流程)

無論是在判斷還是在迴圈的過程中,通常在遇到合適的條件的時候就會退出相應的模組。跳出模組執行的方式很多,break,continue,return都可以。下面我們就可以分別對他們進行將介紹。1 continue只能用於迴圈,而break迴圈 判斷都可以應用。兩者有什麼區別呢?21 for int m ...