标签: uart

在Arduino上将int转换为两个字节

我正在高频采样,需要通过UART从我的Arduino传输10位ADC值.

默认情况下,它每个字符使用一个字节.因此,如果执行analogRead将产生值"612",它将通过UART"6"作为一个字节发送,"1"作为一个字节发送,"2"作为一个字节发送,并将行终止符作为最后一个字节发送.

鉴于我的采样率被这种通信截断,重要的是它尽可能高效和统一,所以我试图强制它使用两个字节来传输那些数据,无论数据实际是什么(通过默认情况下,它将使用三个字节来发送"23",四个字节用于发送"883",五个字节用于发送"1001").

目前,我正在做这样的事情,这是我发现的最好方法:

int a = 600; //Just an example
char high = (char)highByte(a);
char low = (char)lowByte(a);
Serial.print(high);
Serial.println(low);
Run Code Online (Sandbox Code Playgroud)

目前,无论值如何,它都使用三个字节(包括\n).有更有效的方法吗?

只需用类似的东西打印即可

Serial.print(foo, BIN);
Run Code Online (Sandbox Code Playgroud)

根本不起作用.它实际上每foo的二进制表示的每一位使用一个字节,这是非常愚蠢的.

c serial-port arduino char uart

1
推荐指数
2
解决办法
1万
查看次数

USART协议设备可以连接UART协议设备吗?

我正在尝试使用使用 USART 协议的 STM32 与 UART 协议设备进行通信。对于 USART,我只使用 tx 和 rx 引脚,这意味着它在异步模式下工作。我是 STM32 的新手,对 USART 和 UART 通信有点困惑。

serial-communication stm32 uart usart

0
推荐指数
1
解决办法
3019
查看次数

在UART上使用ASCII

ASCII值从0x00到0x7F.是否可以使用剩下的值(0x80到0xFF)来定义一些宏控制数据流?

例1:

#define I_AM_A_FLAG             0x80
#define GIVE_ME_A_1_BYTE_FLAG   0x81
#define GIVE_ME_SOME_TEXT       0x82
Run Code Online (Sandbox Code Playgroud)

Master [Tx] - GIVE_ME_A_1_BYTE_FLAG - > [Rx] Slave
Master [Rx] <------------ I_AM_A_FLAG ----------- [Tx] Slave

示例2:
主[Tx] - GIVE_ME_SOME_TEXT -----------------------> [Rx] Slave
Master [Rx] <------- -----"Hello World!我是一个文本\n"----------- [Tx] Slave

c microcontroller serial-port serial-communication uart

0
推荐指数
1
解决办法
438
查看次数

串行控制台通信如何在微控制器中工作?

我的疑问是关于通信的物理层,我从实践中知道,例如使用 teraterm 与 MCU 通信只是启用和配置 UART 外设,然后通过 USB 连接微控制器和瞧。

但对我来说,如果 USB 连接到 DN 和 DP,而 UART 使用 RX 和 TX,主机如何有效地与微控制器通信,这对我来说还没有意义?

c embedded microcontroller arm uart

0
推荐指数
1
解决办法
380
查看次数

如何将值传递回此字符串?

总结:我有一个连接到 rpi-zero 的 microbit。我对 microbit 进行了编码,当A button按下它时,它会将数据发送uart.write到 rpi-zero。

在这个测试中,microbit 将向uart.write("Test")rpi-0 写入一个“测试”字。

我的最终目标是使用 rpi-zero 的 BLE 功能作为控制设备,从 microbit 按钮发送指令。

我找到了用 python 为 rpi 编写的GATT 服务器代码。它运行完全没有问题。

下面的代码将用于监听 microbit uart 服务并检查接收到的数据是否为"Test"

import serial

serialPort = serial.Serial(port = "/dev/ttyACM0", baudrate=115200, bytesize=8, timeout=0.5, stopbits=serial.STOPBITS_ONE)

serialString = " "

(serialPort.in_waiting > 0)

while True:

        serialString = serialPort.readline()

        if serialString == b'Test':
            print("Yes")
        else:
            print("F")
Run Code Online (Sandbox Code Playgroud)

但真正的问题是当我尝试将这个循环代码实现到 GATT 服务器代码中时。

我似乎无法理解如何将此值传递给 self.send_tx

此外,似乎 GATT 服务器代码中已经存在一个全局循环。所以我尝试使用线程同时运行这两个函数,但是当我添加self.send_tx("Test")它时只会抛出一个错误Self is …

python uart raspberry-pi bluetooth-lowenergy bbc-microbit

0
推荐指数
1
解决办法
483
查看次数