uart

STM32 HAL库 UART使用printf

▼魔方 西西 提交于 2020-03-05 17:53:59
// 添加这个函数 int fputc(int ch,FILE *f) { uint8_t temp[1]={ch}; HAL_UART_Transmit(&UartHandle,temp,1,2); } MDK设置:勾选Use Micro LIB 测试板子:STM32F746NG-DISCOVERY main.c文件 /* Includes ------------------------------------------------------------------*/ #include "main.h" #include <stdio.h> /** @addtogroup STM32F7xx_HAL_Examples * @{ */ /** @addtogroup UART_TwoBoards_ComDMA * @{ */ /* Private typedef -----------------------------------------------------------*/ /* Private define ------------------------------------------------------------*/ #define TRANSMITTER_BOARD /* Private macro -----------------------

UART接口控制器

我的未来我决定 提交于 2020-03-03 01:08:24
主设备与从设备通过总线来进行数据通信,是一个数字系统不可或缺的一部分,本篇讲述一种常见的总线控制器UART串行数据接口,也称为串口。 串口的标准一般有,RS-232、RS-422与RS-485标准,我们讲述的是RS-232接口信号。 1、接口信号定义 RS-232最常见的是9脚接口 表1-1:RS-232接口定义 在实际的应用中,我们只需要关注两个接口,数据接收(RXD)和数据发送(TXD),而其他的接口不需要理会。 串口的时序如图1-1所示: 结合时序图我们说明以下,串口收发数据的过程。在没有需要发送的数据时,接口的电平为高。在需发送的数据到达之前,先会有一个低电平的起始位。而后开始发送数据,而后会发送校验位,最后是停止位。结束后恢复高电平,等待下一个传送周期的起始位出现。 所以我们可以画出一个简单的收发结构图,如图1-2所示: 2、发送模块的设计 当数据准备好时,start信号为高电平,数据并行输入内部寄存器中,等时钟周期来了之后由低位到高位串行发送,代码如下: module UART ( clk , rst , start , data_in , TXD ) ; parameter fst_bit = 1 'b0 ; //开始位为低电平 parameter last_bit = 1 'b0 ; //传输结束信号 input clk , rst ; input start ;

linux UART串口驱动开发文档

*爱你&永不变心* 提交于 2020-02-29 09:39:11
内容简介: 介绍了Linux下的串口驱动的设计层次及接口, 并指出串口与TTY终端之间的关联层次(串口可作TTY终端使用), 以及Linux下的中断处理机制/中断共享机制, 还有串口缓冲机制当中涉及的软中断机制; 其中有关w83697/w83977 IC方面的知识, 具体参考相关手册, 对串口的配置寄存器有详细介绍, 本文不再进行说明. 目录索引: 一. Linux的串口接口及层次. 二. Linux的中断机制及中断共享机制. 三. Linux的软中断机制. 四. TTY与串口的具体关联. 一. Linux的串口接口及层次 . 串口是使用已经非常广的设备了, 因此在linux下面的支持已经很完善了, 具有统一的编程接口, 驱动开发者所要完整的工作就是针对不同的串口IC来做完成相应的配置宏, 这此配置宏包括读与写, 中断打开与关闭(如传送与接收中断), 接收状态处理, 有FIFO时还要处理FIFO的状态. 如下我们就首先切入这一部分, 具体了解一下与硬件串口IC相关的部分在驱动中的处理, 这一部分可以说是串口驱动中的最基础部分, 直接与硬件打交道, 完成最底层具体的串口数据传输. 1. 串口硬件资源的处理 . W83697及W83977在ep93xx板子上的映射的硬件物理空间如下: W83697: 0x20000000起1K空间. W83977: 0x30000000起1K空间.

【转载】UART流控

╄→гoц情女王★ 提交于 2020-02-28 15:20:04
RTS/CTS 提供的是一种PC 和Modem 之间控制数据流的方法. CTS和RTS是串行通讯中流控制的两个管脚,本身成对出现。 以PC与Modem之间的链接为例: (1) Modem 准备接收数据时 使CTS为ON(1) 当Modem 不能接收更多数据时, 使CTS为OFF(0) 即:Modem控制CTS (2) PC 可以接收数据时 RTS 为ON (1) 当PC不能接收更多数据时,RTS 为OFF(0). 即:PC控制RTS RTS/CTS 属于是硬件流量控制 硬件流控是靠软件实现的,之所以强调“硬件”二字,仅仅是因为硬件流控提供了用于流量情况指示的硬件连线, 并不是说,你只要把线连上,硬件就能自己流控。 如果软件不支持,光连上RTS和CTS是没有用的 XON/XOFF则是软件流量控制 XON/XOFF分别对应于(Ctrl-q)和(Crtl-s)字符, 如果选择软件流量控制,则Modem 不能传递Ctrl-q 和 Crtl-s字符,因为这些字符被解释成为流控请求 软流控简介 一般通过XON/XOFF来实现软件流控制。 常用方法是: 当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出XOFF字符 (十进制的19或Control-S),发送端收到XOFF字符后就立即停止发送数据; 当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出XON字符

Verilog 学习笔记-urat串口

▼魔方 西西 提交于 2020-02-27 14:18:20
串口:    串口在嵌入式设备里经常会用到,串口主要包括RS232C串口,RS485串口等,他们只是电平不一样。   RS232也称标准串口,是一种比较常用的串口,采用标准的DB9接口,RS232采用的是负逻辑电平,即-12~-5V表示逻辑1,+5~+12V表示逻辑0。   一般的MCU或者FPGA的管脚只能输出TTL电平,所以一般需要采用想MAX232等电平转换芯片将UART的TTL电平转换成RS232电平。 UART:   UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信。 UART传输协议:    UART一般具有11个bit位,包括一个起始位,8个数据位,一个校验位,一个停止位,校验位可以省掉。    verilog代码实现:   现以将FPGA接收到上位机的数据然后再将这些数据发送回上位机显示为例,整个串口部分可以分别分为 接收 和 发送 模块。   首先接收模块:      接收模块主要包含时钟复位输入,以及8个串行数据输入,以及将接收到的串行数据转换成并行数据输出,并输出一个接收完成标志位。   同时在接收模块内产生串口接收所需要的波特率。 接收模块代码如下:    `timescale 1ns / 1ps //////////////////////////////////////

Uart学习笔记

时光总嘲笑我的痴心妄想 提交于 2020-02-25 16:15:06
分享一个蛮好的链接:https://blog.csdn.net/wordwarwordwar/article/details/73662379 今天在看的资料是S家的DW_apb_uart的官方文档。该uart IP是挂在APB总线上面,CPU通过APB总线对uart进行访问和数据读写操作。 结构如下: PS: sir_in/out是在SIR_MODE Enable时有效,用在irDA红外功能上。(红外功能将UART的NRZ串行比特率调制为脉冲形式) 主要流程是:   1.CPU通过APB总线config UART内部寄存器(register block),包括中断使能,charactor位宽,RX/TX FIFO 门限,同步时钟配置等等   2.数据读写操作(implement with FIFO)(CPU Master): 读:sin -> serial receiver -> sync -> FIFO -> register -> APB 写:APB -> register -> FIFO -> sync -> serial transmitter -> sout   其中FIFO作为buffer,FIFO余量要与APB一次burst WR/RD操作的大小相配合。 UART串行数据格式: 其中parity是奇偶校验位 波特率(baudout)由sclk和Divisor

关于 esp-at 下 esp8266 的 AT 固件 编译 烧写 使用 的注意事项

依然范特西╮ 提交于 2020-02-21 02:57:46
esp-at 现在是合并了 esp32 和 esp8266 的全新仓库, 注意 at 指令集核心部分并不开源。 查看芯片信息可以用 esptool 的 esptool -p /dev/ttyS5 flash_id ,可以看到芯片类型和 flash 大小。 esp-at 资源链接 github esp-at setup-toolchain 编译流程和方法 没有考虑过给没经验的看,但怎么说呢,我尽量留存相关操作指令吧。 配置好 esp8266 的编译工具链 setup-toolchain 。 自行安装 python 和 pip 工具。 git clone --recursive https://github.com/espressif/ESP8266_RTOS_SDK export IDF_PATH=~/esp/ESP8266_RTOS_SDK python -m pip install --user -r $IDF_PATH/requirements.txt Toolchain 配置文档 (Windows 就算了,最差也是用 WSL 的 ubuntu,配置要到位喔 ) sudo apt-get install gcc git wget make libncurses-dev flex bison gperf python python-serial tar -xzf ~

基于STM32之UART串口通信协议(一)详解

99封情书 提交于 2020-02-12 02:04:44
UART —— Universal Asynchronous Receiver/Transmitter —— 通用异步收发器。 一、UART简介 UART是异步串口通信协议, 工作原理是将传输数据的每个字符一位接一位地传输,它能将要传输的资料在串行通信与并行通信之间加以转换,能够灵活地与外部设备进行全双工数据交换。 USART是UART的升级版,其支持同步模式,用法与UART相同 二、概念辨析 ------------------------------------UART COM口 串口 USB口 RS - 232 TTL--------------------------------------------- UART,在硬件上表现为串口收发的逻辑电路,可被集成为独立地模块化芯片 COM口,串行通信端口,有时也称为串口,是一种连接器的结构,这里区别于USB的“通用串行总线”和硬盘的“SATA”,串口的接口标准规范和总线标准规范是 RS-232    常见的有两种物理标准,D型9针插头,和4针杜邦头, USB口:通用串行总线,和串口完全是两个概念。虽然也是串行方式通信,但由于USB的通信时序和信号电平都和串口完全不同,因此和串口没有任何关系。USB是高速的通信接口,用于PC连接各种外设,U盘、键鼠、移动硬盘、当然也包括“USB转串口”的模块。(USB转串口模块

STM32 hal库串口DMA模式收发定长数据

♀尐吖头ヾ 提交于 2020-02-12 00:19:32
//DMA接收定义为循环模式,只能接受定长数据 //串口DMA中断调用的回调函数和串口接收中断是同一个 uint8_t rxch [ 5 ] ; uint8_t trch [ ] = "transmit dma:\r\n" ; int main ( void ) { HAL_UART_Transmit_DMA ( & huart1 , trch , 15 ) ; HAL_UART_Receive_DMA ( & huart1 , rxch , 5 ) ; while ( 1 ) { } } //DMA接收完成回调函数和这是同一个 void HAL_UART_RxCpltCallback ( UART_HandleTypeDef * huart ) { if ( huart -> Instance == USART1 ) { printf ( "%s\r\n" , rxch ) ; HAL_UART_Transmit_DMA ( & huart1 , rxch , 5 ) ; } } //DMA传输完成回调函数和这是同一个 void HAL_UART_TxCpltCallback ( UART_HandleTypeDef * huart ) { uint8_t tx_str [ ] = "Data Transfer completed\r\n" ; HAL_UART_Transmit

UART和RS232/RS485的关系是什么?

ぃ、小莉子 提交于 2020-02-08 11:54:06
串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232则是其中最简单最常用的通讯方式。但是初学者往往搞不清有关的名词如UART和RS232或RS485之间是什么关系,因为它们经常被放到语句中同等的位置使用。在百度搜索 二者的区别 ,可以看到排在最前面的答案充斥着混淆的概念。就此,谈谈我对这几个概念的理解,希望能帮初学者厘清它们之间的关系。 ~ ~ 通讯问题,和交通是一样的。串口通信,我们这里可以用公交来类比。 公交运行可以简单分成两个部分: 1、车站 2、公路 其中车站决定了车上装什么(人),怎么发送(班次)等。 当汽车跑在路上,就要遵守公路交通的规则,过桥有过桥的规则,高速有高速的规则,和车站没有关系了。 ~ 回到串口通讯,其实,UART就相当于车站,而RS232/RS485则对应于公路的规则。 UART,是通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),既然是“器”,显然,它就是个设备而已,要完成一个特定的功能的硬件,它本身并不是协议。那么它要完成什么功能呢?它的最基本功能,是串行数据和并行数据之间的转换。我们知道,计算机中的数据以Byte为基本单位,对一个Byte的存取是并行的,即,同时取得/写入8个bit。而串行通信,需要把这个Byte“打碎”,按照时间顺序来收发以实现串行。例如: 内存中的数据是: