我正在高频采样,需要通过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的二进制表示的每一位使用一个字节,这是非常愚蠢的.
我正在尝试使用使用 USART 协议的 STM32 与 UART 协议设备进行通信。对于 USART,我只使用 tx 和 rx 引脚,这意味着它在异步模式下工作。我是 STM32 的新手,对 USART 和 UART 通信有点困惑。
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
我的疑问是关于通信的物理层,我从实践中知道,例如使用 teraterm 与 MCU 通信只是启用和配置 UART 外设,然后通过 USB 连接微控制器和瞧。
但对我来说,如果 USB 连接到 DN 和 DP,而 UART 使用 RX 和 TX,主机如何有效地与微控制器通信,这对我来说还没有意义?
总结:我有一个连接到 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 …
uart ×5
c ×3
serial-port ×2
arduino ×1
arm ×1
bbc-microbit ×1
char ×1
embedded ×1
python ×1
raspberry-pi ×1
stm32 ×1
usart ×1