Я отправляю данные через USART на Arduino Due.В настоящее время я заполняю буфер, поэтому данные отправляются только тогда, когда буфер заполнен.
Данные, которые я помещаю в буфер, представляют собой таблицу поиска различных форм волны с глубиной 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, которая сохраняет полученные значения и распечатывает их.Я думаю, странно, что ошибка никогда не происходит в середине волны: одна или две волны хорошо копируются в буфер, а затем все значение сдвигается.Как я мог это исправить?