问题标签 [usart]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ATMega328p:通过 USART 发送字节的奇怪行为
我有一个 ATMega328p (MCU) 通过来自ModernDevice.com的 USB 到密封转换器 (BUB) 连接到我的计算机。MCU 通过 TX、RX 和 GND 线连接到 BUB。
为了使用 U(S)ART 发送数据,我使用了这个库,它是基于可以在 Internet 上找到的许多解决方案编写的,并且适合我的需求:
UART.h:
UART.cpp:
以下类控制 UART:
COM.h:
COM.cpp:
在主代码中,以下代码实现了中断处理程序:
COMModule.h:
所以,在所有这些介绍之后,问题是当我连接到 MCU 并发送一个字节时,当执行 TEST 2 和 TEST 4 时(方法 Echo,在 COM.cpp 上),我只能在终端上得到一些 ASCII 答案。每次我在循环内访问 char 数组或字符串数组以发送数组字符时,我都会在桌面终端中得到垃圾。
你有什么可能是错的猜测?
编辑:这是另一个线索:
编辑2:还有一个事实。我真的不明白为什么会这样:
c++ - AVR USART:使数据寄存器灵活
我有一个库,可以写入 arduino 上的串行端口。它使用形式的分配
写作。据我了解,UDR0 是串口 0 的数据寄存器。#define 表示 UDRn 将是这个数据寄存器。该库有一个标志可以在编译时将 UDRn 更改为 UDR1。
但是,我想使用同一个库将不同的数据写入 Serial0 和 Serial1。所以我需要能够有一个写入 UDR0 的实例和一个写入 UDR1 的实例。可以统一这个吗?
就像是:
例如,我可以有指向寄存器的指针吗?
embedded-linux - 嵌入式 Linux 设备在启动期间阻塞 RS485 总线
我正在使用一台工业 Linux 计算机来实现通过 RS485 总线与多个连接的设备进行通信时遇到问题。我遇到的是 RS485 USART 驱动程序使用的 IO 引脚在启动时设置为不同的电平,而不是进入 RS485 空闲/三态。结果,总线上的其他设备在设备启动时被阻塞超过 30 秒,引发各种外部问题。事件过程可以在附图中查看,我在启动期间用示波器测量了输出电压。
我的猜测是,实际驱动器在电压水平达到其三态水平之前不会启动(例如,此设备约为 2.2V)。之后,一切都按预期工作。
我试图找到任何配置文件来设置引导时引脚的默认 IO 级别(认为这可能由引导加载程序设置)无济于事。
此外,我尝试应用启动脚本来“足够早地”运行以将 DATA- 设置为高,但据我所知,有问题的设备没有提供任何接口来控制这些引脚作为常规 GPIO。
任何帮助、提示或见解将不胜感激!
编辑:我不是经验丰富的 Linux 开发人员,所以如果我遗漏了任何重要的细节,请强调。
一些规格:
- ARM920T 版本 0 (v41) CPU
- Linux 2.6 的专有发行版
- 使用 Busybox
- 爱特梅尔 USART 驱动程序
从引导日志中提取:
Linux 版本 2.6.28.10 (root@) (gcc 版本 4.1.2) #94 PREEMPT Tue Oct 29 10:22:19 CET 2013
CPU: ARM920T [41129200] revision 0 (ARMv4T), cr=c0003177
/...
.. ./
端口 /dev/ttyS3 的 RS485 模式已启用
/...
...(我猜这里大约需要 30 秒)
.../
atmel_usart.3: MMIO 0xfffcc000 (irq = 9) 处的 ttyS3 是 ATMEL_SERIAL
atmel_serial.3:将 RS485 RTS 引脚向下放置
/...
...
.../
完整启动日志: https ://drive.google.com/file/d/0B2XYl1mNCa8jNUZ5V0Nic1hkU0U/view
类似问题:
此处可能讨论了一个类似的问题:UART 初始化:防止 UART 拉高 RTS
但我不确定如何继续使用建议的解决方案。
serial-port - VHDL - 如何有效地将整数转换为 ascii 或 8 位 slv
我正在尝试通过串行输出不同的(非常量)值。串行通信工作正常,但似乎没有一种优雅的、可综合的方式将任何大小和值的任何整数/自然/std_logic_vector/unsigned/signed 类型转换为基于 ASCII 表的 8 位 std_logic_vectors 数组。这非常奇怪,因为我想做的事情并不少见。
我可以做到这一点的一种方法是使用大型查找表或长而嵌套的 if-elsif-else 语句链,但这似乎非常低效且不优雅。
这不会合成:
ISE 14.7 因某些头文件引起的模糊错误而中断。即使它确实有效,它也不适用于 0-255 之外的值。这样做的正确方法是什么?
编辑:
我写了一个快速而肮脏的函数来覆盖整数值 0-9999。它不需要计时过程,不需要额外的实体等。到目前为止,建议的答案似乎过于复杂。
您可能已经猜到还有其他三种方法: get_ascii_array_from_int_hundreds get_ascii_array_from_int_tens get_ascii_array_from_int_ones
说出你对这个函数的看法,但请记住,当我需要它时,它会产生正确的结果,而不是几个周期后,而且简单明了。我可以轻松地扩展它以涵盖负数和更大的数字。
interrupt - STM32F303:在 RS485 总线冲突后重复触发 USART 中断的问题
我对 USART 行为有疑问,想知道你们是否可以提供帮助!我正在使用一个 STM32F303,它的三个 USART 正在使用中,其中 USART1 配置为异步 RS485 端口,其 DE 线自动控制。微控制器的 TX、RX 和 DE 引脚连接到 TI SN65HVD1792 RS485 收发器,该收发器向用户提供四根线(TX+、TX-、RX+、RX-)进行通信。
我正在使用中断驱动的 USART 通信,在大多数情况下都可以正常工作。但是,我在处理 RS485 链路配置为双线(TX+/RX+ 和 TX-/RX- 连接在一起,以形成用于两者的 +ve/-ve 线对的错误情况时遇到问题)传输和接收)并且总线上的多个设备尝试同时传输。发生这种情况时,STM32 将停止响应所有串行通信,直到重新上电。
仔细看看发生了什么,我看到 stm32f3xx_it.c 中的 USART1_IRQHandler 被反复调用——一遍又一遍,直到我重新启动电路板。这会调用stm32f3xx_hal_uart.c中的HAL_UART_IRQHandler(&huart1),其作用是检查发生了哪个中断(奇偶校验错误、帧错误、噪声错误、溢出、从停止中唤醒、rx寄存器不为空、tx准备好、tx完成),适当处理,然后清除中断状态。但是,这些特定中断都没有被识别为已触发 - 执行只是通过所有“if”语句,函数退出,然后再次运行 - 无休止。
我找不到任何方法来识别这已经发生,因为它不会抛出任何公认的错误条件。我知道 RS485 总线冲突是应该通过良好的系统设计来避免的,但我们不能排除在客户安装系统时会发生这种情况的可能性 - 它需要能够识别错误,忽略“冲突”消息并继续 - 需要重新启动它是不可接受的。
有没有人知道如何识别这种情况/阻止系统进入中断循环?
提前致谢
中断例程如下(HAL 文件版本 1.2.0,日期 15 年 11 月 13 日)
stm32 - USART协议设备可以和UART协议设备连接吗?
我正在尝试使用使用 USART 协议的 STM32 与 UART 协议设备进行通信。对于 USART,我只使用 tx 和 rx 引脚,这意味着它在异步模式下工作。我是 STM32 的新手,对 USART 和 UART 通信有点困惑。
mplab - PIC32MZ2048ECH144 USART - 传输的垃圾字符
我是 MPLAB X Harmony 框架的新手,也是使用微控制器的新手。我正在研究 PIC32MZ2048ECH144。我想使用 USART 传输一个简单的字符串,并在 RealTerm 终端中看到它的显示。(我也尝试过超级终端。)无论我发送什么字符串,我只看到显示垃圾字符。当我浏览解决显示垃圾字符问题的解决方案时,有人建议检查波特率。我在 MPLab Harmony 配置器中将波特率设置为 9600(选项 -> Harmony 框架配置 -> 驱动程序 -> USART -> USART 驱动程序实例 0 -> 波特率 -> 9600)。所以我在 app.c 中使用以下行来明确设置波特率。(PBCLK 为 100MHz)。但没有运气!PLIB_USART_BaudRateSet(USART_ID_2, 100000000 ,9600); app.c 文件的代码:
很抱歉,由于我没有足够的积分,我无法附上我在 RealTerm 中收到的输出图像。我不知道还有什么问题可能导致波特率不匹配。任何提示或帮助都会有很大帮助。提前致谢。请为帖子中的任何错误向我道歉。
c# - 使用匿名管道时遇到数据通信速度瓶颈
我有一个程序设置,其中 MCU 通过 USART 将传感器数据发送到 C# windows 窗体应用程序。该应用程序在通过 serialdatareceived 事件接收数据后,使用匿名管道将其发送到托管 c++ 应用程序。一旦收到数据,它就会在 OpenGL 3d 环境中绘制。
我的问题是 3D 应用程序每秒只刷新几次,而且动画很慢而且不够流畅。我尽了最大努力提高 USART 速度,但结果是一样的。我相信动画速度受到匿名管道速度的限制。我想知道是否有其他人以前遇到过这个问题,并且可能找到了加快匿名管道数据传输的方法。
所以我的问题是两个应用程序之间的低数据传输速度。理想情况下,我希望每秒 20 多条消息,但至少数据传输的瓶颈应该是 USART 接口而不是匿名管道。我正在运行 19200 的波特率,并且正在传输命令“get_angle”并以相当快的速度接收数据(在 MCU 上计算数据约为 20 毫秒),接收到的数据约为 12 个字符。
我在托管 C++ 中的匿名管道客户端(在 WinMain 中):
我的 C# 匿名管道服务器部分的代码:
c - 使用 usart 重新定义 stdio 的 Printf 未正确格式化
我正在使用带有 Atmel Studio 的 AVR 引导加载程序和带有 Atmega328p 微控制器的 Arduino Uno 一起工作。
我已经设置了 USART 通信,它可以成功发送由我的计算机上的终端读取的数据,但使用 printf 时格式不正确。
我在做这个时参考这个。
我应该得到如下输出:
但我得到:
有什么建议么
arduino - 设备不响应 UART 命令
我正在使用 Arduino mega2560 和 EZO EC(电导率),并尝试使用 Serial.print() 函数发送命令。我正在使用 Arduino IDE 1.6.7。
我有一些我在网上找到的似乎可以正常工作的代码。但我想知道为什么我的代码不起作用。EC 传感器似乎没有收到我发送的数据。似乎没有数据被发送。
我知道这不是我的连接,因为我已经使用运行良好且符合预期的代码测试了设置。
这是我在网上找到的有效代码:
这是我的代码:
Serial3.print 只是没有发送到传感器。但其他代码也使用 Serial3.print() 函数发送一个字符串,它工作正常。我不知道我做错了什么。
我知道我需要编写一个程序来接收来自传感器的任何东西。但一开始似乎什么都没有发送到传感器!
任何帮助将不胜感激。谢谢