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

发布时间:2024-08-16  

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

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

(三)示例情况,用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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    属于ARM单片机,所以这篇文章的方法也适合其他的ARM单片机。 IDLE中断什么时候发生? IDLE就是串口收到一帧数据后,发生的中断。什么是一帧数据呢?比如说给单片机一次发来1个字节,或者......
    NO.12 MSP432进行串口通信;  首先,我们要明白什么是串口通信。   串口指的是串行通信,要把CPU并行处理的数据转换成串行处理的数据进行发送。英文是UART。   关于串口......
    什么是串口通讯?STM32中的串口通讯接口有哪些;所谓通信就是两种设备之间进行数据交互,从而传递大料的信息,因为通讯的存在,使得大量的数据有了传输通道,各种信息得到了汇总,方便了人们的生活 。MCU......
    51晶振为什么是11.0592;单片机晶振大多为11.0592的原因 常用波特率通常按规范取为1200,2400,4800,9600, 若采用晶振12兆赫兹或6兆赫兹,计算得出的T1定时......
    STM32速成笔记(5)—串口通信;一、什么是串口通信 串口通信是指外部设备与主控芯片之间,通过数据信号线、地线等,按位进行数据传输的一种通信方式,属于串行通信方式。串行......
    什么是串口通信?基于STM32的printf打印输出;  前言:平时我们进行c语言编程的时候会经常用到printf函数进行打印输出,来调试代码。可是这个printf函数C库已经帮我们实现好了,通常......
    一文详解STM32串口通信;1 什么是串口通讯? 串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口......
    STM32串口通信简明知识;什么是串口通讯? 串行通讯是指仅用一根接收线和一根发送线就能将数据以位进行传输的一种通讯方式。尽管串行通讯的比按字节传输的并行通信慢,但是串口......
    是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm32的视频资料便于学习参考。   什么是串口   UART : Universal Asynchronous Receiver......
    stm32学习心得(2022-12-16)
    后还会为大家分享有些关于stm32的视频资料便于学习参考。   什么是串口   UART : Universal Asynchronous Receiver/Transmitter 通用......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>