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

Posted luxiaoguogege

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了018_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 <stdio.h>
 2 #include <string.h>
 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("%s
",test1);
11     int test2[] = {0xc3ba};    /**/
12     printf("%s
",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("%s
",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 }
View Code

 编译运行的结果

技术分享图片

 

以上是关于018_STM32程序移植之_串口接收中文的主要内容,如果未能解决你的问题,请参考以下文章

004_STM32程序移植之_SHTXX

009_STM32程序移植之_内部falsh

002_STM32程序移植之_DHT11

006_STM32程序移植之_SYN6288语音模块

012_STM32程序移植之_内部flash开机次数管理lib库建立

STM32标准库_04 | 串口接收不定长数据