问题标签 [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.

0 投票
1 回答
64 浏览

c - ATmega16 编程寄存器不匹配

我正在对ATmega16进行编程,我在设备管理器( atmel studio 6.2 )中选择了该控制器,但寄存器与 ATmega16 数据表中的寄存器不匹配。我正在使用 ICE 3,并尝试使用模拟器,但结果相同。寄存器UCSRC与其他一些控制器不同,并且无法写入其中,即使我设置MSBone.

0 投票
1 回答
690 浏览

c - 嵌入式软件程序块,I2C?

在为 ST Microelectronics iNemo 开发应用程序时,我遇到了一个非常奇怪的问题。我的申请包括:

  • 使用 SPI 的陀螺仪读数
  • 加速度计和磁力计(在同一设备中)使用 I2C 读取
  • 姿态估计算法
  • 局部放电功能
  • 使用 USART 接收数据,带中断,不带 DMA
  • 使用 USART 发送记录数据包

循环由 100Hz 的定时器触发。该程序运行良好(我已经使用一些 USART 调试打印对其进行了测试),直到我开始使用 USART 发送数据:我最初的猜测是,由于这个事实可以接收中断,它会导致 I2C 总线套利机制出现问题。我的猜测是,当我成功调试问题(即与时间有关)时,使用 USART 打印,我检测到最后一次打印总是在磁力计的加速度计打印之前(我在代码中调用的第一个)。此外,如果我通过我提到的 USART 启用详细调试打印,问题发生的情况较少,而如果我禁用它并且我只发送记录数据包,问题总是会立即发生。任何人都可以告诉我这个问题的原因是什么?谢谢

编辑:我附上我的 I2C 代码:

0 投票
2 回答
931 浏览

microcontroller - STM32L1 的直接存储器访问 RX

一段时间以来,我一直在尝试将数据块从我的计算机传输到STM32L100C-DISCOover USART。出于性能原因,这将使用 DMA 来完成。然而,到目前为止,我还没有让它工作。由于我似乎无法弄清楚我可能做错了什么,所以我想我会在这里问。

我正在使用libopencm3,但不幸的是,他们原本出色的示例存储库似乎不包含STM32L1xxx. 不过,我检查了我是否涵盖了通用 DMA 头文件中可用的配置选项的所有基础。

自然,我参考了 STM32L1xxx 的参考手册,其中提到了 DMA1 的以下请求表,这让我相信通道 6 是我需要使用的。

DMA 请求表

由于我不确定内存和外围设备(即 USART2)的大小,因此我在 8 位、16 位和 32 位的所有组合中进行了更改,但无济于事。

无需再费周折; 这是我正在尝试做的最小工作(嗯,不工作..)的摘录。我觉得我忽略了 DMA 配置中的某些内容,因为 USART 本身可以正常工作。

在这一点上,任何事情都值得赞赏。

这段代码背后的想法基本上是永远循环,直到缓冲区中的数据被完全替换,然后当它被替换时,输出它。从主机,我正在发送一千字节的高度可识别的数据,但我得到的只是格式错误的垃圾。它正在写一些东西,但不是我打算写的东西。

编辑:这是内存映射的图片。USART2_BASE计算结果为0x4000 4400,所以这似乎也没问题。

内存映射

0 投票
1 回答
239 浏览

c - Usart 中断注册

我正在为我的应用程序使用 AT32UC 系列(定制板),而 Usart RS485 中断今天让我很生气。我有 Rx 中断设置和工作。现在尝试添加要在数据可发送时调用的 Tx 中断。我的问题是永远不会调用 tx 中断。在为此奋斗了几个小时后,我发现了一些奇怪的东西。

从上面,我得到 rx 中断工作,如果我用 tx 中断改变 INTC rx 中断的顺序,我得到 tx 中断工作并且没有 rx 中断。调用每个中断的函数也在 main 中。有人可以解释我在实现中断时的理解有什么问题吗?我还附上了相关代码片段以供进一步参考。

提前致谢!

0 投票
0 回答
125 浏览

c - AVR32 uc3b Tx 空中断不工作

我目前正在 AT32UCB1258 定制板上处理 RS485 usart 中断,并在 txempty 中断中苦苦挣扎。基本上,我想在发送 5 个字节后禁用 tx。我的 rx 中断(从主板接收命令)和 tx 就绪中断正在正确触发,但是,tx 空中断根本没有触发。我正在检查通道状态寄存器以区分在 USART2 中断处理程序中要触发的中断。任何帮助是极大的赞赏。提前致谢!

目前,如果有 txempty 中断,则观察 gpio_pin06 变低,但永远不会进入那个阶段。我认为 usart 初始化、gpio 启用模块和中断注册设置正确,因为其他中断正在正确触发。

0 投票
1 回答
982 浏览

printf - 使用 putsUSART 和 putrsUSART 与 printf

我正在开发一个嵌入式应用程序,它可以通过本地网络将数据发送到 WCF 服务。这是通过让 PIC18F45K50 通过 USART 将数据发送到 RN-171 模块来实现的。该模块连接到本地 AP 并配置为将数据发送到运行 WCF 服务的本地服务器。为了确定我需要发送的确切字符串,我使用 Fiddler 监视从客户端发送到服务的数据,然后我复制了整个消息并从我的微控制器发送。

我的问题:如果我使用 printf 发送确切的包,服务器接受输入并返回 200 OK,我可以找到存储在我的计算机上的测试消息。但是我在尝试使用 putsUART() 时注意到了一个非常奇怪的问题

以下代码有效:

如果我将第二个 printf 替换为:

服务器不接受包裹。DataBuffer 是一个 char 数组,包含完全相同的参数,并且长度与我在 printf 指令中使用的字符串完全相同。例如,如果我想将字符串存储在一个常量 rom char 数组中并且我使用 putrsUSART(); 也会发生同样的事情。发送它们。

通过这两种方法发送包时,我使用 TeraTerm 查看包的内容,它们看起来相同。我完全失去了为什么会发生这种情况。

使用 printf 和 putsUSART 发送数据有什么区别?(除了显而易见的)第二个函数可以对服务器不喜欢的字符串发送方式做些什么?

0 投票
1 回答
151 浏览

c - 这行简单的 C 代码是如何工作的?

我需要 Arduino Uno 上的 9 位 UART 数据,所以我必须手动设置 Arduino UART。基本上,我不理解这行示例代码(来自数据表),它旨在启用 Arduino 上的 UART Tx 和 Rx 引脚,它以简单易懂的机器语言完成,只是意味着加载一个立即值到 UCSR0B(USART 控制和状态寄存器 B),其中 RXE(接收启用)位和 TXE(传输启用)位都为高。换句话说,加载00011000USCR0B.

这是数据表中的示例 C 代码:

0 投票
1 回答
1504 浏览

stm32 - STM32F427 的 USART1 有时会将第 8 个数据位设置为奇偶校验位

我正在STM32F427通过以下课程使用 UASRT1:

问题是 USART 时不时地开始忽略实际的第 8 个数据位并将其设置为奇偶校验位(具体来说是奇校验)。最奇怪的是,即使在长时间断电后,有时也会发生这种情况,而无需事先进行任何重新编程或其他操作。例如昨天晚上一切正常,然后第二天早上我来上班,打开设备,它开始按照描述的方式工作。但不限于此,下次重启后可能会随机出现。

使用示波器和用于不同程序的不同 UART-USB 转换器可以清楚地看到这种效果。一旦出现这种效应,甚至可以重新编程微控制器以传输测试数据集。例如,0x00 到 0xFF 无限循环。它不影响问题。改变速度(低至 9600 bps)、每个字的位、奇偶校验控制无济于事 - 即使在重新编程后效果仍然保持不变(例如,导致每个字节真正异常的 2 个奇偶校验位)。或者,至少,根据我的程序的工作流程,UASRT 正在初始化并以通常的顺序使用。

修复它的唯一方法是让 main() 函数执行以下操作:

有了这个,在重新编程和重新启动后,前几个字节(最多 5 个)被传输,但随后一切正常,并通过进一步的重新启动和重新编程继续正常工作。

STM32F427在相同布局的 2 个物理上不同的板上的2 个不同的 s 上观察到这种效果。它的外观没有规律性。信号极性和电平符合 USART 要求,在调查期间未检测到噪音或接触不良。从我的程序中使用的其他代码(无论是我的还是库代码)的方向来看,UASRT1 似乎没有任何影响,或者它被深深地掩埋了。在项目中CMSIS-OS用作 RTOS,带有Keil uVision 5.0.5.RTX OS

需要帮忙。

0 投票
1 回答
1458 浏览

microcontroller - 仅在 USART 信号上接收“<0><0><0><0><0><0><0>”

当我尝试使用 Silicon Labs CP210x USB 转 UART 桥接器接收 USART 信号时。我唯一收到的是:

<0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0 ><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0><0>< 0>等

我选择了正确的设置:波特率:9600 数据位:8 奇偶校验:无停止位:1

我使用 ATmega128A3U。端口 E 引脚 0 上的 test_LED(参见下面的代码)正在工作。我用示波器检查了UART信号。在这里看图片:http: //imgur.com/dPxkdZ6

有人知道解决方案吗?

有谁知道如何解决框架错误?(我的 UART 软件出现此错误)

代码:

代码来源:http ://morf.lv/modules.php?name=tutorials&lasit=29

0 投票
1 回答
1225 浏览

c - AVR 9 位 Usart 不工作 (MPCM)

所以有主从Attiny2313。主机发送 9 位数据(第 9 位 TXB8 设置为 1),但从机没有检测到第 9 位(RXB8 仍为 0)。我认为如果在主设备中设置了 TXB8 位,则从设备上的 RXB8 位应该自动设置,或者不?(在代码中,我检查 UCSRB 中的 RXB8 是否设置为 1。事实并非如此,这就是问题所在)