手动设置时Arduino uno串行传输错误在115200

问题描述

我用手动设置而不是串行库配置了arduino UNO的串行端口。下面是代码

#include <avr/interrupt.h>
#include <avr/io.h>
#include <SoftwareSerial.h>
#define BAUdratE 115200
#define BAUD_PRESCALLER (((16000000UL / (BAUdratE * 16UL))) - 1)
//////////////////////////////ch1 signals////////////////////////////////
#define rx1Pin 4    // PD4
#define tx1Pin 3    // PD3

// set up a new serial port
SoftwareSerial  mySerial1 =  SoftwareSerial(rx1Pin,tx1Pin);
void uart_transmit (unsigned char data)
{
  while(!(UCSR0A & (1<<UDRE0)));
  UDR0 = data;
}

void mega_init()
{
  UCSR0C|=(1<<UCSZ00)|(1<<UCSZ01);// 8bit transmission(UCSZ02 in B register); also select asynchronous mode,1 stop bit
  UBRR0H=(uint8_t)(BAUD_PRESCALLER>>8);
  UBRR0L=(uint8_t)BAUD_PRESCALLER;
  UCSR0B|=(1<<RXEN0)|(1<<TXEN0)|(1 << RXCIE0);// enbale reciever and transmitter
}
void setup() {
  // put your setup code here,to run once:
   // Open serial communications and wait for port to open:
  //Serial.begin(115200);
  

  // define pin modes for tx,rx:
  pinMode(rx1Pin,INPUT);
  pinMode(tx1Pin,OUTPUT);
  pinMode(13,OUTPUT);
  //mySerial1.begin(38400);
  mySerial1.begin(115200);
  mySerial1.println("Hello,Software Seri");
 // Serial.println("Hello,Hardware Serial Working");

  mega_init(); 
// Turn on the transmission,reception,and Receive interrupt     
   sei();// enable global interrupt
   //interrupts();
   
}

void loop() {
  // put your main code here,to run repeatedly:
  
//  if (Serial.available())
//    mySerial1.write(Serial.read());

    
  digitalWrite(13,HIGH);
  delay(2000);
  digitalWrite(13,LOW);
  delay(2000);
  uart_transmit('A');
}

ISR(USART_RX_vect)
{ 
  digitalWrite(13,HIGH);
  mySerial1.write(UDR0);// read the received data byte in temp
}

实际上,我需要将在HW UART上接收的数据传输到SW UART。我分别检查了HW UART和SW UART的发送和接收,并且工作正常。数据是在10kHz处采样的1000个字节的流,并在HW UART处接收并立即传输到SW UART。

当我以115200bps的速率将数据从硬件UART传输到软件UART时,会发生数据丢失。丢失可能是由于在HW UART上轮询串行数据造成的。

因此,我决定使用中断在HW UART处接收数据,并在ISR处发送至SW UART。因此,我将寄存器配置为115200bps。但是现在arduino无法通过硬件UART以115200bps的速率发送任何数据,但是相同的代码可以在9600bps的速率下工作。

我已经分别检查了arduino以115200bps的传输率和接收率,但是无法正常工作。

为什么HW UART在115200上具有串行库而不在没有库的手动配置下工作?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)