如何阅读前两个数字? python + UART

时间:2016-11-25 11:58:48

标签: python c uart

我想在笔记本电脑和模块之间进行通信。为此,我创建了一个python文件,它将一些数据包发送到UART,它必须读取它们。 我有一个创建数据包的python脚本(笔记本电脑):

SOF= '24'
SEND_PLAINTEXT= '72'
SEND_KEY  ='73'
RECEIVE_CIPHERTEXT='74'
SIZE_OF_FRAME= '10'
for a in range (0,1):

   line_array=lines[a]
   plaintxt_16b=line_array[0:32]
   plaintext= '24'+'72'+'32'+plaintxt_16b
   ser.write (plaintext.encode())

最终数据包为247232ccddeeff8899aabb4455667700112233

UART使用c:

中的这些代码行读取数据包
uint8_t rx_buffer[38];
int rx_length = dev_uart_ptr->uart_read(rx_buffer, 38);

if (rx_length <38)
{
    printf( rx_buffer);
}

我需要只读取两个第一个数字,以便测试它是否是帧的开头。因此,我改变了我的代码:

uint8_t rx_buffer[2];
int rx_length = dev_uart_ptr->uart_read(rx_buffer,2);

if (rx_length <2)
{
    printf( rx_buffer);
}

问题是显示的数字是33,尽管我想阅读24,如果你能帮助我,我将非常感激。

2 个答案:

答案 0 :(得分:2)

此行plaintext= '24'+'72'+'32'+plaintxt_16b似乎是从右到左执行的。所以缓冲区中的第一个东西是plaintxt_16b,然后是其余的。

字节的顺序也在数据包247232ccddeeff8899aabb4455667700112233中从右到左。所以第一个字节(0的索引)是0x33

18.| 17.| 16.| 15.| 14.| 13.| 12.| 11.| 10.| 9. | 8. | 7. | 6. | 5. | 4. | 3. | 2. | 1. | 0.
---------------------------------------------------------------------------------------------
24 | 72 | 32 | cc | dd | ee | ff | 88 | 99 | aa | bb | 44 | 55 | 66 | 77 | 00 | 11 | 22 | 33

尝试以下方法:

plaintext= plaintxt_16b + '32' + '72' + '24'

并保持UART代码相同。

答案 1 :(得分:1)

我建议你检查UART的字节顺序。

我认为你需要阅读最后2个令牌,而不是前2个令牌。

修改

据我了解,您的UART模块从数据包末尾开始发送数据。因此,当您尝试阅读前两个数字时,会得到33,但您应该阅读最后两个数字以获得24

检查this

因为@Jalo坚持这么多答案,所以这就是:

正如我上面提到的,你需要阅读最后两个数字。您可以通过将plaintext= '24'+'72'+'32'+plaintxt_16b更改为plaintext = plaintxt_16b + '32' + '72' + '24'

来撤消输入,从而实现这一目标