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\r\n",test1);
11     int test2[] = {0xc3ba};    /*好*/
12     printf("%s\r\n",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\r\n",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 }

编译运行的结果

原文地址:https://www.cnblogs.com/luxiaoguogege/p/9998255.html

时间: 2024-08-29 12:51:05

018_STM32程序移植之_串口接收中文的相关文章

009_STM32程序移植之_内部falsh

flash  模拟  EEPROM  实验 1. 测试环境:STM32C8T6 2. 测试接口: 3. 串口使用串口一,波特率9600 单片机引脚------------CH340引脚 VCC--------------------VCC GND-------------------GND PA9--------------------RXD PA10-------------------TXD STM32 本身没有自带 EEPROM,但是 STM32 具有 IAP(在应用编程)功能, 所以我们

基础问题:在一个 Activity 中定义的串口接收程序,如果 Activity 切换到其它 Activity 后还能接收到串口数据吗?

============问题描述============ RT:基础问题:在一个 Activity 中定义的串口接收程序,如果 Activity 切换到其它 Activity 后还能接收到串口数据吗? 我的程序有两个 Activity,在启动后的 Activity 中已经验证了接收与发送数据. 后继做了第二个 Activity,此时从第二个 Activity 返回 第一个 Activity 时串口的接收线程会出错.调试了一下,串口再次被初始化了. 问题: (1)不想串口被反复初始化,应该如何做?

Java应用程序中System.out.println输出中文乱码

Java应用程序中System.out.println输出中文乱码 2013-12-10 21:27:08cnblogs.com-bluepoint2009-点击数:3631 其实,解决办法比较简单,即:编译时指定编码为UTF-8,如: 1 javac -encoding utf-8 HelloJava.java 这样,再运行时就不会出现乱码. 一.中文问题的来源 计算机最初的操作系统支持的编码是单字节的字符编码,于是,在计算机中一切处理程序最初都是以单字节编码的英文为准进行处理.随着计算机的发

.Net Core应用程序跨平台应用研究-HelloArm(串口篇)

引言 为了验证采用dotnet core技术开发的物联网设备数据采集接入服务应用是否能在高性价比的linux嵌入式平台运行,针对dotnet core应用程序进行嵌入式linux环境的发布部署运行验证研究. 硬件环境 硬件系统经过对比筛选,选用了友善之臂出品的NanoPC-T3 Plus.该控制板为掌上型嵌入式Linux系统迷你PC,采用64位三星arm CPU,具有完善的硬件接口和驱动支持,大于1G的内存和8G以上的eMMC闪存,具有较高的性能价格比. NanoPC-T3 Plus是友善之臂专

jsp中request接收中文参数乱码问题解决办法

在利用表单提交数据时发现,获得的中文参数会发生乱码,解决方法如下: <body> <% String s=request.getParameter("uname"); s = new String(s.getBytes("ISO-8859-1"),"utf-8");//解决乱码问题 %> <%=s %> </body> s = new String(s.getBytes("ISO-8859

stm32的串口接收字符串以十六进制数

#include "pbdata.h" uint8_t TxBuffer1[] = "USART Interrupt Example: This isUSART1 DEMO"; uint8_t RxBuffer1[],rec_f,tx_flag; volatile uint8_t TxCounter1 = 0x00; volatile uint8_t RxCounter1 = 0x00; uint32_t Rec_Len; int main(void) { u8 a

NXP LPC17XX 串口接收发送中断(含RS485)最全面驱动程序

最近在做一个关于串口的项目,于是把之前的串口程序又拿了出来,重新优化了一下! 1.头文件<uart.h>如下: 1 /* 2 ****************************************************************************************************** 3 ** Copright(c) 2007-2014,深圳固镭特电子 ** 4 ** All rights reserved. ** 5 ** http://www.

vc mscom控件串口接收不到数据问题

读对边距的时候,刚开始有数,后来不行了,重新拔插后可以了. 在接收到数据的程序中,oncomm()函数 中,加入了 串口打开.关闭图标的程序.使得串口接收大数据,执行这部分程序的时候,串口数据卡死了. 删掉串口打开.关闭图标的程序后,数据接收正常.

【转】搞定单片机多字节串口接收(串口多字节接收发送的高阶研究)

搞定单片机多字节串口接收(串口多字节接收发送的高阶研究) 原文地址:http://bbs.ednchina.com/BLOG_ARTICLE_3007162.HTM 工作了一年多,写了不少单片机串口程序.感觉串口多字节接收部分的逻辑相对于配置寄存器跟串口回复来说,是有点难度的——寄存器配置基本上都是死的,串口回复多字节跟回复一字节只是多了一个循环. 串口接收程序是基于串口中断的,单片机的串口每次接收到一字节数据产生一次中断,然后再读取某个寄存器就可以得到串口接收的数据了.然而在实际应用当中,基本