• 大小: 115KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: 其他
  • 标签: STM32SIM800  

资源简介

基于STM32的SIM800开发程序,实现了中文短信的收发。包含了GBK和UNI转换,可以直接在KEIL当中编写中文短信,程序转化中文字符格式发送出去

资源截图

代码片段和文件信息

/******************** (C) COPYRIGHT 2017 **************************
 * 文件名  :sim800.c
 * 描述    :sim800驱动  
 * 硬件连接:-----------------------------
 *          |   PB10         :UART3_TX    |
 *          |   PB11         :UART3_RX    | 
 *          |   PB12         :GSM_ON      | 
 *           ----------------------------- 
 * 库版本  :ST3.5.0
**********************************************************************************/

#include “sim800.h“

uint8_t  sim800_rx_buf[SIM800_REC_LEN];
uint16_t sim800_rx_sta=0;

char numSMS[3];                                            //记录接收到的短信序号
u16 buf[256];
char bgk_buf[256];

//把unicode按2字节分割为16进制的数据
u16 *unitohex(char *uni)
{
u8 i = 0;
  u16 uni_buf[256];
  for(i=0; i {
  sscanf(uni+i*4 “%4X“ (unsigned int *)uni_buf);
buf[i] = *uni_buf;
//printf(“\r\n0x%04X “buf2[i]);
}
  return buf;
}

/*
 * 函数名:itoa
 * 描述  :将整形数据转换成字符串
 * 输入  :radix  -----10 表示10进制,其他结果为0
 *         value  ----- 要转换的整形数
 *         string ----- 转换后的字符串
 
 * 输出  :无
 * 返回  :无
 */
static char *itoa( int value char *string int radix )
{
    int     i d;
    int     flag = 0;
    char    *ptr = string;

    /* This implementation only works for decimal numbers. */
    if (radix != 10)
    {
        *ptr = 0;
        return string;
    }

    if (!value)
    {
        *ptr++ = 0x30;
        *ptr = 0;
        return string;
    }

    /* if this is a negative value insert the minus sign. */
    if (value < 0)
    {
        *ptr++ = ‘-‘;

        /* Make the value positive. */
        value *= -1;
    }

    for (i = 10000; i > 0; i /= 10)
    {
        d = value / i;

        if (d || flag)
        {
            *ptr++ = (char)(d + 0x30);
            value -= (d * i);
            flag = 1;
        }
    }

    /* Null terminate the string. */
    *ptr = 0;

    return string;

} /* NCL_Itoa */

/*
 * 函数名:Sim800_printf
 * 描述  :格式化输出
 * 输入  :-Data   要发送到串口的内容的指针
 *    -...    其他参数
 *      
 * 输出  :无
 * 返回  :无 
 */
void Sim800_printf( char *Data ... )
{
const char *s;
  int d;   
  char buf[16];

  va_list ap;
  va_start(ap Data);

while ( *Data != 0)     // 判断是否到达字符串结束符
{                           
if ( *Data == 0x5c )  //‘\‘
{   
switch ( *++Data )
{
case ‘r‘:           //回车符
USART_SendData(USART3 0x0d);
Data ++;
break;

case ‘n‘:           //换行符
USART_SendData(USART3 0x0a);
Data ++;
break;

default:
Data ++;
    break;
}  
}
else if ( *Data == ‘%‘)
{   //
switch ( *++Data )
{
case ‘s‘:   //字符串
s = va_arg(ap const char *);
          for ( ; *s; s++) 
{
USART_SendData(USART3*s);
while( USART_GetFlagStatus(USART3 USART_FLAG_TXE) == RESET );
          }
Data++;
          break;

        case ‘d‘:

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-04-20 09:32  SIM800C\
     文件       14632  2018-04-20 09:32  SIM800C\sim800.c
     文件        1221  2018-04-20 09:33  SIM800C\sim800.h
     目录           0  2018-04-20 09:32  Uni\
     文件      477160  2018-04-20 09:34  Uni\uni.c
     文件         740  2018-04-20 09:34  Uni\uni.h

评论

共有 条评论

相关资源