У мене є маленька дошка 2.0, і я намагаюся використовувати її для управління цим РК-дисплеєм за допомогою серії TTL.

швидкість

Я змусив це добре працювати з моїм Arduino uno та зразком коду Arduino, але я хочу зробити це за допомогою teensy та мови C.

Підліток використовує ATmega32u4, і ось опис цього чіпа.

У таблиці даних, починаючи зі сторінки 186, ви знайдете розділ USART. На сторінці 192 є зразок коду мовою C про те, як ініціалізувати USART. Я заплутався у декількох рядках, і мені може знадобитися допомога.

По-перше, мені незрозуміло, яким має бути число швидкості передачі даних. Для мого РК-екрану потрібно 9600 бод з 1 стартовим бітом, 1 стоп-бітом, без біта парності та 8 бітами даних. На сторінці 189 таблиці даних ATmega32u4 я зробив розрахунок, якою повинна бути швидкість передачі даних, яка у випадку підліткової та РК-комбінації повинна бути 103, оскільки частота мікросхеми становить 16 МГц, а швидкість передачі даних становить 9600. Це також відповідає номер у таблиці на сторінці 213 таблиці даних ATmega32u4. Тож це правильне число, яке буде передано функції USART_Init для змінної в боді?

Мене також бентежить два рядки, які встановлюють швидкість передачі даних. Я розумію, що на основі сторінки 209 таблиці даних ATmega32u4 регістри швидкості передачі поділяються на високий регістр і низький регістр, але у високому регістрі використовуються лише біти 8:10, що робить його 12-бітовим комбінованим регістром . Отже, повертаючись до коду, я не розумію деяких речей:

  1. Чому підписується символ без знака, тому що, на мою думку, UBRRHn має бути в двійкових записах?
  2. Я також не розумію частину (бод >> 8), тому що якщо ви заповнили 103 для бода, ви отримаєте (103 >> 8), і це неправильно. Хто-небудь може пояснити мені цей рядок? Дякую.
  1. Чи повинен бути бод 12-бітною двійковою версією 103, яка є 00001100111? Якщо так, то як би писався код?

Крім того, я знайшов кілька зразків коду (http://www.pjrc.com/teensy/uart.html) на веб-сайті teensy, який налаштовує UART і встановлює швидкість передачі даних так:

Якщо я підключу цифри, це буде виглядати так:

  1. Число 208 відрізняється від 103, тому я не розумію, звідки вони беруть рівняння для його обчислення.
  2. UBRRn згадується лише в таблиці даних ATmega32u4 на сторінках 188 та 189. Здається, що вона має значення UBRRHn та UBRRLn. Вищезазначений код намагається встановити обидва одночасно, але як int. Я настільки розгублений, чи не потрібно це робити в двійкових записах?

Ну, я з нетерпінням чекаю, щоб подолати цей горб і продовжувати робити свій рідкокристалічний танець.:)