คุณสามารถค้นหาความเร็วของพอร์ตอนุกรมปัจจุบันได้หรือไม่?


9

มีรหัสบางอย่างที่ฉันสามารถใช้เพื่อค้นหาความเร็วของพอร์ตอนุกรมที่เลือกไว้ที่ใด


1
อาจเป็นเรื่องง่ายที่จะกำหนดความเร็วในตัวแปร :)
Anonymous Penguin

คุณหมายถึงพีซีหรืออุปกรณ์อื่น ๆ ตั้งค่าความเร็วของอนุกรมและ Arduino เพื่อปรับตัวเองให้เข้ากันหรือไม่
DaveP

คำตอบ:


7

ไม่มีวิธีระดับสูงสุดใช้งานง่าย ขอโทษ มันอาจจะง่ายกว่าที่จะเก็บอัตราการรับส่งข้อมูลที่คุณเลือกไว้ในตัวแปรเมื่อคุณตั้งค่าพอร์ตอนุกรม

อย่างไรก็ตามสิ่งที่คุณสามารถลองทำเพื่อใช้กับฮาร์ดแวร์ UARTs ที่ใช้ AVR นั้นคือการยกเลิกSerial.beginการตั้งค่าอัตราการรับส่งข้อมูลโดยเฉพาะ แต่ก็ค่อนข้างเจ็บปวด นี่คือรหัสสำหรับตั้งค่าอัตรารับส่งข้อมูล:

  // Try u2x mode first
  uint16_t baud_setting = (F_CPU / 4 / baud - 1) / 2;
  *_ucsra = 1 << U2X0;

  // hardcoded exception for 57600 for compatibility with the bootloader
  // shipped with the Duemilanove and previous boards and the firmware
  // on the 8U2 on the Uno and Mega 2560. Also, The baud_setting cannot
  // be > 4095, so switch back to non-u2x mode if the baud rate is too
  // low.
  if (((F_CPU == 16000000UL) && (baud == 57600)) || (baud_setting >4095))
  {
    *_ucsra = 0;
    baud_setting = (F_CPU / 8 / baud - 1) / 2;
  }

  // assign the baud_setting, a.k.a. ubrr (USART Baud Rate Register)
  *_ubrrh = baud_setting >> 8;
  *_ubrrl = baud_setting;

คุณสามารถค้นหาผลลัพธ์ของสิ่งนี้ได้โดยการอ่านการลงทะเบียน UCSRA, UBRRH และ UBRRL ที่ถูกต้อง ใน uno เหล่านั้นคือชื่อการลงทะเบียนที่ถูกต้องบนเมกะ UCSR0A, UBRR0H, UBRR0L สำหรับ Serial, UCRS1A ... สำหรับ serial1 และอื่น ๆ บอร์ดที่ไม่ใช่ avr (และSerialเลโอนาร์โด) จะแตกต่างกันโดยสิ้นเชิง

จะมีสถานะเดียวสำหรับการลงทะเบียนทั้งสามในพอร์ตอนุกรมฮาร์ดแวร์ AVR สำหรับบอร์ดเฉพาะ (และความถี่ของบอร์ดนั้น) ในแต่ละอัตรารับส่งข้อมูล คุณสามารถลองสร้างสมการเพื่อให้ได้อัตราการรับส่งข้อมูลดั้งเดิม แต่ฉันขอแนะนำให้เปรียบเทียบค่าโดยตรงกับการค้นหาบางชนิดเนื่องจากข้อผิดพลาดการปัดเศษจำนวนเต็มจะทำให้เกิดความยุ่งเหยิง

ตัวอย่างเช่นใน UBBR0H ขนาดใหญ่ของฉัน UBBR0L และ UCSR0A คือ 0, 207, 2 ที่ 9600 baud แต่พวกเขาคือ 0, 51, 2 ที่ 38400 baud และ 0, 16, 0 ที่ 57600 baud


ขอบคุณนี่คือสิ่งที่ฉันกำลังมองหา แต่อย่างที่บอกว่ามันอาจเป็นปัญหามากกว่าคุ้มค่าเมื่อเทียบกับทางเลือกอื่น ๆ
Hayden Thring
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.