草庐IT

通过修改HAL_UART_Transmit_DMA()函数,解决串口发送DMA只能发送一次的问题

参考文章:1. http://t.csdn.cn/FT6Mg         2. http://t.csdn.cn/ejFIQ今天用STM32F1的HAL库开发遇到一个奇怪的问题,在主函数循环调用中用串口1的DMA请求,将内存中的数据发送给串口,无论延迟Delay开了多大,始终只能发送一次DMA数据。后来在网上查阅大佬的资料终于有了思路。废话不多说,先上代码:在stm32f1xx_hal_uart.c文件中找到HAL_UART_Transmit_DMA()函数实现,在解锁操作__HAL_UNLOCK;后添加代码:huart->gState=HAL_UART_STATE_READY; 编译以后

FT232R USB UART驱动安装

FT232RUSBUART驱动安装提示无FT232RUSBUART驱动!安装该驱动:​​https://ftdichip.com/drivers/d2xx-drivers/​

DW_apb_uart(1)

文章目录第一章总体概述1.1IP产品说明1.2DW_apb_uart功能描述1.2.1发送和接收数据FIFO1.2.2DMA控制器接口1.2.3异步时钟支持1.2.4自动流量控制1.2.5可编程发送保持寄存器空(THRE)中断1.2.6串口红外支持1.2.7增加内置诊断功能1.2.81级和2级调试支持1.3DW_apb_uart整体框架1.4DW_apb_uart特征第一章总体概述1.1IP产品说明DW_apb_uart是一种可编程通用异步收发器(uart),该组件是符合AMBA2.0标准的高级外围总线(APB)从设备。DW_apb_uart按照业内标准16550建模。寄存器地址空间已重新定位

UVM实战(张强)--- UART实例代码详细注解

目录一、整体的设计结构图二、各个组件代码详解2.1DUT2.2top_tb2.3my_driver2.4my_transaction2.5my_env2.6my_monitor2.7my_agent2.8my_model2.9my_scoreboard2.10my_sequencer2.11base_test2.12my_case02.13my_case1一、整体的设计结构图各个模块的基础介绍:(1)DUT:待测平台,这里为uart串口功能(2)sequence:创建一个my_straction的实例m_trans,将其随机化,最终将其送给sequencer(3)sequencer:uvm_s

UVM实战(张强)--- UART实例代码详细注解

目录一、整体的设计结构图二、各个组件代码详解2.1DUT2.2top_tb2.3my_driver2.4my_transaction2.5my_env2.6my_monitor2.7my_agent2.8my_model2.9my_scoreboard2.10my_sequencer2.11base_test2.12my_case02.13my_case1一、整体的设计结构图各个模块的基础介绍:(1)DUT:待测平台,这里为uart串口功能(2)sequence:创建一个my_straction的实例m_trans,将其随机化,最终将其送给sequencer(3)sequencer:uvm_s

基于FPGA的通用异步收发传输器(UART)设计

基本目的: (1)了解UART通讯原理,包括数据传输格式、电气特性等;(2)研究Basys3开发板与PC之间通讯电平规格的转换;(3)设计并实现UART的发送(TX)功能或接收(RX)功能。高级任务(可选):可调。(4)设计并实现UART的发送(TX)功能和接收(RX)功能,构建回环测试;(5)可根据表1的UART协议规格,自由配置UART的各项参数;指标描述波特率9600bps、115200bps、460800bps(可调)起始位数1数据位数7、8(可调)校验位奇校验、偶校验(可调)停止位1表1 UART协议规格(6)在实现以上功能的基础上,对电路进行优化,降低资源利用率;(7)基于以上要求

串行通信协议(I2C、SPI、UART、SCCB、CAN)

推荐一部书,在这本书里面介绍了I2C、SPI、UART和CAN等通信协议,写的蛮不错的。串行通信:设备与设备之间,传输数据按顺序依次1bit位接1bit位进行传输。并行通信:设备与设备之间,通过多条传输线,可以同时传输多个bit位的信号。I2C(Inter-IntegratedCircuit)1.简单的双向两线制总线协议标准、半双工通信2.双向串行数据线(SDA)用来表示数据,串行时钟线(SCL)用于数据收发同步3.总线通过上拉电阻接到电源。当I2C设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。写数据数据传输方向没有发生改变(写寄存器地址,写数据)开

MicroBlaze系列教程(5):AXI_UART16550的使用

文章目录@[toc]AXI_UART16550简介MicroBlaze硬件配置常用函数使用示例参考资料工程下载本文是XilinxMicroBlaze系列教程的第5篇文章。AXI_UART16550简介axi-uart16550是Xilinx的一款串口IP核,支持配置成16450或16550模式,16550和16450是指的早期电脑主板上的串口芯片型号,16550相比于16450多了FIFO,现在已经很少使用。相比于axi-uartlite,16550支持1或2位停止位,包括uartlite所有的功能,而且支持在SDK中灵活对波特率、数据、校验方式进行配置。与uartlite不同的是,不能单独指

Android Mediatek 修改打印串口 (uart0) 为普通串口

目录修改的文件:文件修改说明:这个主要修改了Mediatek 打印串口(uart0)为普通串口,这样可以避免在使用uart0不必要的调试信息。修改的文件:bootable/bootloader/lk/app/mt_boot/mt_boot.csystem/core/rootdir/init.rc文件修改说明:mt_boot.c:修改了启动Linux的函数boot_linux_fdt,将printk.disable_uart的值从0改为1,这样在用户构建中就不会打印调试信息。init.rc:注释掉了console服务的定义和启动,这个服务在ro.debuggable=1时会启动一个shell在控

关于STM32使用HAL_UART_Receive()无法接收数据的问题

一、问题发现    在项目中我想通过阻塞的方式接收一段来自串口的数据,于是使用了HAL_UART_Receive函数,但跑起来发现一直超时接收不到。网上使劲搜但没搜到啥有用的结果,那只能自己捣鼓了。一开始怀疑是硬件的问题,于是用示波器直接连到对应的rx脚上,发现数据正常;于是我又尝试使用中断接收的方式,发现也能接收。那么,基本可以确定是HAL_UART_Receive这个函数本身有问题了。 二、问题追踪    进入debug,并打开使用的USART的寄存器监视(我使用的USART1),发现RXEN一直都是0,ORE一直都是1(这两个都是ISR寄存器中的标志,关于USART的寄存器介绍,可看看这