基于STM32L4+BC28(全网通) NBIOT开发板原理图教程源码等开...

2020-02-29 10:46发布

基于STM32L4+BC28(全网通) NBIOT开发板原理图教程源码等开源分享
FCORE_BC28L4 NB-iot原理图、教程和源码资料下载见附件,电脑登入
源码 {MOD}链接:https://pan.baidu.com/s/18gkI9U1sVvauu_VzuUjauA
提取码:6yd2
1.jpg 2.png
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
20条回答
mmuuss586
2020-03-02 22:23
void _BC28_SET_(void);

添加完宏定义后再给自己添加的xxx.c文件添加对应函数如下:
******************************驻网测试函数***************************
void _BC28_SET_(void)
{
        _DEBUGE_FLEG=0;

        //关闭操作标志位;
//                _BC28_RESET_();

        printf("AT+NRB ");
        HAL_Delay(2000);
        _BC28_CMD_(CMD_ECHO,                             DCT_OK,300,4);
        _BC28_CMD_(CMD_CUFN_ASK,                                                DCT_CUFN_ASK_1,300,4);
        _BC28_CMD_(CMD_CUFN_SET,                                                        DCT_OK,300,4);
        _BC28_CMD_(CMD_EDRX_SET,                                                        DCT_OK,300,4);
        _BC28_CMD_(CMD_NCDP,                                                                        DCT_OK,1000,4);
        _BC28_CMD_(CMD_NCDP_ASK,                                                        DCT_OK,300,4);
        _BC28_CMD_(CMD_CGATT_SET,                                DCT_OK,300,2);
        _BC28_SIGNALASK_();
        if(_BC28_CMD_(CMD_CGATT_ASK,                                DCT_ADCGATT1,2000,4))
        {
                        HAL_GPIO_WritePin(STATE_LED_GPIO_Port, STATE_LED_Pin, GPIO_PIN_SET);
        }
        _BC28_CMD_(CMD_CGPADDR,                                                                DCT_OK,300,4);
        _BC28_CMD_(CMD_NNMI_SET,                                                        DCT_OK,300,4);
        _BC28_CMD_(CMD_NSMI_SET,                                                        DCT_OK,300,4);
        _BC28_CMD_(CMD_NNMI_ASK,                                                        DCT_MNMI_1,300,4);
        _BC28_CMD_(CMD_NSMI_ASK,                                                        DCT_NSMI_1,300,4);
        HAL_Delay(200);
        if(_BC28_CMD_1(CMD_send_TexT,                                        DCT_RCVE,600,3,4))
        {
                _BC28_SET_();
        }
        _BC28_CMD_(CMD_AT,                                                                                DCT_OK,300,20);
HAL_GPIO_WritePin(STATE_LED_GPIO_Port,STATE_LED_Pin,GPIO_PIN_RESET);       
_DEBUGE_FLEG=1;
}
        这个测试函数的基本操作首先使用发送AT+NRB对模块进行重启,重启的过程大概需要2s左右,所以这里需要做相应的延时,防止后面命令发出去后被忽略,重启后使用char _BC28_CMD_(char* pstr_CMD,char* pstr_DCT,int delay_us,int MAXTRY)发送对应命令进行设置,从上图中可以看到基本都是最这个函数的调用,而这个函数实际是将串口的发送函数进行封装了,里面添加了延时,发送次数等参数的设置,熟悉C编程的朋友看到这里也就明白了,我们                    实际也是使用printf函数进行命令的发送,这里涉及到对串口发送函数的重定向。发送函数的重定向可以使用直接用寄存器进行,memset()和strstr()函数需要包含string.h头文件,由于用到printf函数所以还需要xxx.h文件开头添加如下是代码:
xxx.c文件中添加如下代码
***************************xxx.c中命令发送函数**********************
char _BC28_CMD_1(char* pstr_CMD,char* pstr_DCT,int delay_us,int MAXTRY,int MAXWAT)
{
        char *strx;
        int i=0,j=0;
        memset(RX_BUFFER_lp, NULL, 200);
        strx=NULL;
        while(strx==NULL && j < MAXTRY)
        {
                memset(RX_BUFFER_lp, NULL, 50);
                HAL_Delay(50);
                printf("%s",pstr_CMD);
                j++;
                i=0;
                while(strx==NULL && i < MAXWAT)
                {
                        strx=strstr((const char*)RX_BUFFER_lp,(const char*)pstr_DCT);
                        HAL_Delay(delay_us);
                        i++;
                }
        }
        if(strx==NULL )
        {
                return 0;
        }
        else
        {
                return 1;
        }
}

char _BC28_CMD_(char* pstr_CMD,char* pstr_DCT,int delay_us,int MAXTRY)
{
        char *strx;
        int i=0;
        memset(RX_BUFFER_lp, NULL, 200);
        strx=NULL;
        HAL_Delay(50);
        while(strx==NULL && i < MAXTRY)
        {
                memset(RX_BUFFER_lp, NULL, 200);
                printf("%s",pstr_CMD);    //???lpuart????????
                HAL_Delay(delay_us);
                strx=strstr((const char*)RX_BUFFER_lp,(const char*)pstr_DCT);
                i++;
        }
        if(strx==NULL )
                {
                        return 0;
                }
                else
                        {
                                return 1;
                        }
}
char _BC28_SIGNALASK_(void)
{
        memset(RX_BUFFER_lp, NULL, 200);
        char CSQ=99;
        char *strx;
        int i=0,j=0;
        strx=NULL;
        HAL_Delay(50);
        while(strx==NULL && i < 30 )
        {
                printf("%s",CMD_CSQ);                                                                               
                HAL_Delay(200);
                strx=strstr((const char*)RX_BUFFER_lp,(const char*)DCT_ADCSQ);
                i++;
                if(strx)
                        {
                                CSQ=(strx[5]-0x30)*10+(strx[6]-0x30);
                                if(CSQ==99)
                                        {
                                                memset(RX_BUFFER_lp, NULL, 50);
                                                while(CSQ==99 && j < 300)
                                                {
                                                        printf("%s",CMD_CSQ);                                                                                ֵ
                                                        HAL_Delay(400);
                                                        strx=strstr((const char*)RX_BUFFER_lp,(const char*)DCT_ADCSQ);
                                                        CSQ=(strx[5]-0x30)*10+(strx[6]-0x30);
                                                        j++;
                                                }
                                        }
                                }
                        }
        if(CSQ==99)
        {
                return 0;
        }
        else
                {
                        return CSQ;
                }
        }
char _BC28_SIGNALASK_(void)
{
        memset(RX_BUFFER_lp, NULL, 200);
        char CSQ=99;
        char *strx;
        int i=0,j=0;
        strx=NULL;
        HAL_Delay(50);
        while(strx==NULL && i < 30 )
        {
                printf("%s",CMD_CSQ);                                                                                //查看获取CSQ值
                HAL_Delay(200);
                strx=strstr((const char*)RX_BUFFER_lp,(const char*)DCT_ADCSQ);
                i++;
                if(strx)
                        {
                                CSQ=(strx[5]-0x30)*10+(strx[6]-0x30);//信号转码
                                if(CSQ==99)
                                        {
                                                memset(RX_BUFFER_lp, NULL, 50);
                                                while(CSQ==99 && j < 300)
                                                {
                                                        printf("%s",CMD_CSQ);                                                                                //查看获取CSQ值
                                                        HAL_Delay(400);
                                                        strx=strstr((const char*)RX_BUFFER_lp,(const char*)DCT_ADCSQ);
                                                        CSQ=(strx[5]-0x30)*10+(strx[6]-0x30);//信号转码
                                                        j++;
                                                }
                                        }
                                }
                        }
        if(CSQ==99)
        {
                return 0;
        }
        else
                {
                        return CSQ;
                }
        }

一周热门 更多>