精华内容
下载资源
问答
  • 串口输出中文乱码

    千次阅读 2020-07-29 17:14:03
    串口输出中文乱码 问题产生寻找问题产生的原因解决问题总结推荐两个串口助手: 问题产生 最近在使用OpenMV,但是由于没有转接板和软排线来连接串口,不过手上有一块STM32F4的开发板,于是就想到将其作为一个转接,...

    问题产生

    最近在使用OpenMV,但是由于没有转接板和软排线来连接串口,不过手上有一块STM32F4的开发板,于是就想到将其作为一个转接,通过其接收OpenMV发送的数据,并将其转发到电脑上,结果串口助手一直输出乱码。

    寻找问题产生的原因

    一开始以为是自己波特率设置的有问题,但是查验后并不是,PCOpenMVSTM32之间设置的波特率都是对应的。然后又以为是自己改过STM32F4的时钟频率,然后开始查STM32时钟频率的设置,发现也没问题。怎么也找不到问题在哪。/(ㄒoㄒ)/~~

    后来突然想到OpenMV是使用MicorPython语言写的,一般的字符编码为UTF-8,而STM32用的是keil的IDE开发的,编码格式一般为ASNII,两个字符编码不一样也会导致乱码,于是将其都改为UTF-8编码,结果乱码依旧。。。 (╯‵□′)╯︵┻━┻

    为了继续查找问题所在,先是将OpenMV发送给STM32数据直接返回OpenMV结果正确,然后将串口助手发送给STM32的数据直接返回,结果正确。由此可以看出,串口助手和OpenMV的字符编码不一致导致的乱码。这里给出一个网址,可以在线转换乱码。乱码恢复 。从中我们可以看到,前后的编码不一致。

    image-20200729163715363

    至此,找到了问题所在,串口助手不支持UTF-8编码。( ̄_ ̄|||)

    解决问题

    既然串口助手不支持,那就找支持的串口助手,或者自己开发一个(暂时有点想法)。目前使用的星瞳串口助手,接收结果如下:

    结果

    总结

    串口助手显示中文乱码的原因有以下几点:

    1. 波特率不对应。
    2. 字符编码不对应。
    3. 串口助手不支持字符编码方式。

    推荐两个串口助手:

    1. 星瞳串口助手SingTownSerialport(支持Mac,Windows,Ubuntu)
    img
    1. 串口调试助手(Windows)

    串口调试助手

    展开全文
  • 鸿蒙之串口输出

    千次阅读 2020-11-09 20:19:59
    串口输出修改源码目录结构业务代码。hello_world.cBUILD.gn(app/BUILD.gn)BUILD.gn()编译烧录编译烧录观察现象后续 修改源码 目录结构 先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录...

    修改源码

    目录结构

    先在./applications/sample/wifi-iot/app路径下新建一个目录(或一套目录结构),用于存放业务源码文件。
    本例程:在app下新增业务chuankou,其中hello_world.c为业务代码,BUILD.gn为编译脚本,具体规划目录结构如下:

    .
    └── applications
        └── sample
            └── wifi-iot
                └── app
                    │── chuankou
                    │  │── hello_world.c
                    │  └── BUILD.gn
                    └── BUILD.gn
    

    业务代码。

    新建./applications/sample/wifi-iot/app/chuankou下的hello_world.c文件,在hello_world.c中新建业务入口函数HelloWorld,并实现业务逻辑。并在代码最下方,使用HarmonyOS启动恢复模块接口SYS_RUN()启动业务。(SYS_RUN定义在ohos_init.h文件中)

    1. BUILD.gn为编译脚本
    2. hello_world.c为业务逻辑代码所在文件

    hello_world.c

    #include <stdio.h>
    #include "ohos_init.h"
    #include "ohos_types.h"
     
    void led(void)
    {
        int i=0;
        for(i=0;i<4;i++)//输出四遍
        {
            
        printf("[DEMO] zhangyang.\n");
        }
    }
    SYS_RUN(led);
    
    

    BUILD.gn(app/BUILD.gn)

    static_library("bahuyang") {
        sources = [
            "led.c"
        ]
        include_dirs = [
            "//utils/native/lite/include"
        ]
    }
    
    1. “bahuyang”:是生成静态库名称,可随意更改
    2. “led.c”:代码文件

    BUILD.gn()

    # Copyright (c) 2020 Huawei Device Co., Ltd.
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    import("//build/lite/config/component/lite_component.gni")
    
    lite_component("app") {
        features = [
           # "startup",
            "chuankou:bahuyang"
        ]
    }
    
    1. 将"startup"注释,运行我们自己的文件
    2. “chuankou”:工程目录
    3. bahuyang:静态库文件

    编译烧录

    编译

    我在以前的文章里,详细讲解了怎样编译。大家可以回头看看。
    我们进入终端面板下,在对应工程目录下,输入python build.py wifiiot
    进行编译,当出现编译成功时,就代表编译完成。

    烧录

    利用HiBurn工具进行烧录,我在以前的文章里,详细讲过。

    选定文件后,点击connect,按下开发板复位按钮,进行烧录。
    烧录完成后,再次按下复位按键。

    观察现象

    选择波特率115200,连接相应串口,观看串口调试助手的结果。

    后续

    如果想了解更多物联网、智能家居项目知识,欢迎关注公众号,关注我的项目实战专栏。

    编写不易,感谢支持。

    展开全文
  • 串口输出重定向

    千次阅读 2019-05-14 20:38:08
    在调试嵌入式设备的时候需要接串口,通过串口将打印输出到显示终端。但是很多时候接串口是设备是一件很麻烦的事情,比如,串口板,串口线等。 分析 内核的打印不能重定向过来,但是应用层打印可以重定向打印过来...

    日常现象

    在调试嵌入式设备的时候需要接串口,通过串口将打印输出到显示终端。但是很多时候接串口是设备是一件很麻烦的事情,比如,串口板,串口线等。

    分析

    内核的打印不能重定向过来,但是应用层打印可以重定向打印过来查看内核的打印,

    cat /proc/kmsg

    在输出完缓冲区内容后,会阻塞卡住,内核有新的输出时会继续输出。如果要把内核打印到telnet,那么可能需要修改源文建printk.c。kernel和user空间下都有一个console,关系到kernel下printk的方向和user下printf的方向,实现差别很大。kernel下的console是输入输出设备driver中实现的简单的输出console,只实现write函数,并且是直接输出到设备。user空间下的console,实际就是tty的一个特殊实现,大多数操作函数都继承tty,所以对于console的读写,都是由kernel的tty层来最终发送到设备。

    实现代码

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <sys/time.h>
    #include <sys/ioctl.h>
    
    #define FILE_PATH 512
    
    int main(int argc, char * argv[])
    {
        int tty = -1;
        int fd  = -1;
        char * tty_name = NULL;
    
        if (argc < 2)
        {
        ¦   printf("miss argv \n");
        ¦   return -1;
        }
    
        /* 获取当前tty名称 */
        tty_name = ttyname(STDOUT_FILENO);
        if (!tty_name)
        {
        ¦   printf(" get error tty_name \n");
        ¦   return -1;
        }
        printf("get ok tty_name: %s \n", tty_name);
    
        struct timeval lt;
        gettimeofday(&lt, NULL);
    
        char fname[FILE_PATH];
        memset(fname, 0, FILE_PATH);
        snprintf(fname, FILE_PATH, "/media/tty_%u.log", (unsigned int)lt.tv_usec);
    
        if (!strcmp(argv[1], "on"))
        {
        ¦   /* 重定向console到当前tty */
        ¦   tty = open(tty_name, O_RDONLY | O_WRONLY);
        ¦   ioctl(tty, TIOCCONS);
            
            // 写到文件/media/tty_%u.log中
        ¦   //fd = open(fname, O_RDWR|O_CREAT|O_APPEND, 0777);
        ¦   //ioctl(fd, TIOCCONS);
        ¦   perror("ioctl TIOCCONS");
        }
        else if (!strcmp(argv[1], "off"))
        {
        ¦   /* 恢复console */
        ¦   tty = open("/dev/console", O_RDONLY | O_WRONLY);
        ¦   ioctl(tty, TIOCCONS);
        ¦   perror("ioctl TIOCCONS");
        }
        else
        {
        ¦   printf("error argument\n");
        ¦   return -1;
        }
    
        //close(fd);
        close(tty);
        return 0;
    }

    根据以上代码注释可以有两种选择,第一将其重定向到终端显示,第二将其重定向到.log文件中。

    编译

    mips-linux-uclibc-gnu-gcc -g console.c -o ./sharenfs/console.out

    说明

        mips-linux-uclibc-gnu-gcc 是交叉编译工具,编译之后跑在君正平台。

    展开全文
  • STM32使用keil串口输出中文乱码问题

    万次阅读 多人点赞 2018-08-20 16:23:22
    问题描述:在进行串口实验时,我们发现使用串口调试助手输出的中文全是乱码(不是文件中的中文乱码,是串口输出的时候出现乱码),见以下图片: 解决方案: 1.首先在你的文件中找到main.c文件,然后使用记事本...

    问题状态:已解决

    问题描述:在进行串口实验时,我们发现使用串口调试助手输出的中文全是乱码(不是文件中的中文乱码,是串口输出的时候出现乱码),见以下图片:

     解决方案:

    1.首先在你的文件中找到main.c文件,然后使用记事本打开,然后保存另存为,选择ANSI编码(原来默认的是UTF-8),替换原来文件。

    2.然后重新编译工程,下载到开发板,再打开串口调试助手,然后我们发现问题已经解决。

    (这里注意:如果不成功,重启开发板试试,波特率设置115200,太高也会乱码)

    展开全文
  • 从零开始的MFC实现串口输出环境配置学习基本的mfc控件操作,编辑方法声明变量及绑定编码串口串口调试串口代码学习 环境 使用安装VC++的VS IDE,本人用的VisualStudio2015 本案例使用C++语言 本人有java基础,没有...
  • ADXL345串口输出

    千次阅读 2017-07-11 21:20:25
    昨天完成了ADXL345的中断数据读取,今天就想着把读取的数据通过串口输出到电脑上,并用MATLAB看一下值的变化趋势 刚开始读不出数据的时候,一种从程序中找问题,后来才发现stm32的tx引脚没有与串口的rx相连,tx的...
  • esp8266串口输出乱码原因

    千次阅读 2019-09-04 20:29:28
    上图我们发现串口输出乱码,原因是串口波特率不匹配,一般uno默认9600 而8266则是115200,有可能也是其他,这时候多多尝试一下就行了
  • 于师兄推荐,得知JLINK RTT可以代替串口输出pirntf。优点:可以不占用串口,在调试时,只需要SWD,4条线连接MCU缺点:目前不能输出浮点数,但这个可以把输出的浮点数*100或者*N,输出整数来代替。使用方法:1,下载...
  • 定时器中断函数内部: 串口函数设计的优先级: 定时器设计的优先级: 因此我认为不能使用串口输出函数的原因是:中断优先级的问题 ...
  • 之前串口输出没出过问题,下午跑一个新demo时突然出问题了,输出的都是一些奇怪的信息,关电源重新打开,再下载也没用。 解决方法:好像拔掉电源插头插上,然后先下载只有zynq本身的bitstream,跑一遍最简单的hello...
  • 最近在做STM32的云端项目中遇到个问题:相同代码换了一块实验板之后串口输出全是乱码,最后细细一想后发现是两块是实验板所用的外部晶振频率不一样。修改之后,问题解决。 接下来演示一下修改工程的方法。 修改(stm...
  • STM32 矩阵键盘通过串口输出

    千次阅读 2018-05-21 21:18:08
    STM32F103C8T6 4*4矩阵键盘 通过串口输出,可以用来写密码锁程序的思路如下:1、首先需要配置的是矩阵键盘:配置两个函数: KEY44_Init(矩阵键盘初始化)和key44_Scan(扫描并获取值) 。2、其次,设置串口(本文设置...
  • 调试机在远端,只能使用SSH登录。但是调试信息的输出是通过串口输出的。想通过SSH查看串口输出的调试信息。请问各位大神如何实现。
  • cubemx配置FreeRTOS串口输出任务信息

    千次阅读 2019-05-14 20:16:48
    cubemx配置FreeRTOS串口输出任务信息 关键步骤: 1. cubemx中使能任务信息相关宏(3个); 2. 配置2个宏定义 3. 开启一个定时器,作为计算任务信息的时钟; 4. 调用函数输出任务信息 1.环境: packages版本(STM32...
  • stm32关于串口输出的几种常用方式

    万次阅读 2018-05-11 21:31:52
    在使用stm32做项目时,我们常常会使用到串口调试,通过串口来输出...1、使用printf语句通过串口输出我们想要的参数值 具体的用法:使用之前必须包含相应的头文件#include int fputc(int ch, FILE *f) { USART_...
  • 在保证串口能接收到稳定数据的情况下,串口输出乱码很可能是重串口设备的波特率与STM32设置的波特率不同导致,小编使用HC-08的蓝牙无线串口模块,以及CH340的USB转串口进行连接,实现电脑端与STM32完成无线串口传输 ...
  • void setup() { // put your setup code here, to run once: // 设置调试串口波特率 ...// 调试串口输出空行 Serial.println(); } void loop() { // put your main code here, to run repe...
  • 本文详细的介绍了如何重定向printf输出到串口输出的多种方法,包括调用MDK微库(MicroLib)的方法,调用标准库的方法,以及适用于 `GNUC` 系列编译器的方法。
  • STM32模拟串口输出偶有乱码

    千次阅读 2018-01-13 19:23:47
    因为芯片串口不够用,只好用IO口模拟串口,在网上下载了个模拟串口的程序,可运行,但发现串口输出隔几个字符就会出现乱码,主要部分代码如下: #define OI_TXD PAout(12) #define OI_RXD PAin(11) #define ...
  • STM32使用官方库串口输出乱码

    万次阅读 2016-12-07 14:33:26
    最近学习STM32开发,申请了一块免费的开发版,按照书上的内容学习,学到USART,发现串口输出始终乱码,妈蛋的,搞不懂为啥,代码啥的都是按照书上来的啊,最后搜索很久,发现是外部时钟频率配置错误导致的,库使用...
  • 本周研究了一下关于串口输出
  • 项目中采用STM32F103和AD7260进行数据采集。...串口输出部分,我先是这么做的:在中断中采集数据的后面添加printf(串口已经重定向到printf函数)语句,每采集得到一个点后直接printf输出。上位机用软件Ser
  • 使用printf向串口输出数据

    千次阅读 2014-06-05 14:54:15
    要在IAR中使用printf向串口输出数据,需要加入如下的函数原型,它的目的是将printf指向串口一这个设备并向这个设备输出数据。 #ifdef __GNUC__  /* With GCC/RAISONANCE, small printf (op
  • centos 7 配置串口输出

    千次阅读 2018-07-25 17:44:23
    注意:一定检查自己的串口线/设备串口是否正常(因为串口坏了,检查了2天) 这几天忙活的思路:经过google之后迅速确定配置方案,但经过一天的配置后仍无法配置成功,怀疑是不是系统让我给改坏了,所以被动重装了一下...
  • 由于IAR或者CCS的断点调试很多时候无法真实显示变量以及...方法就是利用串口输出log,就像我们在linux平台利用printf打印到标输出一样,在这里先去掉BOARD_DISPLAY_USE_UART宏,TI之所以定义这个宏,就是解决没有...
  • 串口输出 UART 输出重定向 stellaris lm3sxxx
  • 问题:嵌入式系统中如何使用printf函数进行串口输出。  解答:寄存器版的/库函数版的 第一步,#inlcude "stdio.h"  第二步,在主函数文件中重写fputc()和fgetc()函数,如下:  int fputc (intch,FILE*f)   {  ...
  • 本文详细的介绍了如何重定向printf输出到串口输出的多种方法,包括调用MDK微库(MicroLib)的方法,调用标准库的方法,以及适用于 GNUC 系列编译器的方法。 1.printf与fputc 对于 printf 函数相信大家都不陌生,第...
  • 原理很简单: c程序中16进制整数表示方法为0x01,0x02等分别表示10进制整数1,2 而经过重定义后的printf语句只能打印字符,不能直接输出16进制!...//这是我想串口输出的16进制命令 uint8_t i; for(i=0;i<8;i++) U1

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 84,581
精华内容 33,832
关键字:

串口输出