我正在通过 Arduino Due 上的 USART 发送数据。我目前正在填充缓冲区,因此仅在缓冲区已满时才发送数据。
我放入缓冲区的数据是具有 12 位深度(值从 0 到 4095)的不同波形的查找表。因此,我将 2 个字节深度的缓冲区值放入缓冲区中,最高有效字节始终为 0。
我的问题是,每隔一段时间,整个波周期都会移动一个字节(每个值都乘以 256)。错误是不可预测的:它可能发生在要发送的第 2 或第 3 个周期,但它很快就会发生。我尝试了较慢的波特率,或者添加了两个停止位,但没有任何解决方法。相关的代码块:
const int buflen = 2048;
int i = 0;
int j = 0;
int k = 1;
int wave = 0;
short buff[buflen];
volatile PROGMEM short sintab[3][512] = ...//there's no need to paste here the lookup tables
void setup(void){
Serial3.begin(115200, SERIAL_8N2);
}
void loop(void) {
buff[j]= sintab[wave][i];
i+= k;
j++;
if (i>511){
i-=512;
}
if (j>=buflen){
byte* bytePointer =(byte*)buff;
for (int l=0; l<=buflen; l++){
Serial3.write(bytePointer[l]);
Serial3.flush();
}
int j = =0;
}
我正在串行监视器和存储接收到的值并打印它们的 python 程序上检查接收到的数据。我认为错误从未发生在波的中间很奇怪:一个或两个波在缓冲区上被很好地复制,然后整个值被转移。我该如何解决这个问题?