018_STM32程序移植之_串口接收中文

发布者:温馨阳光最新更新时间:2024-08-16 来源: cnblogs关键字:STM32  程序移植 手机看文章 扫描二维码
随时随地手机看文章

(一)在平时数据传输中很少用到接收中文的情况,但是最近需要用到就花了半天时间来弄弄

(二)接收原理,从现在接收情况分析:一个中文占两个数据的空间,也就是两个十六进制可以转化成为一个中文

(三)示例情况,用Hex Editor来看看中文 “你好”,可以看到四个十六进制数据:0xc4,0xe3,0xba,0xc3

(四)我们的目的还是单片机通过串口来进行数据的接收,用CH340短接T和R看看发送“你好”也是会接收到十六进制0xc4,0xe3,0xba,0xc3

(五)从上面两点来看,一个中文占据两个数据,也就是说当我们发送“你好”给单片机时候实际中断了四次,接收到的数据分别为0xc4,0xe3,0xba,0xc3


那么我们就可以通过接收到的数据来将数据转化成为中文了,搜索GB2312表可以知道对应的“你” = 0xe3c4;;  '好' = 0xc3ba


也就是两位对应一个中文嘛,那么如何将0xc4,0xe3合成0xe3c4;;将0xba,0xc3合成0xc3ba,然后将数据转化成为字符形式就可使转化成为中文了


(六)通过C语言的方法来进行上面四个数据转化成为中文,我用的是VS中的C++来编译的,哪里都可以定义数组那些,如果出错请自行修改将定义放到前面来。


 1 #include

 2 #include

 3 using namespace std;

 4 char *Chinese(int table[],char length,char str[]);        /*将数据放进去得到字符出来*/

 5 int convert_data(int table[2]);

 6 void main(void)

 7 {

 8     /*GB2312,你的代码是0xe3c4,好的代码是0xc3ba,具体的可以使用软件Hex Editor来看看*/

 9     int test1[] = {0xe3c4};    /*你*/

10     printf('%srn',test1);

11     int test2[] = {0xc3ba};    /*好*/

12     printf('%srn',test2);

13 

14     /*单片机发送或者接收到“你好”,会得到下面四个数据,将下面四个数据转换成中文“你好”*/

15     int table[4] = {0xc4,0xe3,0xba,0xc3};

16     char str[100];

17                   /*输入数组  长度  返回保存地址*/

18     char *str4 = Chinese(table,4,str);

19     printf('%srn',str4);

20 }

21 

22 int convert_data(int table[2])        /*接收的两个数据转换成为一个数据*/

23 {

24     return (table[1] << 8)|table[0];

25 }

26 

27 char *Chinese(int table[],char length,char str[])        /*将数据放进去得到字符出来*/

28 {

29     int i = 0;

30     int data1[1];

31     char data2[100];

32     data1[0] = (table[i + 1] << 8)|table[i];            

33     sprintf(data2,'%s',data1);

34     strcpy(str,data2);                                /*先取第一个中文先*/

35     for(i = 2;i < length; i = i + 2)

36     {

37         data1[0] = (table[i + 1] << 8)|table[i];    /*将0xc4,0xe3弄成0xe3c4,将0xba,0xc3换成0xc3ba*/

38         sprintf(data2,'%s',data1);

39         strcat(str,data2);

40     }

41 

42     return str;

43 }


编译运行的结果

 

(七)STM32串口接收中文

(1)资料下载:https://download.csdn.net/download/xiaoguoge11/10804315

(2)视频演示:https://v.qq.com/x/page/g0800sirmx3.html


关键字:STM32  程序移植 引用地址:018_STM32程序移植之_串口接收中文

上一篇:021_STM32程序移植之_ESP8266连接onenet
下一篇:017_STM32程序移植之_AS608指纹模块

推荐阅读最新更新时间:2024-11-08 10:35

STM32电机方波】记录1——GPIO基础配置
GPIO库函数: GPIO初始化: typedef struct { u16 GPIO_Pin; //选择待设置的GPIO管脚,使用操作符“|”可以一次选中多个管脚 GPIOSpeed_TypeDef GPIO_Speed; //10MHz 、2MHz、 50MHz GPIOMode_TypeDef GPIO_Mode; //输入输出的8种方式 } GPIO_InitTypeDef; GPIO的缺省初始化值: GPIO_Pin = GPIO_Pin_All ; GPIO_Speed = GPIO_Speed_2MHz; GPIO_Mode = GPIO_Mode_IN_FLOATING GPIO的输入输出模
[单片机]
【<font color='red'>STM32</font>电机方波】记录1——GPIO基础配置
STM32的频率和占空比计算
STM32的PWM应用广泛,最重要的就是调节占空比来达到PWM的控制应用。 STM32的一个定时器能同时输出4路PWM分别占据一个通道,而定时器的频率确定了,四个通道的频率也就随之确定,所以同一个定时器的四个通道的频率是相同的。频率由PSC寄存器和arr寄存器计算得到。 f=72MHZ/ 频率确定后,再通过寄存器TIMX- CCRY寄存器来确定通道Y的占空比。计数器向上计数时,当计数器的值比CCR寄存器值小时输出低电平,比它大时就输出高电平,高电平占总周期的时间就是占空比。 Duty circle=TIMX- CCRY/arr
[单片机]
用VisualStudio开发STM32遇到的问题(一)
我现在已经用VS2017写STM32的程序有一段时间了,在这段时间里,遇到了不少问题,今天就和大家分享一下有关于printf的故事.... 之前用MDK开发STM32的时候用正点原子教给大家的printf,很好用,但是在VS上,一直打印不出来东西,于是,我打算重新写printf 废话不多说,直接上代码 void myPrintf(char* fomat, ...) { char buf = ; char* p; u16 i = 0; int num; float fnum; char* str; char tem = ; va_list va; va_start(va, fomat); p = fom
[单片机]
用VisualStudio开发<font color='red'>STM32</font>遇到的问题(一)
STM32 USB设计 单片机程序
首先,我们来看看usb的工作过程。   当usb设备接入到主机时,主机开始枚举usb设备,并向usb设备发出指令要求获取usb设备的相关描述信息,其中包括设备描述(device descriptor)、配置描述(configuration descriptor)、接口描述(interface descriptor)、端点描述(endpoint descriptor)等。这些信息是通过端点0(endpoint 0)传送到主机的。获取各种描述信息后,操作系统会为其配置相应的资源。这样主机就可以与设备之间进行通信了。   usb通讯有四种通讯方式控制(control)、中断(interrupt)、批量(bulk)和同步( sync
[工业控制]
深度解析STM32驱动LCD原理
TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个像素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。 01驱动流程 使用FSMC驱动LCD 关于FSMC,把数据写入相应的地址,FSMC就会把地址从FSMC_A出去,写入的数据会会从FSMC_D发出去。至于片选等信号线都是自动的。读的话,直接读相应的地址,就会拿到改地址上的数据。 FSMC驱动外部SRAM时,外部SRAM的控制一般有: 地址线(如A0~A25) 数据线(如D0~D15) 写信号(WE,即WR) 读信号(OE,即RD) 片选信号
[单片机]
深度解析<font color='red'>STM32</font>驱动LCD原理
STM32单片机控制蓝牙的电路
蓝牙模块,是一种集成蓝牙功能的PCBA板,用于短距离无线通讯,按功能分为蓝牙数据模块和蓝牙语音模块。蓝牙模块是指集成蓝牙功能的芯片基本电路集合,用于无线网络通讯,大致可分为三大类型:数据传输模块远程控制模块等。一般模块具有半成品的属性,是在芯片的基础上进行过加工,以使后续应用更为简单。 原理与结构 作为取代数据电缆的短距离无线通信技术,蓝牙支持点对点以及点对多点的通信,以无线方式将家庭或办公室中的各种数据和语音设备连成一个微微网(Pico-net),几个微微网还可以进一步实现互联,形成一个分布式网络(scatter-net),从而在这些连接设备之间实现快捷而方便的通信。本文介绍蓝牙接口在嵌入式数字信号处理器OMAP5910上的
[单片机]
<font color='red'>STM32</font>单片机控制蓝牙的电路
STM32分类定义
#define STM32F10X_LD STM32F10X_LD: STM32 Low density devices */ #define STM32F10X_LD_VL STM32F10X_LD_VL: STM32 Low density Value Line devices */ #define STM32F10X_MD STM32F10X_MD: STM32 Medium density devices */ #define STM32F10X_MD_VL VLSTM32F10X_MD_VL: STM32 Medium density Value Line device
[单片机]
stm32库函数FSMC_NORSRAMInit()解析
这是一段对nor存储器的时序进行编程的函数,函数形式为void FSMC_NORSRAMInit(FSMC_NORSRAMInitTypeDef* FSMC_NORSRAMInitStruct),里面只有一个参数,这个参数为指针类型,指向一段数据结构,这个数据结构就保存着对时序进行配置的的各个参数,这个结构的详细内容为 typedef struct { uint32_t FSMC_Bank;//nor被分为四块,其中这个参数是说明对那个块编程 uint32_t FSMC_DataAddressMux;//地址数据是否复用 uint32_t FSMC_MemoryType;//存储器类型 uint3
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved