BC28 基于华为海思芯片平台研发,支持 B1/B3/B5/B8/B20/B28 频段,在 multi tone 模式下最大上行速率可达 62.5kbps。BC28 是一款超紧凑、高性能、低功耗的多频段 NB-IoT 无线通信模块。其尺寸仅为 17.7mm × 15.8mm × 2.0mm,能最大限度地满足终端设备对小尺寸模块产品的需求,同时有效地帮助客户减小产品尺寸并优化产品成本。BC28 在设计上兼容移远通信 GSM/GPRS 系列的 M26 模块,方便客户快速、灵活的进行产品设计和升级。
官方推荐使用流程

初始化代码
void BC28_Init(void)
{
HAL_TIM_Base_Start_IT(&htim6);
Clear_Buffer();
while(sim900a_send_cmd("AT","OK",200))
{
debug_log("NB-iot reset\r\n",14);
}
uint8_t cnt=0;
BC28_Status.netstatus=2;
while(sim900a_send_cmd("AT+CIMI","460",200))
{
debug_log("NB-iot reset\r\n",14);
}
while(sim900a_send_cmd("AT+CGATT=1","OK",200))
{
debug_log("NB-iot reset\r\n",14);
}
while(sim900a_send_cmd("AT+CGATT?","+CGATT:1",200))
{
debug_log("NB-iot reset\r\n",14);
}
BC28_Status.netstatus=1;
Clear_Buffer();
printf("AT+CSQ\r\n");
wait_for_bc28(300);
strx=strstr((const char*)Usart3Type.RX_pData,(const char*)"+CSQ");//·µ»ØCSQ
if(strx)
{
BC28_Status.CSQ=(strx[5]-0x30)*10+(strx[6]-0x30);//»ñÈ¡CSQ
if(BC28_Status.CSQ==99)//˵Ã÷É¨ÍøÊ§°Ü
{
while(1)
{
debug_log("ÐźÅËÑË÷ʧ°Ü£¬Çë²é¿´ÔÒò!\r\n",20);
HAL_Delay(300);
}
}
BC28_Status.netstatus=4;//×¢Íø³É¹¦
}
while(strx==NULL)
{
Clear_Buffer();
printf("AT+CSQ\r\n");//²é¿´»ñÈ¡CSQÖµ
wait_for_bc28(300);
strx=strstr((const char*)Usart3Type.RX_pData,(const char*)"+CSQ");//
if(strx)
{
BC28_Status.CSQ=(strx[5]-0x30)*10+(strx[6]-0x30);//»ñÈ¡CSQ
if(BC28_Status.CSQ==99)//˵Ã÷É¨ÍøÊ§°Ü
{
while(1)
{
debug_log("ÐźÅËÑË÷ʧ°Ü£¬Çë²é¿´ÔÒò!\r\n",20);
HAL_Delay(300);
}
}
BC28_Status.netstatus=4;//×¢Íø³É¹¦
}
}
while(sim900a_send_cmd("AT+CEREG=1","OK",200))
{
debug_log("NB-iot reset\r\n",14);
}
}
AT指令与应答检测程序
/**
* @brief 检测应答字符串
* @note
* @retern null
* @{
*/
uint8_t* sim900a_check_cmd(uint8_t *str)
{
char *strx=0;
if(Usart3Type.RX_flag == 1)
{
Usart3Type.RX_pData[Usart3Type.RX_Size]=0;
strx=strstr((const char*)Usart3Type.RX_pData,(const char*)str);
}
return (uint8_t*)strx;
}
/**
* @brief 发送AT指令并检测应答
* @note
* @retern null
* @{
*/
uint8_t sim900a_send_cmd(uint8_t *cmd,uint8_t *ack,uint16_t waittime)
{
uint8_t res=0;
Usart3Type.RX_flag = 0;
HAL_UART_Receive_DMA(&huart3,Usart3Type.RX_pData,RX_LEN);
__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
printf("%s\r\n",cmd);//
if(ack&&waittime) //
{
while(--waittime) //
{
HAL_Delay(10);
if(Usart3Type.RX_flag == 1)//
{
if(sim900a_check_cmd(ack))break;//
Usart3Type.RX_flag = 0;
HAL_UART_Receive_DMA(&huart3,Usart3Type.RX_pData,RX_LEN);
__HAL_UART_ENABLE_IT(&huart3, UART_IT_IDLE);
}
}
if(waittime==0)res=1;
}
return res;
}
建立TCP连接程序
void BC28_ConTCP(void)
{
printf("AT+NSOCL=1\r\n");//¹Ø±ÕsocektÁ¬½Ó
wait_for_bc28(300);
Clear_Buffer();
printf("AT+NSOCR=STREAM,6,56000,1\r\n");//´´½¨Ò»¸öSocket
wait_for_bc28(300);
strx=strstr((const char*)Usart3Type.RX_pData,(const char*)"OK");//·µ»ØOK
while(strx==NULL)
{
wait_for_bc28(300);
strx=strstr((const char*)Usart3Type.RX_pData,(const char*)"OK");//·µ»ØOK
}
BC28_Status.Socketnum=Usart3Type.RX_pData[2];//»ñÈ¡socketºÅÂë
Clear_Buffer();
printf("AT+NSOCO=%c,103.46.128.41,22091\r\n",BC28_Status.Socketnum);
wait_for_bc28(300);
strx=strstr((const char*)Usart3Type.RX_pData,(const char*)"OK");//·µ»ØOK
while(strx==NULL)
{
wait_for_bc28(300);
strx=strstr((const char*)Usart3Type.RX_pData,(const char*)"OK");//·µ»ØOK
}
Clear_Buffer();
BC28_TCPSenddata(1,"ID:123456789\r\n");
}

Comments | NOTHING