资源简介
基于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
- 上一篇:STM32F1x ADC三通道连续转换完整工程代码
- 下一篇:软件测试计划书
评论
共有 条评论