Перекрестные помехи на общей коммуникационной шине MCU (1) — UART и USART
Перекрестные помехи на общей коммуникационной шине MCU (1) — UART и USART

🙌Домашняя страница программиста Акинаяма 😂oi Игрок на пенсии, увлекается Java, большими данными, микроконтроллерами и Интернетом вещей, любит технологии, технологии не виноваты. 🎉Добро пожаловать, подписывайтесь🔎Мне нравится👍Собрать⭐️Оставить сообщение📝

Предисловие

Во-первых, разъясним понятие о коммуникационной шине и протоколе связи в MCU. Коммуникационная шина — это физический интерфейс, используемый для подключения различных периферийных устройств и модулей. Он может передавать данные и управлять информацией. Протокол связи относится к правилам и соглашениям, которым следуют при передаче данных по коммуникационной шине, чтобы обеспечить правильный обмен информацией между различными устройствами. Мы также можем назвать его протоколом коммуникационной шины.

В этой серии статей в основном объясняются следующие протоколы шины, которые читатели могут выбрать в соответствии со своими потребностями:

  1. УАРТ и УАРТ
  2. Шина RS232, RS485
  3. автобус ИИК
  4. Шина SPI
  5. CAN-шина
  6. USB-шина

1. Введение

UART: универсальный асинхронный приемник/передатчик, универсальный асинхронный приемник и передатчик. USART: универсальный синхронный/асинхронный приемник/передатчик, универсальный синхронный/асинхронный последовательный приемник/передатчик.

UART — это общий протокол асинхронной последовательной связи, который использует стартовые биты, биты данных, проверочные биты и стоповые биты для передачи данных. При связи UART данные передаются с фиксированной скоростью передачи. Передающая и принимающая стороны должны заранее согласовать такие параметры, как скорость передачи данных, биты данных, контрольные биты и стоповые биты. UART обычно используется для подключения микроконтроллеров, датчиков, периферийных устройств и т. д., а также широко используется в последовательной связи в компьютерных системах.

USART — более сложный протокол последовательной связи, поддерживающий как синхронные, так и асинхронные методы передачи данных. В отличие от UART, USART может выбирать синхронный или асинхронный режим связи и предоставляет больше возможностей управления, таких как аппаратное управление потоком, двусторонняя связь и т. д. USART обычно используется в сценариях, требующих высокой скорости передачи данных, двусторонней связи или более гибкого управления.

2. Формат кадра

UART:

  1. Стартовый бит Bit):Индикация стартового битаданныеначало кадра。это всегдаНизкий логический уровень и указывает на то, что передача данных вот-вот начнется.
  2. данные Кусочек(Data Биты): Биты данных представляют собой фактическую часть передачи данных. Он представляет собой передаваемые данные, которые могут иметь длину 5, 6, 7 или 8 бит, в зависимости от выбранной длины данных.
  3. Паритет Бит): бит проверки является необязательным и используется для обнаружения ошибок во время передачи. Общие методы проверки включают нечетность, четность или отсутствие четности. Выбор контрольных цифр зависит от правил проверки, заранее согласованных обеими сторонами.
  4. Стоповый бит (Стоп Bit):останавливаться Кусочекотметкаданныеконец кадра。это всегдаВысокий логический уровень используется для информирования принимающей стороны о том, что кадр данных передан.

В процессе отправки скорость передачи данных отправителя и получателя должна быть согласованной. Чтобы уменьшить накопленную ошибку, максимум 1 байт, то есть максимальное количество отправляемых битов данных, составляет 8 бит.

USART поддерживает синхронный режим, поэтому для USART требуется сигнал синхронизации USART_CK. Как правило, синхронные сигналы редко используются в микроконтроллерах, поэтому USART и UART используются одинаково, оба используют асинхронный режим.

3. Подключение оборудования

Существуют некоторые различия в аппаратных соединениях между USART и UART, главным образом потому, что USART поддерживает синхронную связь, а UART — нет. Вот как подключено их оборудование:

  1. Аппаратное соединение UART:
  • UART обычно использует три провода: TX (передатчик), RX (приемник) и земля (GND). Линия TX на передающей стороне соединяется с линией RX на принимающей стороне.,Линия TX на принимающей стороне соединена с линией RX на передающей стороне. также,Заземляющие провода на обоих концах должны быть вместе.,чтобы гарантировать, что опорный потенциал сигналов одинаков.
  • В микроконтроллере или встроенной системе,UART обычно поступает через контакты на чипе.,Например, контакт TX микроконтроллера к контакту RX внешнего устройства.,Вывод RX микроконтроллера подключается к выводу TX внешнего устройства.
  1. Аппаратное обеспечение USART:
  • Метод соединения USART аналогичен UART.,Но в синхронном режиме также требуется линия тактирования (CLK). поэтому,USART обычно использует четыре провода в синхронном режиме: TX, RX, CLK и GND.
  • При синхронизации с USART связью,Отправителю и получателю необходимо использовать тактовый сигнал.,Поэтому для соединения необходимы дополнительные линии синхронизации.

В общем, основная разница в аппаратном соединении между UART и USART заключается в том, нужно ли подключать линию синхронизации.

4. Режим работы

  • передача данных Симплексный режим (Связь) односторонняя. общение между обеими сторонами,Одна сторона фиксируется как отправитель,Одна сторона фиксируется как принимающая сторона. Информация может распространяться только в одном направлении,Используйте линию передачи.
  • Полудуплексный режим (Полудуплексный режим) Дуплекс) используют одну и ту же линию передачи,Вы можете как отправлять, так и получать данные,Но отправка и получение не могут осуществляться одновременно. передача данных позволяет передавать данные в обоих направлениях,но,данные могут быть отправлены только одной из сторон в любое время,Другая сторона получает данные. Поэтому полудуплексный режим может использовать одну линию данных.,Также возможно использовать две строки данных. Полудуплексная связь требует наличия электронного переключателя трансивера на каждом конце.,Решите, в каком направлении будут передаваться данные путем переключения. Потому что есть переключатель,Так что будет задержка во времени,Эффективность передачи информации ниже.
  • Полнодуплексный режим (Polny Duplex) связи позволяет передавать данные в обоих направлениях одновременно. поэтому,Полнодуплексная связь представляет собой комбинацию двух режимов симплексной связи.,Для этого требуется, чтобы отправляющее устройство и принимающее устройство имели независимые возможности приема и отправки. В полнодуплексном режиме,На каждом конце есть передатчик и приемник,Есть две линии передачи,Эффективность передачи информации высокая.

Очевидно, что при одинаковых других параметрах полнодуплексная передача происходит быстрее и эффективнее полудуплексной.

5. Процесс использования

  1. Инициализация: Сначала необходимо инициализировать модуль UART, включая настройку скорости передачи данных (Baud Скорость), длина бита данных, проверочный бит и стоповый бит и другие параметры. Эти параметры должны соответствовать одноранговому устройству связи, чтобы обеспечить нормальную передачу данных.
  2. Отправка данных: Чтобы отправить данные, сначала запишите данные для отправки в буфер отправки UART. После программной записи данных в буфер передачи модуль UART автоматически отправит данные. Перед отправкой данных необходимо проверить, пуст ли буфер отправки, чтобы гарантировать возможность безопасной записи новых данных.
  3. Получение данных: При получении данных необходимо проверить, есть ли новые данные, доступные для чтения в буфере приема. Если в приемном буфере есть читаемые данные, их можно считать и обработать программно.
  4. Обработка ошибок: Во время процесса связи UART могут возникнуть некоторые ошибки, такие как ошибки проверки или ошибки кадра. При получении данных необходимо своевременно проверять флаг ошибки для соответствующей обработки и восстановления ошибки.
  5. Обработка прерываний. Чтобы повысить скорость отклика и эффективность системы, прерывания UART обычно используются для обработки приема и передачи. В случае использования прерываний необходимо написать соответствующую процедуру обслуживания прерываний (ISR) для обработки ситуации, когда получено новое сообщение или буфер отправки пуст.
  6. Завершение работы и очистка: когда программа завершается или UART больше не нужен, необходимо выключить модуль UART и выполнить соответствующую работу по очистке ресурсов, чтобы освободить связанные ресурсы и закрыть соответствующие прерывания.

Конкретный пример (MCU — STM32F103)

Язык кода:javascript
копировать
#include "bsp_usart.h"
 /**
  * @brief  Конфигурация Вложенный векторный контроллер прерываний NVIC
  * @param  никто
  * @retval никто
  */
static void NVIC_Configuration(void)
{
  NVIC_InitTypeDef NVIC_InitStructure;
  
  /* Выбор группы вложенных векторных контроллеров прерываний */
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
  
  /* КонфигурацияUSART — источник прерываний */
  NVIC_InitStructure.NVIC_IRQChannel = DEBUG_USART_IRQ;
  /* Кража приоритета*/
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
  /* подприоритет */
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
  /* Включить прерывания */
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
  /* Инициализация конфигурации NVIC */
  NVIC_Init(&NVIC_InitStructure);
}

 /**
  * @brief  USART GPIO Конфигурация,Рабочие параметры Конфигурация  * @param  никто
  * @retval никто
  */
void USART_Config(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStructure;

	// Включите часы последовательного порта GPIO.
	DEBUG_USART_GPIO_APBxClkCmd(DEBUG_USART_GPIO_CLK, ENABLE);
	
	// Включите часы периферийного устройства последовательного порта.
	DEBUG_USART_APBxClkCmd(DEBUG_USART_CLK, ENABLE);

	// Будет ли USART GPIO Tx — это режим двухтактного мультиплексирования.
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_TX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(DEBUG_USART_TX_GPIO_PORT, &GPIO_InitStructure);

  // Будет ли USART Конфигурация GPIO Rx находится в режиме плавающего ввода.
	GPIO_InitStructure.GPIO_Pin = DEBUG_USART_RX_GPIO_PIN;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
	GPIO_Init(DEBUG_USART_RX_GPIO_PORT, &GPIO_InitStructure);
	
	// Рабочие параметры Конфигурация последовательного порта
	// Конфигурация
	USART_InitStructure.USART_BaudRate = DEBUG_USART_BAUDRATE;
	// Конфигурация Длина слова данных иглы
	USART_InitStructure.USART_WordLength = USART_WordLength_8b;
	// Конфигурацияостанавливаться Кусочек
	USART_InitStructure.USART_StopBits = USART_StopBits_1;
	// Конфигурацияпроверять Кусочек
	USART_InitStructure.USART_Parity = USART_Parity_No ;
	// Конфигурация аппаратного управления потоком данных
	USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	// Конфигурация рабочего режима, отправка и получение одновременно
	USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	// Завершите инициализацию последовательного порта. Конфигурация.
	USART_Init(DEBUG_USARTx, &USART_InitStructure);
	
	// Уровень приоритета прерывания последовательного порта Конфигурация
	NVIC_Configuration();
	
	// Включить прерывание приема последовательного порта
	USART_ITConfig(DEBUG_USARTx, USART_IT_RXNE, ENABLE);	
	
	// Включить последовательный порт
	USART_Cmd(DEBUG_USARTx, ENABLE);		

  // Очистить флаг завершения отправки
	//USART_ClearFlag(USART1, USART_FLAG_TC);     
}

/*****************  отправить персонажа **********************/
void Usart_SendByte( USART_TypeDef * pUSARTx, uint8_t ch)
{
	/* Отправить один байт данных в USART */
	USART_SendData(pUSARTx,ch);
		
	/* Ожидание отправки данных. Регистр пуст. */
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);	
}

/*****************  Отправить строку **********************/
void Usart_SendString( USART_TypeDef * pUSARTx, char *str)
{
	unsigned int k=0;
  do 
  {
      Usart_SendByte( pUSARTx, *(str + k) );
      k++;
  } while(*(str + k)!='\0');
  
  /* Дождитесь завершения отправки */
  while(USART_GetFlagStatus(pUSARTx,USART_FLAG_TC)==RESET)
  {}
}

/*****************  Отправьте 16-значный номер **********************/
void Usart_SendHalfWord( USART_TypeDef * pUSARTx, uint16_t ch)
{
	uint8_t temp_h, temp_l;
	
	/* Уберите верхние восемь цифр */
	temp_h = (ch&0XFF00)>>8;
	/* Удалить младшие восемь бит */
	temp_l = ch&0XFF;
	
	/* Отправить старшие восемь битов */
	USART_SendData(pUSARTx,temp_h);	
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);
	
	/* Отправить младшие восемь битов */
	USART_SendData(pUSARTx,temp_l);	
	while (USART_GetFlagStatus(pUSARTx, USART_FLAG_TXE) == RESET);	
}

///Перенаправление функции библиотеки c printf на последовательный порт. Функцию printf можно использовать после перенаправления.
int fputc(int ch, FILE *f)
{
		/* Отправьте байтовые данные в последовательный порт */
		USART_SendData(DEBUG_USARTx, (uint8_t) ch);
		
		/* Ожидание завершения отправки */
		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_TXE) == RESET);		
	
		return (ch);
}

///Перенаправляем функцию библиотеки c scanf на последовательный порт. После перезаписи вы можете использовать scanf, getchar и другие функции.
int fgetc(FILE *f)
{
		/* Ожидание ввода данных последовательного порта */
		while (USART_GetFlagStatus(DEBUG_USARTx, USART_FLAG_RXNE) == RESET);

		return (int)USART_ReceiveData(DEBUG_USARTx);
}

наконец

Если эта статья была для вас полезна, пожалуйста, поддержите блогера трижды!

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода