精华内容
下载资源
问答
  • Linux对串口序列修改别名

    千次阅读 2019-06-04 17:58:58
    :如果你固定了相应的串口的别名,在程序中如果也是用了别名的,一定不要忘记修改别名的问题。不然的话可能会导致别名失效,程序无法正常运行,这里内部的原理,你可以自行理解下。 终端命令 udevadm info -a -n...

    特别提醒:如果你固定了相应的串口的别名,在程序中如果也是用了别名的,一定不要忘记修改别名的问题。不然的话可能会导致别名失效,程序无法正常运行,这里内部的原理,你可以自行理解下。

    终端命令

    udevadm info -a -n /dev/ttyUSB0 | grep KERNELS
    
     vi /etc/udev/rules.d/89-usb-serial.rules
     // 这里命令中的89-usb-serial.rules是我自己单独创建的一个文件名字,
     // 你只要在rules.d下面创建出相应的文件都是可以被系统所认知的
    

    你需要查询你的kernels的相应的端口,所以你可以先查询串口

    ls -l /dev/ttyUSB*
    

    找到每一个串口所对应的串口号之后,就可以按照下面的方式来明明别名了,这样有利于自己的可以很明白的认识自己做了什么操作。

    SUBSYSTEM=="tty", KERNELS=="1-2.1", SYMLINK+="ttyUSB_sbus", MODE="0666"
    SUBSYSTEM=="tty", KERNELS=="1-2.3.4", SYMLINK+="ttyUSB_stm32", MODE="0666"
    SUBSYSTEM=="tty", KERNELS=="1-2.3.3", SYMLINK+="ttyUSB_imu", MODE="0666"
    SUBSYSTEM=="tty", KERNELS=="1-2.3.2", SYMLINK+="ttyUSB_gnss", MODE="0666"
    SUBSYSTEM=="tty", KERNELS=="1-2.3.1", SYMLINK+="ttyUSB_rtk", MODE="0666"
    

    如果有什么不懂欢迎询问。
    在这里插入图片描述

    展开全文
  • 分析代码发现,串口初始化在初始化序列的中serial_init,这个函数调用drivers/serial/serial_s3c24x0.c中的serial_init_dev,最后在_serial_setbrg中设置波特率 reg = get_PCLK() / (16 * gd->baudrate) - ...

    重新编译烧写u-boot试验,发现串口输出乱码,可能是串口波特率设置不正确

     

    分析代码发现,串口初始化在初始化序列的中serial_init,这个函数调用drivers/serial/serial_s3c24x0.c中的serial_init_dev,最后在_serial_setbrg中设置波特率

    	reg = get_PCLK() / (16 * gd->baudrate) - 1;
    
    	writel(reg, &uart->ubrdiv);
    	for (i = 0; i < 100; i++)

    在get_PCLK中调用到get_HCLK

    在get_HCLK中发现CONFIG_S3C2440没有定义

    解决办法:

    1、通过下面命令可以找到CONFIG_S3C2410宏定义在include/configs/smdk2440.h

    grep “CONFIG_S3C2410” * -nR

     

    2、在include/configs/smdk2440.h中替换宏CONFIG_S3C2410为CONFIG_S3C2440

    //#define CONFIG_S3C2410
    #define CONFIG_S3C2440

     

    上传修改后的文件,编译发现s3c2410_nand.c 72行出现错误
    解决办法:在s3c2410_nand.c 中

    1、所有struct s3c2410_nand改为struct s3c2440_nand

    2、所有s3c2410_get_base_nand改为s3c2440_get_base_nand

     

     

     

     

     

     

     

     

    展开全文
  • 使用转义序列,可以对控制台进行很多额外的定制,例如修改颜色、修改标题栏,将文字添加下划线等。 当然,.NET 已经帮助我们封装了很大的一部分功能了,我们重点可以放在 .NET 没有封装的那部分上。 基本的...

    各种操作系统的控制台都支持 ANSI 转义序列(ANSI Escape Code)。使用转义序列,可以对控制台进行很多额外的定制,例如修改颜色、修改标题栏,将文字添加下划线等。

    当然,.NET 已经帮助我们封装了很大的一部分功能了,我们重点可以放在 .NET 没有封装的那部分上。


    基本的准备代码

    在开始之前,我们先添加一些基础性代码,这是对系统核心功能的调用。

    const int STD_OUTPUT_HANDLE = -11;
    const uint ENABLE_VIRTUAL_TERMINAL_PROCESSING = 0x0004;
    
    [DllImport("kernel32.dll", SetLastError = true)]
    static extern IntPtr GetStdHandle(int nStdHandle);
    
    [DllImport("kernel32.dll")]
    static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode);
    
    [DllImport("kernel32.dll")]
    static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode);

    在 Main 函数中,添加一些调用:

    static void Main(string[] args)
    {
        Console.Title = "Walterlv.Demo";
    
        var handle = GetStdHandle(STD_OUTPUT_HANDLE);
        GetConsoleMode(handle, out var mode);
        mode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
        SetConsoleMode(handle, mode);
    
        // 我们准备在这里添加新的代码。
    
        Console.Read();
    }

    开始使用 ANSI 转义序列

    添加下划线

    const string UNDERLINE = "\x1B[4m";
    const string RESET = "\x1B[0m";
    Console.WriteLine($"Some {UNDERLINE}underlined{RESET} text");

    下划线转义
    ▲ 下划线转义

    修改颜色

    const string RED = "\x1B[31m";
    Console.WriteLine($"Some {UNDERLINE}underlined{RESET} and {RED}red{RESET} text");

    颜色转义
    ▲ 颜色转义(当然,.NET 封装有 API)

    其他转义序列

    其他转义序列,可阅读 ANSI escape code - Wikipedia。不过 Windows 能支持的并不多。

    关于颜色,不同控制台上对于相同转义序列的颜色值和颜色支持程度也不同。

    关于 ENABLE_VIRTUAL_TERMINAL_PROCESSING

    这是用来开启虚拟终端处理的一个标识,Windows 从一开始就默认关闭这个标识,必须通过 SetConsoleMode 手工开启。虽然在 10.0.10586 版本时短暂开启了一个版本,随后在 10.0.14393 中又再次默认关闭了。


    参考资料

    展开全文
  • 1. 生成初始化工程 我们使用rt-thread的已有bsp来生成我们需要的mdk5的...工程默认用的console串口是uart2,我想在工程中用uart1作为console和DEBUG用的串口,所以直接在配置文件中做了修改,如下: 但是配置之后发现

    1. 生成初始化工程

    我们使用rt-thread的已有bsp来生成我们需要的mdk5的工程,使用如下图的bsp基础工程

    在这里插入图片描述
    使用env工具来生成工程,在当前bsp目录下执行scons –dist ,然后在dist目录下就会生成相对应的工程

    在这里插入图片描述
    以下是生成后的目录结构

    在这里插入图片描述

    2. 工程配置

    打开mdk5的工程,配置芯片和debug选项
    在这里插入图片描述
    在这里插入图片描述

    3. 下载调试

    工程默认用的console串口是uart2,我想在工程中用uart1作为console和DEBUG用的串口,所以直接在配置文件中做了修改,如下:

    在这里插入图片描述
    但是配置之后发现串口没有数据输出,那问题应该会出现在哪里呢,先从串口初始化的未知查起,我们知道HAL库中硬件的初始化都是在库中定义了一个__weak函数,这相当于一个接口函数真正的实现需要我们用户去实现一个同名的函数,rt-thread这块的实现全部放在了stm32fxx_hal_msp.c文件中,如下是关于串口实现的部分:

    在这里插入图片描述

    我们发现uart1的初始化函数传入的参数是 USART_HandleTypeDef husart ,关于uart和usart的解释如下:*

    通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。

    具体实物表现为独立的模块化芯片,或作为集成于微处理器中的周边设备。一般是RS-232C规格的,与类似Maxim的MAX232之类的标准信号幅度变换芯片进行搭配,作为连接外部设备的接口。在UART上追加同步方式的序列信号变换电路的产品,被称为USART(Universal Synchronous Asynchronous Receiver Transmitter)。

    我们再查看rt-thread中关于串口的初始化部分发现用的是HAL_UART_Init(), 所以我们的uart1是用的usart初始化函数,并没有被rt-thread初始化,这就是导致没有数据输出的原因

    在这里插入图片描述
    接下来我们把uart的HAL库初始化部分完善一下,如下:

    在这里插入图片描述

    /**
    * @brief UART MSP Initialization
    * This function configures the hardware resources used in this example
    * @param huart: UART handle pointer
    * @retval None
    */
    void HAL_UART_MspInit(UART_HandleTypeDef* huart)
    {
      GPIO_InitTypeDef GPIO_InitStruct = {0};
      if(huart->Instance==USART1)
      {
      /* USER CODE BEGIN USART1_MspInit 0 */
    
      /* USER CODE END USART1_MspInit 0 */
        /* Peripheral clock enable */
        __HAL_RCC_USART1_CLK_ENABLE();
      
        __HAL_RCC_GPIOA_CLK_ENABLE();
        /**USART1 GPIO Configuration    
        PA8     ------> USART1_CK
        PA9     ------> USART1_TX
        PA10     ------> USART1_RX 
        */
        GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_10;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_USART1;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
      /* USER CODE BEGIN USART1_MspInit 1 */
    
      /* USER CODE END USART1_MspInit 1 */
      }
      else if(huart->Instance==USART2)
      {
      /* USER CODE BEGIN USART2_MspInit 0 */
    
      /* USER CODE END USART2_MspInit 0 */
        /* Peripheral clock enable */
        __HAL_RCC_USART2_CLK_ENABLE();
      
        __HAL_RCC_GPIOA_CLK_ENABLE();
        /**USART2 GPIO Configuration    
        PA2     ------> USART2_TX
        PA3     ------> USART2_RX 
        */
        GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        GPIO_InitStruct.Alternate = GPIO_AF1_USART2;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
      /* USER CODE BEGIN USART2_MspInit 1 */
    
      /* USER CODE END USART2_MspInit 1 */
      }
    
    }
    
    

    放在UART初始化函数中,然后重新编译下载,串口log数据打印出来了
    在这里插入图片描述

    4. 参考

    https://www.rt-thread.org/document/site/application-note/setup/standard-project/an0017-standard-project/

    展开全文
  • POSIX 串口编程指南

    2017-05-20 09:41:56
    第一章 串口通信基础 什么是串口通信 什么是 RS-232 信号定义 异步通信 什么是全双工和半双工 流控 Break信号 同步通信 操作串口 串口文件 打开串口 写数据到串口串口读取数据 关闭串口 第二章 配置串口 POSIX ...
  • 串口

    千次阅读 2010-05-28 11:23:00
    DRV_DEBUG打开后串口还是没有信息出来make/drv/drv.def中加入DRV_DEBUG 我一般在dbgprint.c里面直接修改#if 1//def DRV_DEBUG#if 1//(!defined(IC_MODULE_TEST))---------------------------------------
  • 前一段时间进行了USART2串口添加,接收协议改写的工作。这一次就可以利用之前的接收和发送代码来完成miniSTM32单片机与RFID读写器的通信,实现IC卡充值和扣费的操作。资料支持:串口通信数据的LCD显示,中断嵌套...
  • 串口通信

    2017-08-17 10:52:52
    串口通讯—通信协议 所谓通信协议是指通信双方的一种约定。约定包括对数据格式、同步方式、传送速度、传送步骤、检纠错方式以及控制字符定义等问题做出统一规定,通信双方必须共同遵守。因此,也叫做通信控制规程...
  • 关闭串口2.4 将字节序列转换为对应的16进制字符串2.5 将16进制字符串转换为对应的字节序列2.6 使用串口发送2.7 使用串口接收3. 在子线程实现串口发送与接收3.1 建立串口事务处理子线程类:SerialWorker3.2 修改默认...
  • C#串口通信

    2016-01-15 08:08:21
    欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • Linux串口应用编程

    2020-08-03 09:35:32
    1.串口相关操作 在Linux下,除了网络设备,其余的都是文件的形式,串口设备也一样在/dev下。 打开串口: 示例:fd = open("/dev/ttyUSB0",O_RDWR|O_NOCTTY|O_NDELAY); 在打开串口时,除了需要用到 O_RDWR (可读写)...
  • 最近笔者使用C#编程时,经常用到串口通信功能。所以总结记录一下串口通信功能的使用方法。...在添加到序列缓冲区前是否丢弃端口上接收的空字节 DtrEnable 在通信过程中是否启用数据终端就绪(DTR)行
  • Linux UDEV规则写串口别名

    千次阅读 2017-11-20 10:44:31
    串口设置别名的方法
  • linux串口编程设置(USB转串口)

    千次阅读 2019-11-08 08:22:01
    在嵌入式Linux中,串口是一个字设备,访问具体的串行端口的编程与读/写文件 的操作类似,只需打开相应的设备文件即可操作。串口编程特殊在于串 口通信时相关参数与属性的设置,还有必须有串口驱动程序(提供设备...
  • linux查看新增串口、USB设备,Minicom + Usb转串口注意:虚拟机环境下的ubuntu默认情况下是不能自动识别的,需要在虚拟机窗口右下角点击"Prolific USB-Serial Controller",然后选择"Connect...
  • minicom是linux 的一个串口调试工具 下载 http://alioth.debian.org/projects/minicom/ 安装: tar zxf minicom-2.2.tar.gz cd minicom-2.2 ./configure make make install 使用 1、启动 第一次启动需要输入 minicom ...
  • 串口通讯协议

    万次阅读 多人点赞 2018-03-02 10:02:47
    文章转载自http://www.cnblogs.com/firege/p/5805753.html20.1 串口通讯协议简介串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师...
  • 串口通讯协议简介串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式,因为它简单便捷,大部分电子设备都支持该通讯方式,电子工程师在调试设备时也经常使用该通讯方式输出调试信息。在计算机科学里...
  • C++编写串口通信程序

    万次阅读 多人点赞 2018-08-13 19:55:30
    声明:本博客的内容主要是本人学习其他串口通信博客之后的总结,主要参考的博客地址如下: https://blog.csdn.net/wlk1229/article/details/52566701 ... ...
  • c#串口操作系列

    千次阅读 2013-09-27 15:47:02
    我假设读者已经了解了c#的语法,本文是针对刚打算解除串口编程的朋友阅读的,作为串口编程的入门范例,也是我这个系列的基础。 我们的开发环境假定为vs2005(虽然我在用vs2010,但避免有些网友用2005,不支持...
  • 串口编程总结经验

    2019-03-22 09:58:33
    1. 串口操作需要用到的头文件 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <termios.h> #include <sys/types.h> #include <...
  • linux串口操作

    2020-03-06 10:45:51
    串行口是计算机一种常用的接口,具有连接...常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口...
  • linux串口资料

    2015-11-28 16:33:36
    如果既未设置 IGNBRK 也未设置BRKINT,BREAK 将视为与 NUL 字符同义,除非设置了 PARMRK,这种情况下它被视为序列 \377 \0 \0。 IGNPAR 忽略桢错误和奇偶校验错。 PARMRK 如果没有设置 IGNPAR,在有奇偶校验...
  • 串口总结

    千次阅读 2013-08-15 13:26:34
    项目需求从串口中读取数据,刚开始方案是一次从串口中read 512字节的数据然后解析,代码写完后发现有时候接收的数据不是完整的一包数据,导致数据无法解析,为解决这个问题,修改方案为循环读取,一直读到需要的数据...
  • 嵌入式开发——Linux串口编程笔记

    千次阅读 2018-07-18 09:55:05
    Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备。在linux系统下面,每一个串口设备都有设备文件与其关联,设备文件位于系统的/dev目录下面。如...
  • Linux下串口编程

    2020-06-24 22:35:04
    转载自 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。...Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备
  • N76E003之串口

    2018-07-02 18:20:00
    N76E003包含两个具备增强的自动地址识别和帧错误检测功能的全双工串口。由于两个串口的控制位是一样的,为了区分两个串口控制位,串口1的控制位以“_1”结尾(例如SCON_1)。下述详例以串口0为例。每个串口都有一种...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,266
精华内容 2,106
关键字:

修改串口序列