Программирование STM32. Часть 16: USART — DiMoon Electronics
Многие из тех, кто имел какое-либо дело с микроконтроллерами, например, с PIC и AVR, знают про такую вещь, как UART. Universal asynchronous receiver transmitter — универсальный асинхронный приемопередатчик встроен как периферийное устройство в любой современный МК, причем в некоторых МК он представлен не в единственном экземпляре. Так же есть некоторая путаница в том, что есть UART, а что есть USART. Universal synchronous asynchronous receiver transmitter (USART) — универсальный синхронный/асинхронный приемопередатчик полностью повторяет функциональность UART, который работает в асинхронном режиме, и включает еще и синхронный режим. В этом случае связь между двумя устройствами USART немного напоминает интерфейс SPI: кроме сигналов RX и TX, добавляется еще один: CK, по которому идет тактовый сигнал от ведущего модуля USART, к ведомому. В данной статье мы рассмотрим самый простой и востребованный случай, а именно обычный асинхронный режим работы USART в микроконтроллере stm32f103c8. Предыдущая статья здесь, все статьи цикла можно посмотреть тут: http://dimoon.ru/category/obuchalka/stm32f1.
Введение
В микроконтроллере stm32f103c8 встроено 3 модуля USART, которые можно достаточно гибко настраивать под свои нужды. Из особенностей можно выделить следующие:
- полный дуплекс;
- возможность работы в полудуплексном режиме по одному проводу;
- дробное задание делителя скорости USART. Это позволяет настроить скорость передачи с нулевой ошибкой на «неудобных» для USART кварцевых резонаторах;
- настраиваемый размер передаваемых данных 8 или 9 бит;
- настраиваемое количество стоп-бит;
- возможность работать с DMA;
- разные примочки для работы с ИК-портом (IrDA), со смарт-картами и т.д.
Описание работы USART
В рамках данной статьи мы коснемся только таких понятий, как формат передаваемых данных (количество бит, контроль четности, стоп-биты) и прерывания USART. Все, что связанно с аппаратным контролем потока, ИК-портом, смарт-картами, синхронным режимом и т.д. мы опустим. Так же пока не будем изучать работу USART совместно с DMA.
Итак, поехали! 😉
Для начала давайте взглянем на блок-схему USART-а:
Рис. 1. Блок-схема USART
Выглядит ужасающе 😁 Давайте разберемся с основными моментами.
Сдвиговые регистры и регистры данных
Основная часть любого последовательного интерфейса передачи данных — это сдвиговой регистр. В USART-е их 2: один на передачу (Transmit Shift Register), другой на прием (Receive Shift Register). Каждый из этих сдвиговых регистров имеет свой буферный регистр данных: Transmit Data Register (TDR) и Receive Data Register (RDR).
Для того, чтобы отправить слово данных в USART (намеренно говорю «слово», а не «байт», так как размер слова может быть 8 или 9 байт), нужно его загрузить в регистр передачи TDR. После записи в TDR это значение «провалится» в сдвиговой регистр передатчика и процесс передачи будет запущен. Стоит обратить внимание, что как только значение из TDR было отправлено в сдвиговой регистр, в TDR можно загрузить еще данные, которые будут там ждать окончания передачи из сдвигового регистра. Таким образом, у нас есть как бы буфер на 2 слова: одно находится в сдвиговом регистре, другое в TDR, что позволяет передавать данные по USART сплошным потоком без пауз между соседними передачами.
Подобным образом выполняется и прием данных. После получения данных сдвиговым регистром приемника, они попадают в регистр RDR, и приемник тут же готов к приему следующего слова данных. Здесь у нас тоже есть как бы буфер на 2 слова, одно в сдвиговом регистре, другое в RDR. Таким образом, мы имеем возможность производить прием сплошного потока данных без пауз между соседними передачами.
В STM32F103C8 регистры TDR и RDR не доступны напрямую программно. Для этих целей служит регистр DR (Data register). При операции записи в DR записанное значение попадает в регистр TDR, а при чтении из DR будет прочитано значение RDR. То есть, прием и передача данных со стороны прошивки будет выглядеть как обращение к одному и тому же регистру DR.
Флаги и прерывания
В модуле USART микроконтроллеров STM32 есть достаточное количество разнообразных флагов и прерываний, с помощью которых мы можем очень удобно реализовать процесс обмена данными как на прерываниях, так и методом опроса регистров.
Давайте кратко ознакомимся с некоторыми интересными флагами. Рассмотрим процесс передачи данных. Если регистр передатчика TDR пуст, и в него можно записать очередное слово, то в регистре статуса будет установлен в 1 специальный флаг TXE (Transmit data register empty). Стоит отметить, что установка флага TXE в 1 вовсе не означает окончание процесса передачи данных. TXE говорит только о том, что можно записать очередное значение в регистр передатчика.
Для того, чтобы убедится в окончании передачи данных по ножке Tx, есть другой флаг в регистре статуса: TC (Transmission complete). Он устанавливается только в случае, если передача данных завершена и нет очередных данных в регистре передатчика для загрузки в сдвиговой регистр (установлен флаг TXE). Флаг TC может быть полезен при реализации интерфейса RS485, когда направление драйвера интерфейса можно переключить только после завершения передачи данных.
Перейдем к приему данных. В регистре статуса есть флаг RXNE (Read data register not empty). Он устанавливается в 1, если в буфере приемника есть новые данные.
Кроме того, при установке в 1 одного из рассмотренных флагов, есть возможность разрешить генерацию прерывания USART, что очень полезно при передаче данных через прерывания.
Форматы передачи данных
Модуль USART поддерживает настройку следующих параметров передачи данных:
- количество бит данных (8 или 9)
- контроль четности (нет, even, odd)
- количество стоп-битов (0.5, 1, 1.5, 2)
Тут стоит отметить одну особенность при обмене данными с использованием контроля четности. Пусть у нас выбрано 8 бит данных, 1 стоп-бит, то, если мы не используем контроль четности, то формат кадра USART будет таким:
- старт-бит; 8 бит данных; стоп-бит
Но, если использовать контроль четности, что таким:
- старт-бит; 7 бит данных; 1 бит четности; стоп-бит
Иными словами, если мы хотим настроить передачу данных вида «8 бит данных + бит четности», то мы должны длину слова выбрать не 8, а 9 бит. В одном своем проекте сталкивался с таким приколом, вроде как все правильно настроил, а приемная сторона ну ни как не хотела принимать данные. Разобрался при помощи осцилла и вдумчивого изучения мануала.
Скорость передачи
Те, кто работал с микроконтроллерами AVR, знают про специальные частоты резонаторов, удобные для работы с UART-ом. В микроконтроллерах STM32 USART имеет более хитрую реализацию, что позволяет получать нулевое отклонение скорости передачи от стандартных значений при работе от самых обычных кварцев, например, 8 МГц (в таблице ниже указаны частоты шин с использованием PLL):
Рис. 2. Ошибка генерации скорости передачи данных для стандартных значений скоростей
Это достигается путем дробной установки коэффициента деления скорости передачи. Регистр установки коэффициента деления BRR состоит из 2-х частей: DIV_Mantissa и DIV_Fraction. Оба эти значения образуют число с фиксированной запятой: VAL = DIV_Mantissa,DIV_Fraction. Однако, формулы и правила расчета значений DIV_Mantissa и DIV_Fraction, представленные в мануале, очень запутанные, поэтому, упростив эти выкладки получаем следующую формулу для вычисления значения BRR:
BRR = (uint16_t)(BUS_FREQ / BAUD)
BUS_FREQ — частота тактирования модуля USART (частота шины)
BAUD — скорость передачи в бодах.
К слову, в мануале на другие микроконтроллеры STM32, к примеру на STM32F030, формула для вычисления приведена сразу в удобоваримом виде:
Порты ввода-вывода
Давайте выясним, к каким выводам GPIO подключены USART-ы в микроконтроллере STM32F103C8. Открываем Datasheet, находим Таблицу 5: Medium-density STM32F103xx pin definitions. В ней представлено следующее:
Для USART1:
- TX: PA9, Remap PB6
- RX: PA10, Remap PB7
Для USART2:
Для USART3:
Для USART1 доступен remap выводов TX и RX на другие порты ввода-вывода, если выводы по-умолчанию заняты.
Теперь обратимся к разделу 9.1.11 GPIO configurations for device peripherals в Reference manual, для того, чтобы понять, как нужно настраивать порты ввода-вывода для работы с USART:
Для самого простого режима полного дуплекса без аппаратного управления потоком нам понадобятся только выводы TX и RX. Остальные выводы можно использовать как обычные порты GPIO.
Итак, настройка будет следующей:
- TX: режим альтернативной функции, тип выхода push-pull или открытый коллектор
- RX: вход без подтяжки или с подтяжкой вверх
Как работать с GPIO можно почитать тут.
Регистры USART
Status register (USART_SR) — регистр статуса
TXE: регистр передатчика пуст. Этот бит устанавливается аппаратно, когда содержимое регистра передатчика TDR (TDR не доступен напрямую из программы, но туда попадают данные при записи в USART_DR) было передано в сдвиговой регистр. Если в USART_CR1 был установлен бит разрешения прерывания TXEIE, то в этот момент генерируется запрос прерывания USART. TXE сбрасывается при записи значения в регистр данных USART_DR.
TC: передача завершена. Этот бит устанавливается аппаратно, если UART завершил передачу данных, при этом бит TXE установлен в единицу. Этот бит может быть полезен для реализации интерфейса RS485 для переключения направления драйвера RS485. Если в регистре USART_CR1 установлен бит TCIE, то генерируется прерывание USART при установке бита TC. Бит TC сбрасывается следующей программной последовательностью: чтение регистра USART_SR с последующей записью в регистр USART_DR. Кроме того, бит TC можно сбросить записью в него значения 0, но это рекомендуется производить только в режиме совместной работы с DMA.
RXNE: регистр приемника не пуст. Этот бит устанавливается в единицу, когда содержимое сдвигового регистра приемника передается в регистр данных USART. Если в регистре USART_CR1 установлен бит RXNEIE, то генерируется запрос прерывания USART. Бит RXNE сбрасывается при чтении регистр данных USART_DR. Кроме того, RXNE можно сбросить записью в него значение 0, но это рекомендуется производить только в режиме совместной работы с DMA.
ORE: ошибка переполнения. Устанавливается в 1, если данные в сдвиговом регистре приемника готовы к передаче в регистр данных, но при этом установлен бит RXNE. Иными словами, мы уже получили очередной байт по USART, но еще не прочитали предыдущий. Если в регистре USART_CR1 установлен флаг RXNEIE, то генерируется запрос прерывания USART. Бит ORE сбрасывается следующей программной последовательностью: чтение регистра USART_SR с последующим чтением регистра USART_DR.
Data register (USART_DR) — регистр данных
DR[8:0]: данные. Этот регистр содержит 2 теневых регистра: TDR и RDR. При чтении из DR будет прочитано значение регистра данных приемника RDR, при записи в DR значение будет записано в регистр данных передатчика TDR. Если используется контроль четности (бит PCE в регистре USART_CR1 установлен в 1), то при записи в DR значение старшего бита будет игнорироваться, так как при передаче он будет заменен битом четности. При приеме с включенным контролем четности старший бит будет содержать бит четности.
Baud rate register (USART_BRR) — регистр скорости передачи данных USART
Регистр BRR содержит коэффициент деления, который задает скорость передачи данных по USART.
BRR = (uint16_t)(BUS_FREQ / BAUD)
где BUS_FREQ — частота шины, на которой висит данный USART
BAUD — желаемая скорость передачи данных.
Control register 1 (USART_CR1) — регистр конфигурации 1
UE: включить USART.
- 0: предделители USART и его выходы отключены
- 1: USART включен
M: длина слова данных. Этот бит определяет длину передаваемых данных. Устанавливается и очищается программно.
- 0: 1 старт-бит, 8 бит данных, n стоп-бит
- 1: 1 старт-бит, 9 бит данных, n стоп-бит
PCE: разрешить контроль четности. Устанавливается и очищается программно
PS: выбор типа контроля четности. Этот бит выбирает вариант контроля четности, если установлен бит PCE. Устанавливается и очищается программно.
TXEIE: разрешить прерывание при опустошении буфера передатчика. Если установлен в 1, то генерируется запрос прерывания USART при установке бита TXE регистра USART_SR.
TCIE: разрешить прерывания окончания передачи. Если 1, то генерируется запрос прерывания USART при установке флага TC в регистре USART_SR.
RXNEIE: разрешить прерывание при появлении данных в регистре приемника. Если 1, то генерируется запрос прерывания USART при установке флага RXNE или ORE в регистре USART_SR.
TE: включить передатчик USART
RE: включить приемник USART
Control register 2 (USART_CR2) — регистр конфигурации 2
STOP: количество STOP-битов
- 00: 1 стоп-бит
- 01: 0.5 стоп-бита
- 10: 2 стоп-бита
- 11: 1.5 стоп-бита
0.5 и 1.5 стоп-бита не доступны для UART4 и UART5 (UART4 и UART5 отсутствуют в микроконтроллере STM32F103C8)
Заключение
Чтобы не забивать голову читателей ненужной информацией, я не стал давать описание каждому флагу и каждому регистру USART, так как для большинства задач это не нужно. Возможно, в дальнейшем добавлю описания битов, ответственных за совместную работу с DMA.
На этом пока все! В следующей части мы перейдем к практике и напишем небольшую библиотеку для работы с интерфейсом USART. Всем пока! 🙂
Очистить флаги прерываний USART (UART) в STM32?
Как правило, вам нужно обрабатывать только те флаги прерываний, которые вы специально включили USART_ITConfig()
.
Однако, если вы включаете прерывание RXNE ( USART_ITConfig(USARTx, USART_IT_RXNE)
), то это также включает прерывание Overrun! Таким образом, вы должны справиться с обоими из них.
Флаги USART могут сбивать с толку. Есть отдельные флаги состояния и флаги прерываний, и они имеют одинаковые имена. Например: USART_IT_RXNE
и USART_FLAG_RXNE
.
Кроме того, существуют различные способы очистки этих флагов. Например, USART_ClearITPendingBit()
функция работает только для четырех (из десяти) возможных флагов.
Вот краткое изложение флагов прерывания и как их использовать. Они специфичны для STM32F105, но являются репрезентативными:
USART_IT_TXE — «Регистр передачи данных пуст»
- Очищается автоматически при звонке
USART_SendData()
USART_IT_RXNE — «Регистр получения данных не пуст»
Очищается автоматически при звонке
USART_ReceiveData(USARTx)
Это можно очистить вручную, позвонив
USART_ClearITPendingBit(USARTx, USART_IT_RXNE)
USART_IT_TC — «Передача завершена»
Это очищается автоматически:
USART_GetITStatus(USARTx, USART_IT_TC)
с последующимUSART_SendData()
Это также можно очистить вручную, позвонив
USART_ClearITPendingBit(USARTx, USART_IT_TC)
USART_IT_CTS — «CTS change»
- Очищается по телефону
USART_ClearITPendingBit(USARTx, USART_IT_CTS)
USART_IT_LBD — «Обнаружен разрыв LIN»
- Очищается по телефону
USART_ClearITPendingBit(USARTx, USART_IT_LBD)
USART_IT_PE — «Ошибка четности»
- Очищено от:
USART_GetITStatus(USARTx, USART_IT_PE)
с последующимUSART_ReceiveData(USARTx)
USART_IT_NE — «Ошибка шума»
- Очищено от:
USART_GetITStatus(USARTx, USART_IT_NE)
с последующимUSART_ReceiveData(USARTx)
USART_IT_ORE — «Ошибка переполнения»
- Очищено от:
USART_GetITStatus(USARTx, USART_IT_ORE)
с последующимUSART_ReceiveData(USARTx)()
USART_IT_IDLE — «Обнаружена свободная линия»
- Очищено от:
USART_GetITStatus(USARTx, USART_IT_IDLE)
с последующимUSART_ReceiveData(USARTx)()
Универсальный синхронный/асинхронный трансивер (universal synchronous asynchronous receiver transmitter, USART) предоставляет гибкий способ полнодуплексного обмена с внешним оборудованием, что требуют промышленные стандарты последовательной асинхронной передачи данных в формате NRZ.
Поддерживается однонаправленный обмен в любую сторону и полудуплексный обмен в обе стороны по одному проводу (half-duplex single wire). Также поддерживаются протоколы LIN (local interconnection network), Smartcard Protocol и IrDA (infrared data association) спецификаций SIR ENDEC и операции модема (CTS/RTS). Это позволяет реализовать мультипроцессорный обмен данными. Высокая скорость обмена поддерживается конфигурацией DMA для нескольких буферов.
• Полный дуплекс, асинхронный обмен данными. • Стандартный формат NRZ (Mark/Space). • Конфигурируемый метод передискретизации (oversampling) на 16 или на 8 для гибкого компромисса между скоростью и допуском на частоту тактов. • Дробный генератор скорости (Fractional baud rate generator) реализует общую программируемую скорость передачи и приема, максимальная скорость зависит от максимальной частоты APB (см. даташит). • Программируемая длина слова данных (8 или 9 бит). • Конфигурируется количество stop-битов — поддерживается 1 или 2 стоп-бита. • Возможность отправки LIN Master Synchronous Break и детектирования LIN slave break. Генерация 13-битного break и детектирование break 10/11 бит, когда USART аппаратно сконфигурирован для LIN. • Тактовый выход передатчика для синхронной передачи. • Кодер/декодер IrDA SIR. Для нормального режима поддерживается длительность 3/16 бит. • Возможность эмуляции смарт-карты: – Интерфейс Smartcard поддерживает асинхронный протокол смарт-карт, как это определено в стандартах ISO 7816-3. • Полудуплексный обмен по одному сигнальному проводу (Single-wire half-duplex). • Конфигурируемый multibuffer-обмен для DMA. Байты передачи и приема помещаются в зарезервированные буферы SRAM. • Отдельные биты разрешения для передатчика и приемника. • Флаги детектирования обмена: – Буфер приема заполнен • Управление контролем четности: – Передача parity-бита • 4 флага детектирования ошибки: – Overrun error (ошибка переполнения) • 10 источников прерывания с флагами: – Изменение CTS • Мультипроцессорный обмен — вход в режим молчания (mute mode), если не было совпадения адреса. • Пробуждение из режима молчания (Wake up from mute mode) — из-за детектирования idle line или address mark. • Два режима пробуждения приемника: бит адреса (MSB, 9-й бит), сигнал idle line.
[Функциональное описание USART]
Интерфейс обычно подключается к внешним системам тремя ножками (см. рис. 296). Любой двунаправленный обмен USART требует как минимум двух сигнальных выводов: входные принимаемые данные (Receive Data In, RX) и выходные передаваемые данные (Transmit Data Out, TX):
RX: вход последовательных принимаемых данных. Используются техники передискретизации для восстановления данных, чтобы отделить полезные приходящие данные от шума.
TX: выход передаваемых данных. Когда передатчик запрещен, ножка выхода возвратит свою конфигурацию порта ввода/вывода (GPIO). Когда передатчик разрешен и ничего не передается, уровень выхода ножки TX находится в лог. 1.
Через эти выводы последовательные данные принимаются и передаются в нормальном режиме USART как фреймы. В этом процессе используется следующее:
• Состояние ожидания линии (Idle Line) до передачи или приема.
Описание регистров и их бит см. далее во врезках раздела «Регистры USART».
Для работы в синхронном режиме требуется дополнительный вывод тактов:
• CK: выход тактов передатчика. На этот вывод выдаются такты данных для синхронной передачи, соответствующей режиму SPI master (нет тактовых импульсов на битах start и stop, и программно выбираемая опция отправки тактового импульса на последнем бите данных). Параллельно и синхронно могут приниматься данные через ножку RX. Это можно использовать для управления внешними периферийными устройствами, у которых есть регистры сдвига (например драйверы LCD). Фаза и полярность тактов выбирается программно. В режиме smartcard CK может предоставлять такты для смарт-карты.
В режиме аппаратного управления потоком требуются еще 2 вывода:
• CTS: сигнал Clear To Send, блокирующий передачу данных по окончании текущей передачи (когда CTS = 1).
• RTS: сигнал Request To Send, показывающий, что USART готов принимать данные (когда RTS = 0).
Рис.
Символ USART. Для передачи можно выбрать длину слова 8 или 9 бит путем программирования бита M в регистре USART_CR1 (см. рис. 297).
Ножка TX находится в лог. 0, когда передается start-бит, и в лог. 1, когда передается stop-бит.
Idle. Символ Idle интерпретируется как фрейм (идущий после start-бита), где все биты равны 1 (все биты данных в лог. 1, это состояние сохраняется и во время передачи stop-битов).
Break. Символ Break интерпретируется, когда принимаются все 0 в течение всего периода фрейма. По окончании данных фрейма передатчик вставляет 1 или 2 stop-бита (лог. 1), чтобы подтвердить start-бит.
Передача и прием управляются общим генератором скорости (baud rate generator). Такты для передатчика и приемника генерируются, когда установлен соответствующий бит разрешения.
Рис. 297. Программирование длины слова (фрейма).
Передатчик может отправлять слова данных по 8 или 9 бит, в зависимости от состояния бита M. Когда установлен бит разрешения передачи (transmit enable, TE), данные из регистра сдвига передачи выводится на вывод TX, и соответствующие тактовые импульсы на вывод CK. Передача символа. Во время передачи USART данные выдвигаются наружу на вывод TX, младший бит (LSB) идет первым. В этом режиме регистр USART_DR состоит из буфера (TDR) между внутренней шиной и регистром сдвига передачи (см. рис. 296). Каждому символу предшествует start-бит с лог. 0 в течение длительности одного бита. Символ завершается конфигурируемым количеством stop-бит. Поддерживаются следующие варианты выбора stop-битов: 0.5, 1, 1.5 и 2 stop-бита. Примечание: бит TE не должен сбрасываться во время передачи данных. Сброс бита TE во время передачи повредит данные на выводе TX, потому что внутренние счетчики генератора скорости остановятся, и текущие передаваемые данные будут потеряны. Конфигурация stop-битов. Количество передаваемых с каждым символом stop-битов может быть запрограммировано в регистре управления 2 (USART_CR2), битами 13:12. • 1 stop-бит: это значение по умолчанию для количества stop-битов. Фрейм idle также будет включать в себя и stop-биты. Передача break будет состоять из 10 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 0) и 11 бит в лог. 0, за которыми идет сконфигурированное количество stop-бит (когда бит M = 1). Нельзя передавать длинные символы break (когда длительность нулей больше 10/11 бит). Рис. 298. Конфигурируемые stop-биты. Процедура программирования передатчика: 1. Разрешите USART записью в 1 бита UE регистра USART_CR1. Однобайтный обмен. Бит TXE всегда очищается путем записи в регистр данных. TXE устанавливается аппаратно, и это показывает: • Данные были перемещены из TDR в регистр сдвига, и началась передача данных. Этот флаг генерирует прерывание, если установлен бит TXEIE. Когда происходит передача, инструкция записи в регистр USART_DR сохраняет данные в регистр TDR, и эти данные оттуда затем копируются в регистр сдвига, когда закончится текущая передач. Когда передача не осуществляется, инструкция записи в регистр USART_DR сразу помещает данные в регистр сдвига, начинается передача данных, и немедленно установится бит TXE. Если передается фрейм (после stop-бита), и установился бит TXE, бит TC переходит в 1. Будет сгенерировано прерывание, если установлен бит TCIE в регистре USART_CR1. После записи последних данных в регистр USART_DR важно подождать момента, когда TC=1 перед запретом USART, или когда микроконтроллер переводится в режим пониженного энергопотребления low-power mode (см. рис. 299, где показано поведение TC/TXE при передаче). Рис. 299. Как ведут себя при передаче биты TC и TXE. Бит TC очищается следующими программными операциями: 1. Чтение из регистра USART_SR. Символ Break. Установка бита SBK передает символ break (сигнал остановки потока данных). Длина фрейма break (как и длина фрейма всех передаваемых символов) зависит от бита M (см. рис. 297). Если установлен в 1 бит SBK, символ break посылается через вывод TX после текущей передачи символа. Этот бит сбросится аппаратно, когда передача символа break завершится (во время stop-бита символа break). Примечание: если программа сбросит бит SBK перед началом передачи break, то символ break не будет передан. Для двух следующих друг за другом break бит SBK должен быть установлен после stop-бита предыдущего break. Символ Idle. Установка бита TE побуждает USART отправить фрейм idle перед первым фреймом данных.
USART может принимать слова данных разрядностью 8 или 9 бит, в зависимости от бита M в регистре USART_CR1. Детектирование start-бита. Последовательность детектирования старт-бита одинаковая, когда делается передискретизация сигнала (oversampling) с кратностью 16 или 8. В USART start-бит детектируется, когда распознана определенная последовательность выборок сигнала: 1 1 1 0 X 0 X 0 X 0 0 0 0. Рис. 300. Детектирование start-бита при передискретизации 16 или 8. Примечание: если последовательность не завершена, то детектирование start-бита прекращается, и приемник возвращается в состояние ожидания idle state (никакой флаг не установится), когда он ожидает спада уровня сигнала. Подтверждено появление start-бита (установился флаг RXNE, генерируется прерывание, если RXNEIE=1), если 3 выборки бита равны 0 (первая выборка на 3-ем, 5-ом и 7-ом битах находит 3 бита в лог. 0, и вторая выборка на 8-ом, 9-ом и 10-ом битах также находит 3 бита в лог. 0). Start-бит считается достоверным (установится флаг RXNE, генерируется прерывание, если RXNEIE=1), однако установится бит NE (noise error, флаг шума), если для обоих выборок как минимум 2 из 3 выборок бит это 0 (выборка на 3-ем, 5-ом и 7-ом битах, и выборка на 8-ом, 9-ом и 10-ом битах). Если условие не выполняется, детектирование старта обрывается, и приемник возвращается в состояние ожидания idle state (никакой флаг не установится). Если для одной из выборок (выборка на 3, 5 и 7 битах, или выборка на 8, 9 и 10 битах), 2 из 3 битов найдены в 0, то start-бит подтверждается, но установится бит шума NE. Прием символа. На приеме данные вдвигаются в вывод RX, начиная с бита LSB. В этом режиме регистр USART_DR состоит из буфера (RDR) между внутренней шиной и регистром сдвига приема. Процедура программирования приемника: 1. Разрешите USART записью в 1 бита UE регистра USART_CR1. Когда принят символ: • Установится бит RXNE. Это показывает, что содержимое регистра сдвига передано в RDR. Другими словами, данные были приняты, и могут быть прочитаны (а также связанные с ним флаги ошибок). Примечание: бит RE не должен сбрасываться при приеме данных. Если бит RE запрещен во время приема, то прием текущего слова данных будет оборван. Символ Break. Когда был принят символ break, USART обрабатывает это как ошибку фрейма (framing error). Символ Idle. Когда был детектирован фрейм ожидания (idle frame), то происходит та же процедура, что и при приеме символа, плюс произойдет прерывание, если установлен бит IDLEIE. Ошибка переполнения. Overrun error происходит, когда принят новый символ, но флаг RXNE не был очищен. Данные не могут быть перемещены из регистра сдвига в регистр RDR, пока не будет очищен бит RXNE. Флаг RXNE устанавливается после каждого принятого слова данных. Ошибка переполнения происходит, если флаг RXNE установлен, когда приняты следующие данные, или когда не был обработан предыдущий запрос DMA. Когда произойдет overrun error: • Установится бит ORE. Примечание: бит ORE, когда установлен, показывает, что как минимум один элемент данных на приеме был потерян. Есть 2 возможности: • Если RXNE=1, то последние достоверные принятые данные сохранены в регистре приема RDR, и они могут быть прочитаны. Выбор правильного метода передискретизации. Метод передискретизации может быть выбран программированием бита OVER8 в регистре USART_CR1, и передискретизация может быть 16 или 8 кратная к тактам скорости (см. рис. 301 и 302). В зависимости от приложения: • Выберите передискретизацию на 8 (OVER8=1), чтобы достичь увеличенной скорости (до fPCLK/8). В этом случае максимальный допуск на девиацию тактов для приемника снижается (см. далее секцию «Допуск ухода тактовой частоты для приемника USART»). Программирование бита ONEBIT в регистре USART_CR3 выбирает метод, используемый для оценки логического уровня сигнала. Есть 2 опции: • Мажоритарная выборка из 3 образцов сигнала, взятых по центру принимаемого бита. В этом случае, когда 3 эти выборки не одинаковые, установится бит NF. В зависимости от приложения: – Выберите метод мажоритарности из 3 выборок (ONEBIT=0) когда работа происходит в зашумленном окружении, и отбрасывайте данные, когда был определен шум (см. таблицу 133), потому что это показывает, что во время выборки произошел паразитный выброс помехи. Когда во фрейме был детектирован шум: • Бит NF установится по фронту нарастания бита RXNE. Бит NF сбросится операцией чтения регистра USART_SR, за которой идет операция чтения регистра USART_DR. Примечание: передискретизация на 8 недоступна в режимах Smartcard, IrDA и LIN. В этих режимах бит OVER8 аппаратно сбрасывается в 0. Рис. 301. Выборка данных при передискретизации 16. Рис. 302. Выборка данных при передискретизации 8. Таблица 133. Детектирование шума для считываемых данных.
Ошибка фрейма. Framing error детектируется, когда не был распознан stop-бит во время приема в ожидаемом промежутке времени — либо из-за рассинхронизации, либо из-за чрезмерного шума. Когда детектирована ошибка фрейма: • Бит FE устанавливается аппаратно. Бит FE сбрасывается чтением регистра USART_SR, за которым идет операция чтения USART_DR. Конфигурируемые stop-биты во время приема. Количество принимаемых stop-бит можно конфигурировать битами USART_CR2. Это может быть 1 или 2 бита в нормальном режиме, и 0.5 или 1.5 в режиме Smartcard. 0.5 stop-бита (прием в режиме Smartcard): для этого режима не делаются выборки. Как следствие, при выборе 0,5 стоп-бита не может быть обнаружена ошибка поврежденного фрейма, и сигнал break не детектируется. 1 stop-бит: анализ сигнала для 1 stop-бита осуществляется на 8-ой, 9-ой и 10-ой выборках. 1.5 stop-бита (режим Smartcard): когда идет передача в режиме smartcard, устройство должно проверить, какие данные отправляются в настоящий момент. Таким образом, блок приемника должен быть разрешен (бит RE=1 в USART_CR1 в регистре), и stop-бит проверяется на наличие ошибки четности на смарт-карте. Если было событие ошибки четности, то смарт-карта подтягивает сигнал данных в лог. 0 во время выборки (сигнал NACK), который опознается как ошибка фрейма. Затем установится флаг FE вместе с RXNE по окончанию 1.5 stop-бита. Анализ уровня для 1.5 stop-бита осуществляется на 16-ой, 17-ой и 18-ой выборках (1 период скорости после начала stop-бита). Для 1.5 stop-бита может выполнена декомпозиция на 2 части: одна из 0.5 периода скорости, когда ничего не происходит, за которой идет время 1 нормального stop-бита, в течение которого посередине идет анализ сигнала. См. секцию 30.3.11: Smartcard даташита [1]. 2 stop-бита: анализ для 2 стоп-бит осуществляется на 8-ой, 9-ой и 10-ой выборках первого стоп-бита. Если была определена ошибка фрейма во время первого стоп-бита, установится флаг ошибки фрейма. Второй стоп-бит не проверяется на предмет ошибки фрейма. Установится флаг RXNE по окончанию первого stop-бита.
Дробный генератор скорости. Скорость обмена (baud rate) для приемника и передатчика (обоих сигналов RX и TX) устанавливается в одинаковое значение, программируемое коэффициентами Mantissa и Fraction делителя USARTDIV.
Формула 1. скорость для стандартного USART (включая режим SPI):
fCK
Формула 2. скорость для режимов Smartcard, LIN и IrDA:
fCK
USARTDIV это число с фиксированной запятой без знака, закодированное в регистре USART_BRR.
• Когда OVER8=0, дробная часть кодируется 4 битами, и программируется битами DIV_fraction[3:0] регистра USART_BRR.
Примечание: счетчики скорости обновляются новым значением в регистрах скорости после операции записи в USART_BRR. Следовательно, регистра скорости не должно изменяться во время активного обмена.
[Пример 1] Если DIV_Mantissa = 0d27 и DIV_Fraction = 0d12 (USART_BRR = 0x1BC), тогда [Пример 2] Для программирования USARTDIV = 0d25.62 получается: DIV_Fraction = 16*0d0.62 = 0d9.92 [Пример 3] Для программирования USARTDIV = 0d50.99 получается: DIV_Fraction = 16*0d0.99 = 0d15.84 DIV_Mantissa = mantissa (0d50.990 + carry) = 0d51 = 0x33
[Пример 1] Если DIV_Mantissa = 0x27 и DIV_Fraction[2:0]= 0d6 (USART_BRR = 0x1B6), тогда [Пример 2] Для программирования USARTDIV = 0d25.62. Это приведет к следующему: DIV_Fraction = 8*0d0.62 = 0d4.96 [Пример 3] Для программирования USARTDIV = 0d50.99. Это приведет к следующему: DIV_Fraction = 8*0d0.99 = 0d7.92 DIV_Mantissa = mantissa (0d50.990 + перенос) = 0d51 = 0x33.
В таблицах 134 .. 143 даташита [1] приведены рассчитанные практические погрешности заданных стандартных скоростей для различных условий (частоты шины PCLK, варианты передискретизации).
Допуск ухода тактовой частоты для приемника USART. Асинхронный приемник USART корректно работает только если общая девиация тактовой частоты системы меньше, чем допуск приемника USART. Причины, которые способствуют общему отклонению:
• DTRA: девиация из-за ошибки передатчика (что также включает девиацию локального тактового генератора передатчика).
DTRA + DQUANT + DREC + DTCL < допуск приемника USART
Допуск приемника USART для правильного приема данных равен максимально допустимой девиации и зависит от следующих выбранных параметров:
• Длина фрейма символа 10 или 11 бит, что определяется битом M в регистре USART_CR1.
Таблица 144. Допуск приемника USART, когда DIV fraction = 0.
Таблица 145. Допуск приемника USART, когда DIV fraction отличается от 0.
Примечание: информация, указанная в таблицах 144 и 145, может незначительно отличаться в специальном случае, когда принимаемые фреймы точно 10-битные при M=0 (11-битные при M=1).
Есть возможность выполнять многопроцессорный обмен через USART (несколько USART, объединенных в сеть). Например, один USART может быть главный (master), его выход TX подключается ко входу RX других USART. Другие USART работают как подчиненные (slave), их соответствующие выходы логически объединены по И (AND), и все вместе подключены ко входу RX устройства master. В многопроцессорных конфигурациях обмена часто желательно, чтобы только один получатель сообщения должен активно принять все сообщение целиком, чтобы уменьшить обработку избыточных данных для всех приемников, которые не адресованы. Не адресованные устройства могут быть помещены в режим молчания (mute mode) с помощью соответствующей функции (muting). В режиме молчания: • Никакой из битов статуса приема не может быть установлен. USART может либо войти в mute mode, либо выйти из mute mode, используя один из двух методов, в зависимости от бита WAKE в регистре USART_CR1: • Детектирование ожидания линии (Idle Line), если сбо бит WAKE. Детектирование Idle Line (WAKE=0). USART войдет в режим молчания, когда в бит RWU записана 1. Он проснется, когда будет детектирован фрейм Idle. Тогда бит RWU очистится программно, но бит IDLE в регистре USART_SR не установится. Бит RWU также можно записать в 0 программно. Пример поведения в режиме молчания с использованием детектирования Idle линии показан на рис. 303. Рис. 303. Режим Mute с использованием детектирования состояния ожидания (Idle) линии. Детектирование метки адреса (WAKE=1). В этом режиме байты распознаются как адреса, если старший бит (MSB) равен 1, иначе они считаются данными. В байте адреса адрес целевого приемника помещается в 4 младших бита (LSB). Это 4-битное слово сравнивается приемником со своим собственным адресом, который запрограммирован в биты ADD регистра USART_CR2. USART входит в режим молчания, когда принят символ адреса, который не соотвветствует запрограммированному адресу. В этом случае бит RWU установится аппаратно. Для этого байта адреса флаг RXNE не установится, и не будет сгенерировано ни прерывание, ни запрос передачи DMA, поскольку USART перейдет в режим молчания. USART выйдет из режима молчания, когда принят символ адреса, совпадающий с запрограммированным адресом. Тогда бит RWU сбросится, и последующие байты будут нормально приняты. Бит RXNE установится символа адреса, поскольку бит RWU был сброшен. Бит RWU также может быть записан в 0 или 1, когда буфер приемника не содержит данных (RXNE=0 в регистре USART_SR). Иначе попытка записи будет проигнорирована. Пример поведения в режиме молчания с использованием детектирования метки адреса показан на рис. 304. Рис. 304. Режим Mute с использованием детектирования метки адреса.
Проверка четности бит (генерация parity-бита при передаче и проверка четности на приеме) могут быть разрешены установкой бита PCE (Parity Control Enable) в регистре USART_CR1. В зависимости от длины фрейма, определяемой битом M, возможные форматы фрейма USART перечислены в таблице 146. Вид проверки на четность выбирается битом PS (Parity Select) регистра USART_CR1. Таблица 146. Форматы фрейма.
Примечание (1): легенда следующая: SB старт-бит, STB стоп-бит, PB: parity-бит. Проверка на четность. Parity-бит вычисляется так, чтобы получить четную сумму всех единичек во фрейме из 7 или 8 бит (в зависимости от значения бита M) и parity-бита. Например: data=00110101; здесь установлено 4 бита, поэтому бит четности будет 0, если выбрана проверка на четность (бит PS в USART_CR1 равен 0). Проверка на нечетность. Здесь все наоборот — parity-бит вычисляется так, чтобы получить нечетную сумму. Например: data=00110101; установлено 4 бита => бит четности будет 1, если выбрана проверка на нечетность (бит PS в USART_CR1 равен 1). Проверка четности на приеме. Если проверка на четность/нечетность показала ошибку в данных, то в регистре USART_SR установится флаг PE (Parity Error), и сгенерируется прерывание, если усnановлен бит PEIE (Parity Error Interrupt Enable) в регистре USART_CR1. Флаг PE очистится последовательностью действий в программе (чтение из регистра статуса, за которым идет доступ на чтение или запись регистра USART_DR). Примечание: в случае пробуждения по метке адреса (wakeup address mark): бит MSB учитывается для идентификации адреса, но не бит четности. И приемник не проверяет четность данных адреса (PE не установится в случае ошибки четности). Генерация бита parity при передаче. Если в регистре USART_CR1 установлен бит PCE, то бит MSB данных, записанных в регистр данных, передается, но он изменяется parity-битом (для четности количества единичек в данных, если PS=0, или для нечетности количества единичек, если PS=1). Примечание: подпрограмма, которая обслуживает передачу, может активировать последовательность действий, которая очистит флаг PE (чтение из регистра статуса USART, за которым идет операция чтения или записи над регистром данных USART). Когда работа осуществляется в режиме полудуплекса, в зависимости от программы, это может привести к тому, что флаг PE будет неожиданно очищен.
Режим LIN выбирается установкой бита LINEN в регистре USART_CR2. В режиме LIN должны держаться сброшенными следующие биты: • STOP[1:0] и CLKEN в регистре USART_CR2. Передача LIN. Та же процедура, которая была описана выше во врезке «Передатчик», применима к передаче LIN Master, которая работает так же, как и обычная передача USART, со следующими отличиями: • Бит M очищается, чтобы сконфигурировать длину слова 8 бит. Прием LIN. Схема детектирования break реализована на интерфейсе USART, но её поведение в режиме LIN не зависит от обычного приемника USART. Break может быть детектирован независимо от того, где он появился — в состоянии ожидания (Idle) или во время фрейма. Когда приемник разрешен (RE=1 in USART_CR1), схема опрашивает вход RX в ожидании сигнала start. Метод детектирования бит сигнала start такой же, как используется при анализе символов break или данных. После того, как был детектирован бит start, схема оцифровывает следующие биты так же, как и для данных (на 8-ой, 9-ой и 10-ой выборках). Если 10 (когда LBDL = 0 в регистре USART_CR2) или 11 (когда LBDL=1 в регистре USART_CR2) последующие биты детектированы как 0, и за которыми следует символ разделителя, то установится бит LBD в регистре USART_SR. Если установлен бит LBDIE, то будет сгенерировано прерывание. Перед проверкой корректности break проверяется разделитель, так как он означает, что сигнал RX вернулся на уровень лог. 1. Если была обнаружена 1 перед возникновением 10 или 11 бита, схема детектирования break отменяет текущее детектирование, и снова ищет бит start. Если режим LIN запрещен (LINEN=0), приемник продолжает работу как обычный USART, без учета детектирования break. Если режим LIN разрешен (LINEN=1), как только произойдет ошибка фрейма (например stop-бит был детектирован как 0, что будет в случае любого обрыва фрейма, break), приемник останавливается до тех пор, когда схема детектирования break примет либо 1, если слово break было не завершено, или символ разделителя, если был детектирован break. Рис. 305. Детектирование Break в режиме LIN (длина break 11 бит — установлен бит LBDL). Рис. 306. Детектирование break в режиме LIN, отличие от детектирования ошибки фрейма.
Синхронный режим выбирается записью в 1 бита CLKEN регистра USART_CR2. В синхронном режиме должны быть очищены следующие биты: • Бит LINEN в регистре USART_CR2. USART дает возможность пользователю управлять двунаправленным синхронным последовательным обменом данных в режиме master. Вывод CK работает как выход тактов передатчика USART. Никакие тактовые импульсы не посылаются через вывод CK во время бита start и бита stop. В зависимости от состояния бита LBCL в регистре USART_CR2 тактовые импульсы будут или не будут генерироваться во время последнего достоверного бита данных (маркер адреса, address mark). Бит CPOL в регистре USART_CR2 дает возможность выбрать полярность тактов, и бит CPHA в регистре USART_CR2 позволяет выбрать фазу внешних тактов (см. рис. 307, 308 и 309). Рис. 307. Пример синхронной передачи USART. Рис. 308. Диаграммы времени тактов USART (M=0). * Бит LBCL управляет последним импульсом данных. Рис. 309. Диаграммы времени тактов USART (M=1). * Бит LBCL управляет последним импульсом данных. Рис. 310. Время setup/hold данных RX. tSETUP = tHOLD = 1/16 времени бита. Во время состояния Idle, преамбулы и отправки break внешний сигнал тактов CK не активируется. В синхронном режиме передатчик USART работает точно так же, как в асинхронном режиме. Однако бит CK засинхронизирован с TX (в соответствии с настройками CPOL и CPHA), данные на TX синхронные. В синхронном режиме приемник USART работает не так, как в асинхронном режиме. Если RE=1, то данные анализируются синхронно с сигналом CK (по фронту или спаду уровня, в зависимости от CPOL и CPHA), без какой-либо передискретизации. Время установки (setup time) и удержания (hold time) должно соблюдаться (зависит от baud rate: 1/16 от времени бита). Примечание: вывод CK работает вместе с выводом TX. Таким образом, такты предоставляются только если разрешен передатчик (TE=1), и данные передаются (записан регистр данных USART_DR). Это означает, что невозможно принимать синхронные данные без передачи данных. Конфигурация бит LBCL, CPOL и CPHA должна быть выбрана, когда и передатчик, и приемник запрещены (TE=RE=0), чтобы гарантировать корректную работу импульсов тактов. Эти биты не должны изменяться, когда разрешен передатчик или приемник. Рекомендуется устанавливать биты TE и RE одной инструкцией, чтобы минимизировать время установки (setup time) и удержания (hold time) приемника. USART поддерживает только режим master: он не может принимать или отправлять данные, связанные со входом тактов (CK всегда работает как выход). Примечание: функция CK отличается в режиме Smartcard (см. далее описание этого режима).
Этот режим (single-wire, half-duplex) выбирается установкой в 1 бита HDSEL в регистре USART_CR3. В этом режиме должны быть очищены следующие биты: • Биты LINEN и CLKEN в регистре USART_CR2. USART может быть сконфигурирован для соответствия однопроводному полудуплексному протоколу, где линии сигналов TX и RX соединены внутри кристалла микроконтроллера (установкой бита HDSEL в регистре USART_CR3). Как только HDSEL записан в 1: • Сигналы TX и RX соединяются внутри. Кроме этой особенности, обмен данными такой же, как в обычном режиме USART. Конфликты на линии связи должны разрешаться программно (например, с использованием централизованного арбитра шины). В частности, передача никогда не блокируется аппаратно, и будет продолжаться, пока данные записываются в регистр данных при установленном бите TE.
Режим смарт-карты выбирается установкой бита SCEN в регистре USART_CR3. В режиме смарт-карты должны удерживаться очищенными следующие биты: • Бит LINEN в регистре USART_CR2. Кроме того, должен быть установлен бит CLKEN, чтобы предоставить такты для смарт-карты. Интерфейс Smartcard разработан для поддержки асинхронного протокола смарт-карт, как определено стандартом ISO 7816-3. USART должен быть сконфигурирован следующим образом: • 8 бит плюс parity: M=1 и PCE=1 в регистре USART_CR1. Примечание: также можно выбрать 0.5 stop-бита для приема, но рекомендуется использовать 1.5 stop-бита и для передачи, и для приема, чтобы избежать переключения между двумя конфигурациями. Рис. 311 показывает примеры, как выглядит сигнал данных с ошибкой четности и без ошибки четности. Рис. 311. Асинхронный протокол ISO 7816-3. Когда USART подключен к смарт-карте, выход TX управляет двунаправленной линией, которая также управляется выходом смарт-карты. Ножка TX должна быть сконфигурирована как открытый сток. Smartcard это однопроводный, полудуплексный протокол обмена. • Передача данных из регистра сдвига передачи осуществляется с гарантированной задержкой 1/2 такта скорости. При нормальном функционировании полная передача из регистра сдвига начнется сдвигом на следующем перепаде тактов скорости. В режиме Smartcard эта передача дополнительно задерживается на 1/2 такта скорости. • Если была детектирована ошибка четности на приеме фрейма, запрограммированного с 0.5 или 1.5 периодом stop-бита, линия передачи подтягивается а лог. 0 на период тактов скорости после завершения приема фрейма. Это служит индикацией, что данные смарт-карты, переданные в USART не были корректно приняты. Этот сигнал NACK (подтягивание к лог. 0 линии передачи на 1 такт скорости) приведет к появлению ошибки фрейма на стороне передатчика (сконфигурированного с 1.5 stop-битом). Приложение должно обработать эту ситуацию повторной отправкой данных в соответствии с протоколом. Ошибка четности сигнализируется приемником для передатчика как NACK (No ACKnowledge), если установлен управляющий бит NACK, иначе NACK не передается. • Установка флага TC может быть задержана путем программирования регистра защитного времени (Guard Time). При нормальном функционировании TC устанавливается, когда регистр сдвига передачи опустошается, и больше нет ожидающих передачи запросов. В режиме Smartcard пустой регистр сдвига передачи запускает счетчик защитного времени для счета до запрограммированного значения в регистре Guard Time. В течение защитного времени TC принудительно находится в лог. 0. Когда счетчик защитного времени достигнет запрограммированного значения, TC переводится в 1. • На снятие флага TC режим смарт-карты не влияет. • Если детектирована ошибка фрейма на стороне передатчика (по сигналу NACK от приемника), NACK не будет детектирован как start-бит блоком приема передатчика. В соответствии с протоколом ISO, длительность принятого NACK может быть 1 или 2 периода тактов скорости. • На стороне приемника, если была детектирована ошибка четности, и был передан сигнал NACK, то он не будет детектирован как start-бит. Примечание: символ break не имеет значения в режиме Smartcard. Данные 0x00 с ошибкой фрейма будут обработаны как данные, не как break. Фрейм Idle передается, когда переключается бит TE. Фрейм Idle (как определено для других конфигураций) в протоколе ISO не определен. Рис. 312 показывает, как сигнал NACK оцифровывается USART. В этом примере USART передает данные, и сконфигурирован с 1.5 stop-битом. Блок приемника USART разрешен, чтобы проверять целостность данных и сигнал NACK. Рис. 312. Детектирование ошибки четности с использованием 1.5 stop-битов. USART может предоставить такты для смарт-карты через выход CK. В режиме смарткарты CK не связан с обменом данными, он просто генерирует тактовую частоту, полученную из внутреннего входа тактов периферии через 5-разрядный прескалер. Коэффициент деления конфигурируется в регистре прескалера USART_GTPR. Частота CK может быть запрограммирована от fCK/2 до fCK/62, где fCK это частота тактов входа периферии.
Режим IrDA mode выбирается установкой бита IREN в регистре USART_CR3. В режиме IrDA должны сохраняться очищенными следующие биты: • LINEN, STOP и CLKEN в регистре USART_CR2. Примечание: аббревиатура SIR означает Serial InfraRed, а ENDEC означает ENcoder-DECorer. Физический слой IrDA SIR задает использовать схему модуляции с возвратом к нулю и инверсией RZI (Return to Zero Inverted), которая представляет лог. 0 как импульс инфракрасного излучения (см. рис. 313). Рис. 313. Блок-схема IrDA SIR ENDEC. Кодер передачи SIR модулирует выходной поток бит Non Return to Zero (NRZ) из USART. Выходной поток импульсов передается на внешний выходной драйвер и инфракрасный светодиод. USART поддерживает для SIR ENDEC только скорости до 115.2 Kbps. В нормальном режиме ширина передаваемого импульса задана как 3/16 от периода бита. Декодер приемника SIR демодулирует поток return-to-zero бит из детектора инфракрасного излучения, и выводит последовательный поток бит NRZ в USART. Вход декодера в нормальном состоянии режима ожидания Idle находится в лог. 1 (состояние marking). Кодер передачи выводит противоположную полярность на вход декодера. Бит start детектируется, когда на входе декодера появляется лог. 0. • IrDA является полудуплексным коммуникационным протоколом. Если передатчик занят (например USART передает данные в кодер IrDA), то любые данные на линии приема IrDA будут игнорироваться декодером IrDA, и если приемник занят (USART принимает декодированные данные из USART), то данные на сигнале TX из USART в IrDA не будут кодироваться IrDA. При приеме данных следует избегать передачи, поскольку передаваемые данные могут быть повреждены. • 0 передается как импульс лог. 1, и 1 передается как лог. 0. Ширина импульса задана как 3/16 от выбранного периода бита в нормальном режиме (см. рис. 314). Рис. 314. Модуляция данных IrDA (3/16) — нормальный режим. • Декодер SIR преобразует совместимый с IrDA принимаемый сигнал в поток бит для USART. • Логика приема SIR логически интерпретирует высокий уровень как лог. 1, и импульсы лог. 0 как лог. 0. • Выходной сигнал кодера передачи имеет полярность, противоположную полярности входного сигнала декодера. Выходной сигнал SIR находится в лог. 0 при режиме ожидания (Idle). • Спецификация IrDA требует приема импульсов, превышающих 1.41 мкс. Допустимая ширина импульса программируется. Логика детектирование импульсов помех (glitch detection) на стороне приемника отфильтровывает импульсы, ширина которых меньше 2 периодов PSC (PSC это значение прескалера, запрограммированное в регистре скорости низкого потребления энергии IrDA, USART_GTPR). Импульсы шириной меньше 1 периода PSC отбрасываются всегда, но импульсы шириной больше 1 периодпа и меньше 2 периодов могут быть приняты или отброшены, а импульсы больше 2 периодов будут приняты как нормальный импульс. Кодер/декодер IrDA не работает, когда PSC=0. • Приемник может обмениваться данными с передатчиком в состоянии низкой потребляемой мощности. • В режиме IrDA, поле бит STOP регистра USART_CR2 должно быть сконфигурировано для состояния «1 стоп-бит». [IrDA в режиме низкого потребления] Передатчик. В режиме низкого потребления (low-power mode) ширина импульса не поддерживается на 3/16 от периода бита. Вместо этого ширина импульса в 3 раза превышает маломощную скорость передачи, которая может быть минимум 1.42 МГц. Обычно это значение составляет 1.8432 МГц (1.42 МГц < PSC < 2.12 МГц). Программируемый делитель режима низкого потребления делит системную частоту, чтобы достичь этого значения. Приемник. Прием в режиме пониженного потребления энергии подобен приему в обычном режиме. Для детектирования импульсов помех (glitch detection) USART должен отбрасывать импульсы, которые короче 1/PSC. Допустимый 0 принимается только если его длительность больше 2 периодов тактов IrDA низкого энергопотребления (значение PSC в регистре USART_GTPR). Примечание: импульс шириной меньше 2 и больше 1 периода PSC отбрасывается не всегда. Время установки приемника (set up time) должно управляться программой. Для физического слоя IrDA спецификация задает минимальную задержку 10 мс между передачей и приемом (IrDA является полудуплексным протоколом).
[Продолжительный непрерывный обмен на основе DMA]
USART может реализовать непрерывный обмен с помощью DMA. Запросы DMA для буферов приема и передачи генерируются независимо.
Передача с использованием DMA. Режим DMA может быть разрешен для передачи путем установки бита DMAT в регистре USART_CR3. Данные загружаются из области SRAM, сконфигурированной с использованием периферийного устройства DMA (см. спецификацию DMA [2]) для регистра USART_DR, каждый раз, когда установлен бит TXE. Для отображения канала DMA на передачу USART используйте следующую процедуру (x обозначает номер канала DMA):
1. Запишите адрес регистра USART_DR в регистр управления DMA, чтобы сконфигурировать его как место назначения передачи. Данные будут перемещаться по этому адресу из памяти после каждого события TXE.
Когда достигнуто запрограммированное в контроллер DMA количество переданных байт, контроллер DMA сгенерирует прерывание по вектору канала DMA.
В режиме передачи как только DMA записал все данные для передачи (в регистре DMA_ISR установился флаг TCIF), флаг TC может отслеживаться, чтобы удостовериться в завершении обмена USART. Это необходимо перед запретом USART или входом в режим Stop, чтобы не повредилась последняя передача. Программа должна подождать, чтобы TC перешел в 1. Флаг TC остается очищенным во время всех передач данных, и установится аппаратно по окончанию передачи последнего фрейма.
Рис. 315. Передача с использованием DMA.
Прием с использованием DMA. Режим DMA может быть разрешен для приема путем установки бита DMAR в регистре USART_CR3. Данные загружаются из регистра USART_DR в область SRAM, сконфигурированную с использованием периферийного устройства DMA (см. спецификацию DMA [2]), всякий раз, когда принимается байт данных. Чтобы отобразить канал DMA для приема USART, используйте следующую процедуру:
1. Запишите адрес регистра USART_DR в регистр управления DMA, чтобы сконфигурировать его как источник приема. Данные будут перемещаться из этого адреса памяти после каждого события RXNE.
Когда достигнуто количество данных, запрограммированное в контроллере DMA, контроллер DMA генерирует прерывание на векторе прерывания канала DMA. Бит DMAR в регистре USART_CR3 должен быть очищен программой в обработчике прерывания.
Рис. 316. Прием с использованием DMA.
Флаг ошибки и генерация прерывания при multibuffer обмене. В случае обмена с использованием нескольких буферов (multibuffer communication), если произойдет любая ошибка во время транзакции, флаг ошибки будет выставлен после текущего байта. Будет сгенерировано прерывание, если установлен бит разрешения этого прерывания. Для ошибки фрейма (framing error), ошибки переполнения (overrun error) и флага шума (noise flag), которые устанавливаются вместе с RXNE при однобайтовом приеме, здесь будет отдельный бит разрешения прерывания (бит EIE в регистре USART_CR3). Если бит EIE установлен, то будет генерироваться прерывание после текущего байта при любой из этих ошибок.
Можно управлять потоком последовательных данных между двумя устройствами, используя вход CTS и выход RTS (hardware flow control). Рис. 317 показывает, как соединить 2 устройства в этом режиме (выход RTS одного устройства соединяется со входом CTS другого): Рис. 317. Аппаратное управление потоком данных между двумя USART. Управление потоком RTS и CTS можно разрешить независимо записью в 1 соответствующих бит RTSE и CTSE (они находятся в регистре USART_CR3). Управление потоком RTS. RTS расшифровывается как Ready To Send, т. е. «готов к передаче». Если разрешен RTS flow control (RTSE=1), то сигнал на выходе RTS выставляется (переводом в 0) тогда, когда приемник USART готов к приему новых данных. Когда регистр приема заполнен (т. е. данные еще не были забраны оттуда), сигнал RTS снимается (переводом в лог. 1), что служит индикацией для передатчика на другой стороне, что передачу следует приостановить по окончанию текущего фрейма. Рис. 318 показывает пример обмена с разрешенным RTS flow control. Рис. 318. RTS flow control. Управление потоком CTS. CTS расшифровывается как Clear To Send, т. е. «линия чиста для передачи». Если разрешен CTS flow control (CTSE=1), то передатчик проверяет вход CTS перед передачей следующего фрейма. Если сигнал CTS выставлен (подтянут к 0), то передаются следующие данные (подразумевается, что есть данные для передачи, другими словами, если TXE=0), иначе передача не произойдет. Когда CTS снимается во время передачи, текущая передача завершится перед остановкой передатчика. Когда CTSE=1, бит статуса CTSIF автоматически установится аппаратурой, как только переключится вход CTS. Это показывает, когда приемник становится готов или не готов для обмена данными. Генерируется прерывание, если установлен бит CTSIE в регистре USART_CR3. На рисунке ниже дан пример обмена с разрешенным CTS flow control. Рис. 319. CTS flow control. Примечание: существует специальное поведение фреймов break — когда разрешено управление потоком CTS, передатчик не проверяет состояние входа CTS для отправки сигнала break.
[Прерывания USART]
Таблица 147. Запросы прерывания USART.
События прерываний USART подсоединены к одному и тому же вектору прерывания (см. рис. 320).
Рис. 320. Диаграмма отображений событий USART на прерывание.
Во время передачи могут быть прерывания: Transmission Complete (передача завершена), Clear to Send (линия чиста для начала передачи) или Transmit Data Register empty (регистр данных передачи пуст).
Во время приема могут быть прерывания: Idle Line detection (определено состояние ожидание линии), Overrun error (ошибка переполнения, программа не успела прочитать принятые данные), Receive Data register not empty (регистр данных приема не пуст), Parity error (ошибка проверки четности), LIN break detection (определение сигнала прекращения передачи LIN), Noise Flag (флаг шума, только при многобуферном обмене) и Framing Error (ошибка фрейма, только при многобуферном обмене).
Все эти события генерируют прерывание, если установлен соответствующий бит разрешения прерывания.
[Конфигурация режима USART]
Таблица 148. USART mode configuration(1).
Примечание (1): X = поддерживается; NA = не применимо.
[Регистры USART]
Таблица 149. Карта памяти регистров USART и их значения после сброса.
Границы адресов регистров см. в секции 2.3 «Memory map» даташита [1].
В описании функций регистров используются следующие сокращения: read/write (rw) Программа может читать и записывать эти биты. read-only (r) Программа может только читать эти биты. write-only (w) Программа может только записывать в этот бит. Чтение бита вернет значение сброса. read/clear (rc_w1) Программа может прочитать бит, а также сбросить его путем записью 1. Запись 0 не дает никакого эффекта. read/clear (rc_w0) Программа может прочитать бит, а также сбросить его путем записью 0. Запись 1 не дает никакого эффекта. read/clear by read (rc_r) Программа может прочитать этот бит. Чтение этого бита автоматически сбросит его в 0. Запись 0 в бит не дает никакого эффекта. read/set (rs) Программа может прочитать, а также установить этот бит. Запись 0 в бит не дает никакого эффекта. read-only write trigger (rt_w) Программа может прочитать этот бит. Запись 0 или 1 вызовет появление события (триггер), но не окажет никакого влияния на значение бита. toggle (t) Программа может только переключить этот бит записью 1. Запись 0 не дает никакого эффекта. Reserved (Res.) Зарезервированный бит, его значение должно сохраняться на значении сброса.
К регистрам периферийного устройства должен осуществляться доступ либо как к половинкам слова (half-word, 16 бит), либо как к словам (words, 32 бита).
Смещение адреса 0x00, значение после сброса 0x000000C0.
Биты 31:10 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). CTS (бит 9): Флаг CTS. Этот бит установится аппаратно, когда на входе CTS меняется уровень, если установлен бит CTSE. Бит CTS очищается программно (записью туда 0). Будет сгенерировано прерывание, если CTSIE=1 в регистре USART_CR3. 0: не было изменения состояния линии CTS. Примечание: этот бит недоступен для UART4 и UART5. LBD (бит 8): Флаг детектирования LIN break. Этот бит устанавливается аппаратурой, когда был обнаружен LIN break. Флаг очищается программно (записью в него 0). Будет сгенерировано прерывание, если LBDIE=1 в регистре USART_CR2. 0: LIN Break не был определен. Примечание: генерируется прерывание, когда LBD=1, если LBDIE=1. TXE (бит 7): регистр данных передачи пуст. Этот бит установится аппаратно, когда содержимое регистра TDR было передано в регистр сдвига передатчика. Будет сгенерировано прерывание, если бит TXEIE=1 в регистре USART_CR1. Бит TXE очищается при записи в регистр USART_DR. 0: данные не были переданы в регистр сдвига. Примечание: этот бит используется во время передачи одиночного буфера (single buffer transmission). TC (бит 6): передача завершена. Этот бит установится аппаратно, если передаче фрейма, содержащего данные, была завершена, и если установлен бит TXE. Будет сгенерировано прерывание, если бит TCIE=1 в регистре USART_CR1. Бит TC очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Также бит TC может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication). 0: передача не завершена. RXNE (бит 5): регистр данных приема не пуст. Этот бит установится аппаратно, когда содержимое регистра сдвига RDR было передано в регистр USART_DR. Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит RXNE очищается чтением регистра USART_DR register. Также бит RXNE может быть очищен записью в него 0. Эта очистка рекомендуется только для обмена с несколькими буферами (multibuffer communication). 0: данные не приняты. IDLE (бит 4): детектировано состояние ожидания на линии (IDLE line). Этот бит устанавливается аппаратно, когда на линии было определено состояние ожидания (Idle Line). Будет сгенерировано прерывание, если бит IDLEIE=1 в регистре USART_CR1. Бит IDLE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: не было определено состояние ожидания на линии. Примечание: бит IDLE не установится снова, пока сам не установится бит RXNE (т. е. пока не произойдет новое определение состояния ожидания на линии). ORE (бит 3): ошибка переполнения (OverRun Error). Этот бит установится аппаратно, когда принятое в настоящий момент слово в регистре сдвига готово к передаче в регистр RDR, но старое содержимое регистра данных не было прочитано (RXNE=1). Будет сгенерировано прерывание, если бит RXNEIE=1 в регистре USART_CR1. Бит ORE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: не было ошибки переполнения. Примечание: когда этот бит установился, старое содержимое регистра RDR не теряется, однако регистр сдвига будет перезаписан. В случае многобуферного обмена будет сгенерировано прерывание по флагу ORE, если установлен бит EIE в регистре USART_CR3. NF (бит 2): флаг детектирования шума. Этот бит установится аппаратно, когда в принятом фрейме был обнаружен шум. Бит NF очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: шума не было. Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание на флаге NF в случае многобуферного обмена, если установлен бит EIE в регистре USART_CR3. Когда на линии нет шума, флаг NF может быть запрещен программированием в 1 бита ONEBIT, чтобы увеличить допуск USART на девиации (см. выше секцию «Допуск ухода тактовой частоты для приемника USART»). FE (бит 1): Ошибка фрейма. Этот бит установится аппаратно, когда произошла рассинхронизация, был чрезмерный шум, или был детектирован символ break. Бит FE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет чтение регистра USART_DR). 0: не было ошибки фрейма. Примечание: этот бит не генерирует прерывание, поскольку появляется одновременно с битом RXNE, который сам по себе генерирует прерывание. Если передаваемое в настоящий момент слово приведет к одновременным ошибкам frame error и overrun error, то слово будет принято, и установится только бит ORE. Будет сгенерировано прерывание по флагу FE в случае многобуферного обмена, если установлен бит EIE. PE (бит 0): ошибка проверки четности (Parity Error). Этот бит установится аппаратно, когда на приеме была обнаружена ошибка четности. Бит PE очищается последовательностью операций в программе (чтение из регистра USART_SR, за которым идет запись в регистр USART_DR). Программа должна ожидать установки флага RXNE перед очисткой флага PE. Будет сгенерировано прерывание, если бит PEIE=1 в регистре USART_CR1. 0: нет ошибки проверки четности.
Смещение адреса 0x04, значение после сброса 0xXXXXXXXX.
Биты 31:9 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). DR[8:0] (биты 8 .. 0): Значение данных. Содержит принятый или передаваемый символ данных, в зависимости от операции с регистром — чтение или запись. Регистр данных выполняет двойную функцию (чтение и запись) поскольку физически он состоит из двух регистров — один для передачи (TDR) и еще один для приема (RDR). Регистр TDR предоставляет параллельный интерфейс между внутренней шиной и выходным регистром сдвига см. рис. 296. Регистр RDR предоставляет параллельный интерфейс между входным регистром сдвига и внутренней шиной. Когда разрешена передача с генерацией бита четности (установлен в 1 бит PCE регистра USART_CR1), то значение, записанное в MSB (бит 7 или бит 8, в зависимости от настроенной длины данных), не оказывает никакого эффекта, потому что заменяется аппаратно вычисленным битом четности. Когда на приеме разрешен контроль четности, то значение, прочитанное из старшего бита данных (MSB) является принятым битом четности.
Примечание: счетчики скорости останавливают счет, если биты TE или RE запрещены. Смещение адреса 0x08, значение после сброса 0x00000000.
Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). DIV_Mantissa[11:0] (биты 15:4): мантисса USARTDIV. Эти 12 бит определяют мантиссу делителя USART (USARTDIV). DIV_Fraction[3:0] (биты 3:0): дробная часть USARTDIV. Эти 4 бита определяют дробную часть делителя USART (USARTDIV). Когда OVER8=1, бит DIV_Fraction3 не учитывается, и должен быть очищен.
Смещение адреса 0x0C, значение после сброса 0x00000000.
Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). OVER8 (бит 15): режим передискретизации приема (oversampling). 0: передискретизация на 16. Примечание: передискретизация на 8 недоступна в режимах режимах Smartcard, IrDA и LIN: когда SCEN=1, IREN=1 или LINEN=1, то OVER8 принудительно сбрасывается в 0 аппаратурой. Бит 14 зарезервирован, его значение должно сохраняться в состоянии сброса (0). UE (бит 13): разрешение USART. Когда этот бит очищен, прескалеры и выходы USART останавливаются по окончанию текущей передачи байта, чтобы снизить потребление энергии. Этот бит устанавливается и очищается программой. 0: прескалер и выходы USART запрещены. M (бит 12): длина слова. Этот бит определяет длину слова данных, и как следствие длину фрейма. Бит устанавливается или очищается программно. 0: 1 start-бит, 8 бит данных, n stop-бит. Примечание: бит M не должен модифицироваться во время передачи данных (и приема, и передачи). WAKE (бит 11): метод пробуждения (wakeup). Этот бит определяет, как будет разбужен USART, бит устанавливается или очищается программой. 0: Idle Line (состояние ожидания на линии). PCE (бит 10): разрешение контроля четности (Parity Control Enable). Этот бит выбирает аппаратную генерацию и проверку четности данных. Когда контроль четности разрешен, вычисленная четность вставляется в позицию MSB (старший бит, 9-й при M=1 или 8-й при M=0), и на приеме этот бит также проверяется на четность (или нечетность). Бит PCE устанавливается и очищается программой. Будучи установленным, PCE активируется посте текущего байта (на приеме и передаче). 0: контроль четности разрешен. PS (бит 9): выбор варианта контроля четности. Этот бит выберет, как вычисляется и проверяется patity — либо на четность, либо на нечетность, когда эта функция разрешена (PCE=1). Бит устанавливается и очищается программно. Вариант контроля выбирается после текущего байта. 0: проверка по принципу четности. PEIE (бит 8): разрешение прерывания на ошибке четности. Бит устанавливается и очищается программно. 0: прерывание запрещено. TXEIE (бит 7): разрешение прерывания опустошения буфера передачи. Бит устанавливается и очищается программно. 0: прерывание запрещено. TCIE (бит 6): разрешение прерывания по завершению передачи. Этот бит устанавливается и очищается программно. 0: прерывание запрещено. RXNEIE (бит 5): разрешение прерывания по завершению приема (регистр данных приема не пуст). Этот бит устанавливается и очищается программно. 0: прерывание запрещено. IDLEIE (бит 4): разрешение прерывания на состоянии ожидания линии (IDLE). Этот бит устанавливается и очищается программно. 0: прерывание запрещено. TE (бит 3): разрешение передатчика. Этот бит разрешает работу передатчика, бит устанавливается и очищается программно. 0: передатчик запрещен. Примечание: во время передачи импульс 0 на бите TE (0, за которым следует 1) приведет к передаче преамбулы (сигнала ожидания на линии, idle line) после текущего слова, кроме режима smartcard. Когда бит TE установлен, здесь есть 1-битная задержка времени перед тем, как начнется передача. RE (бит 2): разрешение приемника. Этот бит устанавливается и очищается программно. 0: приемник запрещен. RWU (бит 1): пробуждение приемника. Бит определяет, находится ли USART в режиме молчания (mute mode) или нет. Он устанавливается и очищается программой, и может быть очищен аппаратно, когда распознана распознана последовательность пробуждения (wakeup sequence). 0: приемник в активном режиме. Примечание: перед выбором режима молчания (установкой бита RWU) USART должен сначала принять байт данных, иначе USART не может работать в режиме молчания с пробуждением на детектировании ожидания линии (wakeup by Idle line). В конфигурации пробуждения от метки адреса (Address Mark Detection wakeup, бит WAKE=1) бит RWU не может быть изменен программой, когда установлен бит RXNE. SBK (бит 0): отправка сигнала break. Установка этого бита используется для отправки символа остановки передачи (send break). Бит может быть установлен и очищен программой. Он должен быть установлен программой, и будет сброшен аппаратно во время stop-бита символа break. 0: не будет передан символ break.
Смещение адреса 0x10, значение после сброса 0x00000000.
Биты 31:15 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). LINEN (бит 14): разрешение режима LIN. Этот бит устанавливается и очищается программой. 0: режим LIN запрещен. Режим LIN разрешает функцию отправки сигналов LIN Synch Break (13 бит в лог. 0), используя бит SBK в регистре USART_CR1 и функцию детектирования сигналов LIN Sync break. STOP (биты 13 и 12): биты настройки длительности стоп-бита. 00: 1 stop-бит. Примечание: 0.5 stop-бита и 1.5 stop-бита недоступны для UART4 и UART5. CLKEN (бит 11): разрешение тактирования. Этот бит позволяет разрешить работу выхода тактов CK. 0: вывод CK запрещен. Примечание: этот бит недоступен для UART4 и UART5. CPOL (бит 10): полярность тактов. Бит позволяет выбрать полярность выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPHA бит CPOL определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309). 0: постоянное значение 0 на выводе CK вне окна передачи. Примечание: этот бит недоступен для UART4 и UART5. CPHA (бит 9): фаза тактов. Бит позволяет выбрать фазу выхода тактов, когда вывод CK выводит такты в синхронном режиме. Вместе с битом CPOL бит CPHA определяет желаемую взаимосвязь данных и тактов (см. рисунки 308 и 309). 0: первое изменение сигнала синхронизации является первым перепадом захвата данных. Примечание: этот бит недоступен для UART4 и UART5. LBCL (бит 8): тактовый импульс последнего бита. Бит позволяет выбрать, связан ли тактовый импульс с последним переданным битом данных (MSB). Тактовые импульсы выводятся на ножку CK в синхронном режиме. 0: тактовый импульс на вывод CK на последнем бите не выводится. Примечания: последний бит это 8-й или 9-й бит данных, в зависимости от формата 8/9 бит, выбираемого битом M регистра USART_CR1. Бит LBCL недоступен для UART4 и UART5. Бит 7 зарезервирован, его значение должно сохраняться в состоянии сброса (0). LBDIE (бит 6): разрешение прерывания детектирования LIN break. Маска прерывания break (детектирование break с использованием разделителя break). 0: прерывание запрещено. LBDL (бит 5): длина детектирования LIN break. Позволяет выбрать между 11 битами или 10 битами детектирования break. 0: 10-bit break detection. Бит 4 зарезервирован, его значение должно сохраняться в состоянии сброса (0). ADD[3:0] (биты 3:0): адрес узла USART. Это битовое поле дает адрес узла USART, используется в многопроцессорном обмене во время режима молчания (mute mode), для пробуждения USART при детектировании метки адреса (address mark detection).
Смещение адреса 0x14, значение после сброса 0x00000000.
Биты 31:12 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). ONEBIT (бит 11): разрешение режима одной выборки на бит. Дает возможность выборки метода оцифровки сигнала. Когда выбран метод одной выборки на бит, флаг детектирования шума (noise detection flag, NF) запрещен. 0: мажоритарный метод трех выборок на бит. Примечание: функция ONEBIT применима только к битам данных. Это не относится к анализу бита START. CTSIE (бит 10): разрешение прерывания CTS. 0: прерывание запрещено. Примечание: этот бит недоступен для UART4 и UART5. CTSE (бит 9): разрешение CTS. 0: запрещено аппаратное управление потоком CTS. Примечание: этот бит недоступен для UART4 и UART5. RTSE (бит 8): разрешение RTS. 0: запрещено аппаратное управление потоком RTS. Примечание: этот бит недоступен для UART4 и UART5. DMAT (бит 7): разрешение DMA передатчика. Этот бит устанавливается и сбрасывается программой. 0: режим DMA для передачи запрещен. DMAR (бит 6): разрешение DMA приемника. Этот бит устанавливается и сбрасывается программой. 0: режим DMA для приема запрещен. SCEN (бит 5): разрешение режима Smartcard. 0: режим Smartcard запрещен. Примечание: этот бит недоступен для UART4 и UART5. NACK (бит 4): разрешение Smartcard NACK. 0: запрещена передача NACK в случае ошибки четности. Примечание: этот бит недоступен для UART4 и UART5. HDSEL (бит 3): выбор полудуплекса. Бит выбирает режим Single-wire Half-duplex. 0: режим полудуплекса не выбран. IRLP (бит 2): низкопотребляющий режим IrDA (Low-power mode). Бит используется для выбора между нормальным IrDA и низкопотребляющим IrDA. 0: нормальный режим. IREN (бит 1): разрешение режима IrDA. Этот бит устанавливается и сбрасывается программой. 0: IrDA запрещен. EIE (бит 0): разрешение прерывания ошибки (Error Interrupt Enable). Бит нужен для разрешения генерации прерывания в случае ошибки фрейма (framing error, FE=1), переполнения (overrun error, ORE=1) или флага шума (noise flag, NF=1) в регистре USART_SR, в случае многобуферного обмена (Multi Buffer Communication, DMAR=1 в регистре USART_CR3). 0: прерывание запрещено.
Смещение адреса 0x18, значение после сброса 0x00000000.
Биты 31:16 зарезервированы, их значение должно сохраняться в состоянии сброса (все нули). GT[7:0] (биты 15 .. 8): значение защитного времени (Guard Time). Это битовое поле дает значение защитного времени в единицах тактов скорости (baud clock). Это используется в режиме Smartcard. Флаг завершения передачи (Transmission Complete, TC) установится после этого защитного времени. Примечание: эти биты недоступны для UART4 и UART5. PSC[7:0] (биты 7 .. 0): значение прескалера. IrDA Low-power mode: PSC[7:0] = IrDA Low-Power Baud Rate. Используется для программирования прескалера, чтобы поделить системную тактовую частоту, чтобы достичь частоты низкого энергопотребления. Источник тактов делится на значение, заданное в регистре (8 значащих бит): 00000000: зарезервировано — не программируйте это значение. В нормальном режиме IrDA: поле PSC должно быть установлено в 00000001. В режиме Smartcard: PSC[4:0]: значение прескалера. Используется программирование прескалера для деления системной тактовой частоты, чтобы предоставить такты смарт-карты. Значение, заданное в этом регистре (5 значащих бит), умножается на 2, чтобы получить коэффициент деления исходной частоты тактов: 00000: зарезервировано — не программируйте это значение. Примечание: биты [7:5] не оказывают влияния в режиме Smartcard. Биты PSC недоступны для UART4 и UART5.
[Ссылки]
1. RM0090 Reference manual STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 advanced Arm®-based 32-bit MCUs site:st.com. |
Программный UART для любого микроконтроллера. Ч1
Иногда возникает ситуация, когда аппаратных ресурсов микроконтроллера не хватает или требуемый ресурс в его составе отсутствует. Решить эту проблему можно двумя способами – заменить используемый микроконтроллер на другой или реализовать требуемый ресурс программно. Оба способа имеют свои достоинства и недостатки, однако второй вариант часто более предпочтительный, а иногда и единственно возможный. Например, как в случае с 1-Wire интерфейсом, который не поддерживается аппаратно ни в одном 8-ми разрядном микроконтроллере AVR.
Для использования кода программного UART`а, необходимо выполнение следующих требований:
1. Наличие Си компилятора под используемый микроконтроллер
2. Наличие у микроконтроллера таймерного прерывания.
3. Наличие у микроконтроллера двух выводов, состояние которых можно программно читать и изменять.
В данном коде реализованы следующие функции.
1. void flush_input_buffer( void )
Очистка входного (приемного) буфера.
2. char kbhit( void )
Тестирование входного буфера на наличие данных.
3. char getchar( void )
Чтение символа из входного буфера.
Принимаемые данные сохраняются в кольцевом буфере, емкость которого задается с помощью макроопределения.
Если на момент вызова данной функции входной буфер пуст, функция ожидает поступление данных. При этом в цикле выполняется пользовательская функция idle(). Про нее написано ниже.
4. void turn_rx_on( void )
Разрешает прием данных по UART`у. По умолчанию прием данных разрешен.
5. void turn_rx_off( void )
Запрещает прием данных по UART`у.
Прием и передача данных выполняется в обработчике прерывания таймера. Запрещение приема данных уменьшает время выполнения обработчика.
6. void putchar( char )
Запись символа в последовательный порт
7. void init_uart( void )
Инициализация программного UART`a. Устанавливает внутренние флаги, настраивает выводы микроконтроллера и таймер.
Данная программная реализация UART`а основана на использовании прерывания таймера. Разрядность таймера и режим работы значения не имеют, главное чтобы частота его прерываний могла быть установлена в три раза выше требуемой скорости обмена.
Например, требуется скорость 9600 бит в секунду. Тогда прерывания таймера должны происходить с частотой 9600*3 = 28800 Гц. Или в пересчете на временной интервал – каждые 34,72 микросекунды.
Это накладывает скоростные ограничения на возможности применения программного UART`a, особенно в микроконтроллерах с низкой тактовой частотой.
Если установить слишком высокую скорость обмена, код обработчика прерывания таймера не будет успевать выполняться между вызовами прерываний, что приведет к ошибкам приема/передачи, а то и к полной потере связи.
Также высокая частота прерываний таймера будет негативно влиять на производительность остальной части программы. (Для аналогии можно привести ситуацию, когда вы пытаетесь выполнять свою работу, а вас постоянно отвлекают на посторонние дела.)
Код программного UART`a из IAR`овского апноута записан в сишном файле. Подключить его к проекту можно двумя путями:
– скопировать этот код в один из сишных файлов своего проекта
– написать к сишному файлу заголовочный и подключить к проекту полноценный модуль
Второй путь более грамотный, поэтому программный UART во второй части статьи я подключаю к проекту именно так.
Однако это еще не все.
Для переносимости кода в нем не реализовано несколько платформенно-зависимых функций, которые вам потребуется написать. Функции перечислены в списке ниже.
В принципе ничего сложного в этом нет.
1. void get_rx_pin_status( void )
Возвращает состояние приемного вывода (receive pin).
2. void set_tx_pin_high( void )
Устанавливает на передающем выводе (transmit pin) логическую единицу.
3. void set_tx_pin_low( void )
Устанавливает на передающем выводе логический ноль.
4. void idle( void )
Фоновая пользовательская функция. Выполняется, когда ожидается прием данный.
5. void timer_set( int BAUD_RATE )
Устанавливает частоту прерываний таймера. Частота прерываний должна быть в 3 раза выше требуемой скорости обмена!
Функции передается значение требуемой скорости обмена, а она должна устанавливать соответствующую частоту таймерных прерываний.
6. void set_timer_interrupt( timer_isr )
Разрешает прерывания таймера.
Для экономии памяти и увеличения производительности кода некоторые из этих функций можно заменить макросами. Например, функции 1, 2, 3 и 6.
Функцию 4 можно оставить пустой.
И последнее что нужно сделать, это поместить код функции void timer_isr(void) в прерывание таймера. Сделать это можно опять-таки двумя способами:
— поместить вызов функции timer_isr() в код обработчика прерывания
— сделать из самой функции timer_isr() обработчик прерывания
software-uart.rar
Микроконтроллер
— очистка флагов прерывания USART (UART) в STM32?
Как правило, вам нужно обрабатывать только флаги прерывания, которые вы специально включили с помощью USART_ITConfig ()
.
Однако, если вы разрешите прерывание RXNE ( USART_ITConfig (USARTx, USART_IT_RXNE)
), тогда этот также включает прерывание переполнения! Так что вы должны справиться с обоими этими проблемами.
Флаги USART могут сбивать с толку. Есть отдельные флаги состояния и флаги прерывания, и они имеют похожие имена.Например: USART_IT_RXNE
и USART_FLAG_RXNE
.
Кроме того, есть различные способы сбросить эти флаги. Например, функция USART_ClearITPendingBit ()
работает только для четырех (из десяти) возможных флагов.
Вот краткое описание флагов прерывания и способы их использования. Они характерны для STM32F105, но являются репрезентативными:
USART_IT_TXE — «Регистр передачи данных пуст»
- Очищается автоматически при вызове
USART_SendData ()
USART_IT_RXNE — «Регистр данных приема не пуст»
Очищается автоматически при вызове
USART_ReceiveData (USARTx)
Его можно очистить вручную, позвонив по номеру
USART_ClearITPendingBit (USARTx, USART_IT_RXNE)
USART_IT_TC — «Передача завершена»
Автоматически очищается:
-
USART_GetITStatus (USARTx, USART_IT_TC)
, за которым следует -
USART_SendData ()
-
Его также можно очистить вручную, позвонив по номеру
USART_ClearITPendingBit (USARTx, USART_IT_TC)
USART_IT_CTS — «Изменение CTS»
- Очищено по телефону
USART_ClearITPendingBit (USARTx, USART_IT_CTS)
USART_IT_LBD — «Обнаружен разрыв LIN»
- Очищено по телефону
USART_ClearITPendingBit (USARTx, USART_IT_LBD)
USART_IT_PE — «Ошибка четности»
- Разрешено:
-
USART_GetITStatus (USARTx, USART_IT_PE)
, за которым следует -
USART_ReceiveData (USARTx)
-
USART_IT_NE — «Шумовая ошибка»
- Разрешено:
-
USART_GetITStatus (USARTx, USART_IT_NE)
, за которым следует -
USART_ReceiveData (USARTx)
-
USART_IT_ORE — «Ошибка переполнения»
- Разрешено:
-
USART_GetITStatus (USARTx, USART_IT_ORE)
, за которым следует -
USART_ReceiveData (USARTx) ()
-
USART_IT_IDLE — «Обнаружена свободная линия»
- Разрешено:
-
USART_GetITStatus (USARTx, USART_IT_IDLE)
, за которым следует -
USART_ReceiveData (USARTx) ()
-
Обучение библиотеки STM32 HAL: последовательное прерывание бездействия
Ссылка на реализацию конфигурации STM32 CubeMX здесь.
1. Принцип и решение получения данных неограниченной длины
В STM32 UART является наиболее распространенным способом связи — он получает по одному байту за раз, и мы можем использовать опрос, но для некоторых данных, отправляемых в фиксированное время, опрос иногда бывает недостаточно гибким. Вы также можете использовать прерывание, например прерывание каждого байта один раз, чтобы потреблять системные ресурсы. Особенно в библиотеках HAL есть много программ, работающих от прерывания до функции обратного вызова. Частые прерывания могут вызвать переполнение данных.
Чтобы избежать этой проблемы, мы используем указанную длину данных для приема, а затем вызываем функцию обратного вызова, которая позволяет нам получать большие данные, но эта ситуация приводит к требованию, чтобы каждый пакет был фиксированной длины.
Для решения вышеупомянутых проблем наиболее часто используемый метод в Интернете — использовать прерывание при бездействии, то есть, когда последовательный порт бездействует, запускать прерывание и уведомлять ядро о завершении передачи. Оценка прерывания последовательного бездействия заключается в том, что, когда последовательный порт начинает получать данные, передача данных не происходит в течение времени обнаружения 1 байта данных, тогда последовательный порт считается бездействующим.Поскольку наше ядро не принимает последовательные данные, когда оно получает данные через последовательный порт, пока оно не находится в режиме ожидания, нам также необходимо использовать DMA, чтобы помочь нам в передаче данных в указанное место и уведомить ядро, чтобы обработать его, когда передача данных завершена. .
2. Процесс реализации
- Open Serial Free Interrupt: включить последовательное прерывание во время инициализации программы
- Определите функцию обработки прерывания по последовательному каналу: добавьте функцию обработки прерывания по последовательному каналу к последовательному прерыванию
- Определите функцию обратного вызова прерывания бездействия последовательного порта: чтобы отметить завершение приема данных и вычислить длину полученных данных
2.1 Открытое последовательное прерывание без прерывания
Во-первых, когда мы инициализируем, мы можем сделать прерывание последовательного порта в режиме ожидания, чтобы при прерывании последовательного порта MCU мог вызвать функцию последовательного прерывания.
В функции MX_USART1_UART_Init (void) в файле main.c:
static void MX_USART1_UART_Init (void) { __HAL_UART_ENABLE_IT (& huart1, UART_IT_IDLE); }
Когда эта функция добавляется в проект, каждый раз при отправке данных вызывается служебная функция прерывания USART1_IRQHandler ().Вы можете вставить в функцию оператор печати, чтобы проверить, нормально ли прерывание бездействия.
2.2 Конфигурация приемника DMA
Хотя мы используем CubeMx для настройки DMA, конечно, мы настраиваем только режим DMA для последовательного порта в память, но нам нужно дополнительно разработать в программе, в какую память будет переноситься DMA. Мы создаем массив для хранения данных последовательного порта, передаваемых DMA, и используем функцию HAL_UART_Receive_DMA () для настройки конкретного кода, например, как показано ниже:
... ... uint8_t receive_buff [255]; ... ... void main (пусто) { .. ... __HAL_UART_ENABLE_IT (& huart1, UART_IT_IDLE); HAL_UART_Receive_DMA (& huart1, (uint8_t *) receive_buff, 255); в то время как (1) { .. .. } } ... ...
2.3 Добавить обработчик прерывания и функции обратного вызова
После того, как CubeMx работает в соответствии с вышеизложенным, функция обработки последовательного прерывания HAL_UART_IRQHandler () была использована в сгенерированном проекте, но обработка бездействующего прерывания не была обнаружена в функции.Поэтому мы добавляем дополнительную функцию: USER_UART_IRQHandler () (функция инкапсуляции пользователя). Полный код после добавления выглядит следующим образом:
stm32f0xx_it.c:
недействителен USART1_IRQHandler (недействителен) { HAL_UART_IRQHandler (& huart1); USER_UART_IRQHandler (& huart1); }
Определить USER_UART_IRQHandler ():
usart.c:
void USER_UART_IRQHandler (UART_HandleTypeDef * huart) { если (USART1 == huart1.Пример) { если (СБРОС! = __HAL_UART_GET_FLAG (& huart1, UART_FLAG_IDLE)) { __HAL_UART_CLEAR_IDLEFLAG (& huart1); printf ("\ r \ nUART1 Idle IQR Detected \ r \ n"); USAR_UART_IDLECallback (huart); } } }
До сих пор мы могли правильно реагировать на последовательные прерывания и вызывать новую функцию: USAR_UART_IDLECallback (), которая является функцией обратного вызова, специально разработанной для обработки прерываний в режиме ожидания.Он определяется следующим образом (записывается как обычно в файле usart.c):
внешний uint8_t receive_buff [255]; void USAR_UART_IDLECallback (UART_HandleTypeDef * huart) { HAL_UART_DMAStop (& huart1); uint8_t data_length = BUFFER_SIZE - __HAL_DMA_GET_COUNTER (& hdma_usart1_rx); printf ("Получить данные (длина =% d):", длина_данных); HAL_UART_Transmit (& huart1, receive_buff, data_length, 0x200); printf ("\ r \ n"); memset (receive_buff, 0, длина_данных); длина_данных = 0; HAL_UART_Receive_DMA (& huart1, (uint8_t *) receive_buff, 255); }
Что касается вычисления длины данных, мы можем знать работу библиотечной функции HAL.Проще говоря, функция _HAL_DMA_GET_COUNTER () вернет данные, которые должны быть получены, установив длину данных, которые должны быть получены, вычитая данные, которые должны быть получены, мы получим данные, которые были получены.
До сих пор мы использовали метод прерывания DMA + последовательного простоя для получения данных переменной длины.
Прерывание холостого хода STM32 — USART? Это? В режиме ожидания (без режима DMA)
UART (универсальный асинхронный приемник / передатчик) — универсальный асинхронный приемопередатчик и передатчик.Как один из протоколов асинхронной последовательной связи, UART работает, передавая каждый символ данных один за другим. Это наиболее часто используемая шина данных в процессе разработки приложений.
Последовательный порт
UART характеризуется последовательной передачей данных по очереди. Пока две линии передачи могут обеспечивать двустороннюю связь, одна линия может отправлять данные, а другая линия принимает данные. Последовательная связь UART имеет несколько важных параметров, а именно скорость передачи, стартовый бит, бит данных, стоповый бит и бит проверки четности.Для двух портов, использующих последовательную связь UART, эти параметры должны совпадать, иначе связь не будет завершена нормально. Формат данных, передаваемых через последовательный порт UART, следующий:
Стартовый бит: указывает на начало передачи данных, логический уровень равен «0».
Бит данных: возможные значения 5, 6, 7, 8 и 9, указывающие на передачу этих битовых данных. Общее значение — 8, потому что значение символа ASCII составляет 8 бит.
Бит четности: используется получателем для проверки полученных данных и проверки «1».
Биты четные (проверка на четность) или нечетные (проверка на нечетность) для проверки правильности передачи данных. Этот бит не нужен при использовании.Стоп-бит: указывает конец кадра данных. Логика уровня — «1».
Baud rate: скорость последовательной связи. Он выражается количеством значащих бит двоичного кода, переданных за единицу времени.Единица — бит в секунду
бит / с (бит / с). Стандартные значения скорости передачи — 4800, 9600, 14400, 38400, 115200 и т. Д., Чем больше значение, тем быстрее передаются данные, а скорость передачи составляет
бод.
115200 означает 115200 бит в секунду.
Когда нет данных, получаемых через последовательный порт, прерывание STM32 IDLE не будет генерироваться все время. Сгенерированное условие выглядит следующим образом: когда бит флага IDLE сброшен, первые данные должны быть получены до запуска.Когда полученные данные отключены и данные не получены, будет сгенерировано прерывание IDLE. Бит IDLE снова не устанавливается в высокий уровень до тех пор, пока не будет установлен бит RXNE (т.е. снова будет обнаружена шина IDLE). RXNE может принимать прерывания без открытия, уменьшая количество входящих прерываний.
Конфигурация последовательного порта
если (uart-> UartHandle.Instance == LPUART1) { __HAL_UART_ENABLE_IT (& uart-> UartHandle, UART_IT_IDLE); }
Прием прерывания
недействителен LPUART1_IRQHandler (недействителен) { struct stm32_uart * uart; int ch; uart = & lpuart1; если ((l_serial.parent.open_flag и RT_DEVICE_FLAG_INT_RX)) { HAL_UART_IRQHandler (& uart-> UartHandle); ch = -1; ch = uart-> UartHandle.Instance-> RDR & 0xff; lpuart_recv_buff [recv_len ++] = ch; if (__ HAL_UART_GET_FLAG (& uart-> UartHandle, UART_FLAG_IDLE)! = СБРОС) { recv_len--; __HAL_UART_CLEAR_IDLEFLAG (& uart-> UartHandle); uart_rx_idle_callback (lpuart_recv_buff, recv_len); recv_len = 0; } } если (recv_len> = 300) { recv_len = 0; } }
Функция обратного вызова
void uart_rx_idle_callback (uint8_t * pData, int size) { если (размер> 5) { debug_uart_recv_data_parse (pData, размер); } }
обработка данных
bool debug_uart_recv_data_parse (uint8_t * pData, uint16_t Размер) { debug_uart_package_t debug_frame = {0}; rz_reset_info_t * pobj = rz_reset_info_get (); debug_frame.recv_buf = pData; если (debug_frame.recv_buf == NULL) { rt_kprintf ("recv_buff NULL error \ r \ n"); вернуть ложь; } debug_frame.recv_len = Размер; если (debug_frame.recv_len> MAX_EFR_LENGTH) { rt_kprintf ("Ошибка длины получаемых данных \ r \ n"); вернуть ложь; } #if 1 debug_frame.head = debug_frame.recv_buf [0]; debug_frame.check_sum = rz_cs_check_sum_data (debug_frame.recv_buf, debug_frame.recv_len-1); если (debug_frame.head! = EFR_HEAD && debug_frame.check_sum! = debug_frame.recv_buf [debug_frame.recv_len]) { rt_kprintf ("ошибка головки || ошибка контрольной суммы \ r \ n"); вернуть ложь; } if (pobj-> init == NULL) { rt_kprintf ("Ошибка инициализации модуля \ r \ n"); вернуть ложь; } #endif recvive_complete_flag = true; g_lpuart_obj.lpuart_recv_len = debug_frame.recv_len; rt_memcpy (g_lpuart_obj.lpuart_recv_buf, debug_frame.recv_buf, debug_frame.recv_len); вернуть истину; }
STM32L4 Драйвер UART для FreeRTOS без HAL — M0AGX
#include «uart.h «
#include
#include
#include
#include
#define UART
LPUART1
UART_IRQn LPUART1_IRQn
#define UART_RX_BUFFER_SIZE 1024
#define UART_TX_BUFFER_SIZE 1024
статическая QueueHandle_t _rx_queue_handle;
статическая QueueHandle_t _tx_queue_handle;
недействительными uart_init (uint32_t бод) {
статическая StaticQueue_t rx_queue;
статическая uint8_t rx_queue_storage_buffer [UART_RX_BUFFER_SIZE];
_rx_queue_handle = xQueueCreateStatic (
UART_RX_BUFFER_SIZE,
SizeOf (Char),
rx_queue_storage_buffer,
& rx_queue);
статическая StaticQueue_t tx_queue;
статическая uint8_t tx_queue_storage_bu ffer [UART_TX_BUFFER_SIZE];
_tx_queue_handle = xQueueCreateStatic (
UART_TX_BUFFER_SIZE,
sizeof (char),
tx_queue_storage_buffer,
& tx_queue);
// инициализировать оборудование
taskENTER_CRITICAL ();
RCC-> APB1ENR2 | = RCC_APB1ENR2_LPUART1EN_Msk; // включить часы для UART
taskEXIT_CRITICAL ();
UART-> CR1 = 0; // сбросить все
UART-> BRR = 256u * UART_CLOCK / baud; // Справочное руководство 39.4.4
UART-> CR1 = USART_CR1_RXNEIE_Msk | USART_CR1_RE_Msk | USART_CR1_UE_Msk;
taskENTER_CRITICAL ();
NVIC_SetPriority (UART_IRQn, 6); // очень низкий приоритет
NVIC_EnableIRQ (UART_IRQn);
taskEXIT_CRITICAL ();
}
char uart_getc (void) {
char c;
xQueueReceive (_rx_queue_handle, & c, portMAX_DELAY);
возврат c;
}
char uart_try_getc (bool * status) {
char c;
* status = xQueueReceive (_rx_queue_handle, & c, 0 / * не ждать * /);
возврат c;
}
void uart_putc (char c) {
xQueueSend (_tx_queue_handle, & c, portMAX_DELAY);
// Настройте UART для передачи и приема, теперь должно срабатывать пустое прерывание TX.
// Если UART уже передает, эта запись ничего не меняет.
UART-> CR1 = USART_CR1_RXNEIE_Msk | USART_CR1_TE_Msk | USART_CR1_TXEIE_Msk | USART_CR1_RE_Msk | USART_CR1_UE_Msk;
}
void uart_write (const uint8_t * s, uint32_t length) {
for (uint32_t i = 0; i uart_putc (* s); с ++; } }
void uart_puts (char * s) {
while (* s) {
uart_putc (* s);
с ++;
}
}
// строка заканчивается \ r \ n или \ n, \ r всегда пропускается
uint32_t uart_read_line (char * target, uint32_t max_length, uint32_t timeout_ms) {
_
uintread32 = 0 ;
* цель = ‘\ 0’;
while (max_length) {
char c;
bool status = xQueueReceive (_rx_queue_handle, & c, pdMS_TO_TICKS (timeout_ms));
if (status) {
if (c == ‘\ r’) {// пропустить \ r
continue;
}
bytes_read ++;
max_length—;
if (c == ‘\ n’) {
* target = ‘\ 0’;
вернуть bytes_read;
}
* target = c;
цель ++;
} else {// в очереди больше нет символов
return bytes_read;
}
}
// полученная строка слишком длинная
* (target — 1) = ‘\ 0’;
вернуть bytes_read;
}
void uart_unblock_read_line (void) {
char c = ‘\ n’;
xQueueSend (_rx_queue_handle, & c, portMAX_DELAY);
}
void LPUART1_IRQHandler (void) {
BaseType_t wakeup_rx = pdFALSE;
BaseType_t wakeup_tx = pdFALSE;
if (UART-> ISR & USART_ISR_RXNE_Msk) {// что-то получено
char c = UART-> RDR;
bool status = xQueueSendFromISR (_rx_queue_handle, & c, & wakeup_rx);
if (status == false) {// переполнение буфера ввода!
__БКПТ (1); // никогда не должно происходить, задача RX должна достаточно быстро очистить входящий буфер
}
}
if (UART-> ISR & USART_ISR_TXE_Msk) {
char c;
if (xQueueReceiveFromISR (_tx_queue_handle, & c, & wakeup_tx)) {
UART-> TDR = c;
} else {// больше нет данных для передачи — пусть передатчик выводит последний байт
UART-> CR1 = USART_CR1_RXNEIE_Msk | USART_CR1_TE_Msk | USART_CR1_RE_Msk | USART_CR1_UE_Msk;
}
}
портYIELD_FROM_ISR (wakeup_rx || wakeup_tx);
}
Прерывание Stm32 на голом железе
Прерывание Stm32 на голом железе
Схема синей таблетки STM32
Инженеры по верификации оборудования часто проводят тесты на голом железе, чтобы проверить работу ядра в системе на кристалле (SoC).Однако может быть сложно написать загрузочный код для «голой» системы без базового понимания разработки программного обеспечения на архитектуре ARM.
25 апреля 2018 г. · Программирование Pi без операционной системы на C и ASM ece598_lec04.pdf: Неделя 3: последовательные порты 6 февраля ece598_lec05.pdf: 8 февраля Драйвер Pi UART ece598_lec06.pdf: Неделя 4: 13 февраля Прерывает работу ARM ece598_lec07.pdf : 15 февраля Обработчики прерываний и таймеры ece598_lec08.pdf: Неделя 5: 20 февраля Пользовательское пространство / Системные вызовы / ABI ece598_lec09.pdf: 22 февраля …
Обычный способ обработки таких случаев в C ++ — генерировать исключение. Однако для встроенных программ и особенно для программирования на «голом железе» это не вариант. Правильный способ справиться с этими ошибками — это установить предварительные условия. Реализация StaticQueue в библиотеке embxx использует макрос GASSERT (), описанный ранее. Проверки будут …
4 сентября 2012 г. · Итоги и будущая работа • Реализован MIPS-порт паравиртуализации xen — MMU, обработка исключений / прерываний и т. Д.- Сравнимая производительность с x86 для «голого металла» по сравнению с xen • В настоящее время в нашей реализации используется xen 3.4.0 для гипервизора xen, 4.0.0 для инструментов xen, linux 2.6.32 для PV linux, поэтому нам необходимо — Обновить до последних версий …
STM32 прерывание на чистом металле. поделиться | улучшить этот вопрос | следовать | изменён 23 сен в 18:10. шустрый. задан 21 сен в 10:58. blippy blippy. 1,230 1 1 золотой знак 10 10 серебряных знаков 16 16 бронзовых знаков. комментировать | 2 ответа Активные самые старые голоса. 1. Даже если уйдешь …
Это набор вещей, которые я сделал для микроконтроллера STM32F103. Я программирую, используя язык C и Makefiles, так что это набор вещей в стиле «на голом железе».
Считыватель картриджей Usb n64
Bare Metal Rust: Создание ядер в Rust. Я получил массу удовольствия от взлома игрушечного ядра, написанного на Rust. Я начал использовать первые четыре поста из потрясающей серии статей Филиппа Оппермана «Написание ОС на Rust»: по завершении этой книги вы будете готовы к работе с любое из устройств семейства STM32.Начиная с STM32, профессионалы, студенты или любители могут узнать об ARM без лишних затрат! Что вы узнаете. Инициализировать и использовать драйверы libopencm3 и обрабатывать прерывания; Используйте DMA для управления OLED на основе SPI, отображающего …
Spn 524287 fmi 31
Bare Metal STM32 Опубликовано 29 февраля 2016 года Дэвидом Альбертом Периодически мне приходится предлагать новое устройство и мою текущую линейку любимых процессоров это процессоры STM32 Cortex ARM от STMicroelectronics.
Добавление устройств из чистого металла. Чтобы добавить «голое железо»: выберите «Инструменты»> «Параметры»> «Устройства»> «Добавить»> «Голое металлическое устройство»> «Запустить мастер». В поле Поставщик сервера отладки выберите поставщика сервера отладки. Выберите Применить, чтобы добавить устройство. Сборка и запуск на неизолированных металлических устройствах. Чтобы добавить комплект для создания приложений и их запуска на голом …
16 июня 2019 г. ·> Интересно, что STM32, кажется, поддерживает автоматическое определение скорости передачи по умолчанию. Что ж, это «виртуальный UART», по крайней мере, для ПК.Это означает, что данные передаются напрямую между ПК и MCU. Так как UART не задействован, настройки бессмысленны. Вся библиотека STM32 выпущена в ANSI C и CMSIS, поэтому можно ли использовать ее во всех C-Compiler (IDE). Цепочка инструментов, напрямую поддерживаемая STM, также содержит собственные файлы конфигурации. Бесплатная IDE для STM32. CUBE-MX или CUBE-IDE — это конфигуратор и / или camplete IDE, также для отладки (CUBE-IDE) и библиотека для всех STM32
Polaris ranger xp 1000 premium specs
xtensa-esp32-elf-gcc -8.2.0nb4: Cross GCC для среды Espressif ESP32 bare metal: xtensa-lx106-elf-binutils-2.31_201
nb1: Cross binutils для среды Espressif ESP8266 bare metal: xtensa-lx106-elf-gcc-4.8.2nb1: Cross GCC for Espressif ESP82 металлическая среда [
Проект на базе STM32 в основном предназначен для студентов и любителей. Цель проекта STM32-base — предоставить простой и легкий в использовании базовый проект для изучения и экспериментов с микроконтроллерами STM32. Еще одна важная часть проекта STM32-base — это раздел платы разработки на этом веб-сайте.Этот раздел почти превратился в …
17 ноября 2020 г. · Bare-Metal STM32: от Power-Up до Hello World Steve 17 ноября 2020 г. Некоторые могут спросить, зачем вам программировать микроконтроллер Cortex-M, такой как STM32 не использует ничего, кроме набора инструментов ARM и предоставленных ST Microelectronics таблицы данных и справочного руководства. Парень, мне нужно отключить прерывания до того, как устройство покажет векторный скачок, показанный ниже, с помощью инструкции «cpsid if».
Rumus 2d sidney
Следует также упомянуть любые крупные темы в stm32 и ссылки на связанные темы.Поскольку документация для stm32 является новой, вам может потребоваться создать начальные версии этих связанных тем. Что такое STM32? STM32 — это семейство 32-разрядных флэш-микроконтроллеров, разработанных ST Microelectronics. Он основан на
29 июля 2018 г. · Таймер STM32. Таймер STM32 (также сокращенно TIM) — это периферийное устройство, которое позволяет генерировать сигналы ШИМ на оборудовании, и это означает, что после настройки и запуска таймера он может генерировать сигнал ШИМ на определенном выходном PIN-коде без вмешательства программного обеспечения.На самом деле таймер общего назначения STM32 — это периферийное устройство …
28 июня, 2020 · Программирование STM32 «на чистом металле» (часть 11): использование внешней памяти Современные микроконтроллеры просто великолепны. Они намного быстрее и дешевле, чем процессоры, которые использовались в «настоящих» компьютерах несколько десятилетий назад, а также очень энергоэффективны. Запись драйверов прерывания с использованием встроенного ПО без ОС Записать драйверы SPI с использованием встроенного ПО с использованием встроенного ПО Запись драйверов I2C с использованием встроенного ПО с ОС ARM-Cortex Требования стандарта CMSIS Опыт программирования не требуется — я научу вас всему, что вам нужно нужно знать.Мы будем использовать Keil uVision 5 IDE и набор инструментов, которые БЕСПЛАТНЫ …
Intitle index of bank account
31 декабря 2014 г. · Плата: MicroZed 7020 ОС: Win7 Vivado 2014.4 Привет, у меня работает приложение AMP два голых металла. Я хотел бы использовать SPI (общие периферийные прерывания), но я не могу найти ни одного примера инициализации в этой конфигурации (голое железо / голое железо). Я бы хотел, чтобы CPU1 обрабатывал некоторые SPI inte …
RE: Обработка прерываний из чистого металла, работающая только в отладчике — добавлено Александром Лопесом более 5 лет назад Я теперь думаю, что мне, возможно, придется использовать версию компоновщика без хоста скрипт (хотя он отлично работал для компиляции программ без обработчиков прерываний).
Сначала я тестировал комбинацию OpenOCD / JLink / STM32 и мог сканировать плату. Нашел несколько полезных руководств по ARM на embedds.com по сценариям компоновщика и коду запуска. Я тестирую Debian «голый металл» GCC. Сборка, objdump и т. Д. Работают как обычно. Gdb также успешно работает и взаимодействует с OpenOCD. OpenOCD также должен поддерживать STLink. 18 сентября 2020 г. · Начало работы с платой разработки STM32F103C8T6 STM32. Arduino — первая плата для многих, когда они начинали заниматься электроникой.Но когда мы углубляемся, мы понимаем, что Arduino — это не промышленная плата для разработки, а ее 8-битный процессор со смехотворно медленной тактовой частотой и, возможно, не подходит для проектов более высокого уровня.
Книга генерального подрядчика pdf
Вниз по голой металлической кроличьей норе STM32 Введение. Этот репозиторий представляет собой набор моих проектов кода, поскольку я изучаю аспекты программирования микроконтроллера STM32F103C8 Cortex M3 на уровне регистров «голого металла». Я буду создавать пример кода для большинства аспектов микроконтроллера, включая SPI, USART, I2C, DMA и т. Д.
10 августа 2015 г. · После удаления винтов вам нужно будет приподнять верхнюю крышку с нижней части приборной панели, поскольку она надежно приклеена на место. Я обнаружил, что воткнуть большую плоскую отвертку в паз между двумя половинками корпуса и медленно повернуть ее, вдавливая внутрь, было самым быстрым способом разделить половинки корпуса. Обратите внимание, что за исключением
Проект на базе STM32 в основном предназначен для студентов и любителей. Цель проекта STM32-base — предоставить простой и легкий в использовании базовый проект для изучения и экспериментов с микроконтроллерами STM32.Еще одна важная часть проекта STM32-base — это раздел платы разработки на этом веб-сайте. Этот раздел почти превратился в … Семинар STM32 — Экосистема безопасности STM32 Октябрь 2020 20.10.2020 STM32 и Cartesiam: для мониторинга оборудования и прочего (ИИ, нейронные сети и профилактическое обслуживание) 16.10.2020 STMicroelectronics приобретает усилитель мощности и RF Специалист по переднему модулю SOMOS Semiconductor 16/10/2020
Руководство по установке Vxrail
Программирование Bare Metal STM32 и пробуждение квадрокоптеров.2019-03-05 — Тим Шумахер ПРОГРАММИРОВАНИЕ КВАДРОКОПТЕРА. В прошлом году я получил квадрокоптер Crazepony Mini и совсем недавно понял, как его программировать. Я покажу свой прогресс в этом посте, и он также будет служить руководством для начала программирования микроконтроллеров STM32. Мы будем …
В аппаратном обеспечении («голом железе») требуется всего несколько циклов, чтобы перейти к началу процедуры / функции обработчика прерывания, верно? Если я правильно интерпретирую, на новом Raspberry Pi 4 это должно занять менее 10 наносекунд.Меня больше всего интересует Raspberry Pis и другое оборудование на базе ARM, но данные для других платформ также были бы полезны.
STM32 без покрытия — это просто. … Я написал сообщение, объясняющее, почему минимальные знания программирования на голом железе необходимы для … / * Вектор процедуры обслуживания прерывания … 15 января 2019 г. · Если вы не обрабатываете прерывание по таймеру запуска АЦП, начинать его с HAL_TIM_Base_Start будет более правильным. 2. В качестве подтверждения моей личной ошибки и, возможно, полезно поделиться с будущим читателем, что последовательность инициализации TIM и DMA должна быть в правильном порядке, что сначала следует DMA, а затем следует TIM, иначе записана последовательность обратного вызова DMA…
Cura tazbot
В x86 поддержка прерываний означает настройку таблиц дескрипторов прерываний ЦП и программирование контроллера прерываний. Так как ядра ядра не поддерживают прерывания, нам, кроме того, нужна небольшая заглушка прерывания, которая передает запрос прерывания в контекст потока, который вызывает ядро ядра.
9 сентября 2018 г. · NMI («Немаскируемое прерывание») — это прерывание, управляемое аппаратными средствами, во многом схожее с прерываниями от PIC, но NMI передается либо непосредственно в ЦП, либо через другой контроллер (например.g., ISP) — в этом случае вы можете их замаскировать. О. NMI возникает из-за ошибок ОЗУ и неисправимых проблем с оборудованием.
xtensa-esp32-elf-gcc-8.2.0nb4: Перекрестный GCC для среды Espressif ESP32 без оболочки: xtensa-lx106-elf-binutils-2.31_201
nb1: Перекрестные binutils для среды без оболочки Espressif ESP8266: xtensfa-lx106-el -4.8.2nb1: Cross GCC для среды Espressif ESP8266 «голый металл» [
Как заменить датчик o2 на Ford Expedition
Стенд для стрельбы из деревянной катушки
Nobsound высокоточный регулятор громкости пассивного предусилителя
9000ascript
USB-устройство
Wow escapeance tank
1993 chevy 454 двигатель для автодома
Angka main hk 3d
Ertugrul сезон 1 эпизод 51
Federal Sprinter 9182 115186 грузовой фургон напрокат атланта боеприпасы для стрельбы по мишеням
Как использовать масштабирование фона без зеленого экрана
Как носить cals in roblox 2020
трафик полиции Милуоки
Ephesians 2 8 10
Тест модуля 2 b (для темы 5 7)
Утилита восстановления Chromebook не может распаковать файл Minzip
установка mka 51
Шрифт Azonix
Плотность — это интенсивное свойство
Звуковые эффекты в обстановке войны
Elmerpercent27s Color Change Wood Filler
9185 Cef field mapping
.4 цена обновления
Stm32h7 uart dma
タ グ stm32, uart, dma, hal.プ ッ シ ュ ボ タ ン が 押 さ れ る た び に 単 純 な 文字 列 を 送信 す る た め に ДМА モ ー ド で УАПП を 実 装 し よ う と し て い ま す. そ の た め, CubeMX を 使用 し て コ ー ド を 生成 し, УАПП 2 TX ПДП を ノ ー マ ル (循環 で は な い)モ ー ド に 設定 し 、 FIFO も バ ー ス ト も な し に 設定 し ま コ ー ド を デ バ ッ デ バ ッ … DMA на STM32H7 — это чудовище, с каждым постепенным улучшением, поскольку их оборудование лучше представлено другим интерфейсом. Есть BDMA, обычный DMA и, наконец, MDMA. Основная часть, используемая для доступа к GPIO, — это обычный DMA.
2007 Buick lucerne дверь не открывается
STM32H750VB STM32H750IB STM32H750XB.• 3 × PLL (1 для системных часов, 2 для тактовых импульсов ядра) с дробным режимом. Матрица межсоединений. • 3 матрицы шин (1 AXI и 2 AHB) • Мосты (5 × AHB2-APB, 2 × AXI2-AHB). 4 контроллера DMA для разгрузки процессора. • 1 × мастер высокоскоростной прямой доступ к памяти … お 得 な ク ー ポ ン 発 行 中! ヨ ー ロ ッ パ で 親 し ま れ て い る 敷 革 製品. カ ウ ハ イ ド CowhideM サ イ ズ (4 平米) 【P10】 [沖 縄 · 北海道 配送 不可]
Массив в servicenow
Мы также представим контроллер прямого доступа к памяти (DMA), чтобы продемонстрировать, как вы можете справиться с перемещением (относительно). Демонстрация 2: DMA с UART.Если мы хотим получить несколько показаний АЦП для заполнения буфера без вмешательства ЦП, то создайте новый проект STM32 и в разделе System Core выберите DMA. Пример программы STM32 USART_Irq показывает, как настроить и использовать USART1 микроконтроллера STMicroelectronics STM32F103xx в прерывании управляемый режим. MCBSTM32, где программа запускается из внутренней флэш-памяти, расположенной на микроконтроллере.
Chrome скачать
STM32H7 HAL の HAL_I2C_Transmit_IT () 関 数 に 不 具 合 が 有 り ま す. I2C バ ス 仕 様 で は, I2C バ ス の 指定 ア ド レ ス に デ バ イ ス が な い 場合 と デ バ イ ス が NAK 応 答 を 返 し た 場合 を 区別で き ま せ ん. 言 い 換 え る と, デ バ イ ス が な い 場合, マ ス タ ー は NAK 応 答 と し て 処理 す る こ と に な り ま す. • 32-битный ARM® 32-битный Cortex®-М4 ядро с FPU, Адаптивная в режиме реального времени акселератора (АРТ ускоритель ™) STM32H747xI /ГРАММ.Управление часами. • Внутренние генераторы: 64 МГц HSI, 48 МГц HSI48, 4 МГц CSI, 32 кГц LSI. — Четыре USART, четыре UART и один LPUART — Шесть SPI, три I2S в полудуплексном режиме.
Учебник для 11 класса по естествознанию
Как передавать данные в uart с помощью опроса, прерывания и прямого доступа к памяти в STM32. Я сделаю еще одно видео о получении данных с использованием всего этого. подробности посетите htt … Сбой компиляции STM32H7 для I2C4 7 месяцев назад Джованни Ди Сирио изменил билет № 1088.Недопустимая настройка CHSEL DMA в драйверах STM32 UART 7 месяцев назад Джованни Ди Сирио создал билет № 1088. Недопустимая настройка CHSEL DMA в драйверах STM32 UART 7 месяцев назад Джованни Ди Сирио создал билет № 1087. Неопределенное предупреждение TEST_CFG_SIZE_REPORT
Kosher ralphs
DMA 方式 HAL_UART_Transmit_DMA HAL_UART_Receive_DMA 如下 a。 Настройка многоканального преобразования АЦП с записью DMA.Напишем пример, в котором мы будем считывать первые 8 каналов АЦП четыре раза в режиме сканирования. Затем мы вычисляем среднее значение для каждого канала, а затем выводим результаты на экран терминала с помощью UART. Мы будем записывать значения АЦП в память, используя канал DMA.
Кнопка питания Emc unity
DMA (прямой доступ к памяти), ЦП дан bağımsız olarak veri transferi yapmaya yarayan donanımdır. RAM’ın bir bölgesinde yer alan verileri RAM’ın bir diğer bölgesine, RAM’ın bir bölgesindeki verileri çevre biriminin bir registerine yada ardışıl registerlerine yada bir çevre biriminin bir registerindeniada ardışı… こ の 記事 は Рождественский календарь stm32 2017 10 日 目 の 投稿 で す.自 分 が 普 段 よ く 使 う HAL の 関 数 に つ い て, 使 い 方 を 忘 れ て も こ こ を 見 れ ば わ か る よ う 備忘録 が わ り に 記 し て い き ま す. GPIO 関 数 HAL_GPIO_WritePin (GPIO_TypeDef * GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState) ヘ ッ ダ stm32f4xx_hal_gpio.h 型 名 недействительными機能 Pinstate (High: GPIO_PIN …
щенков таксы в casper wy
STM32H7 在 RT-Thread 的 多 内存 使用 方法. 一 STM32H7 RAM STM32H7 RAM很多.必须 对 多 RAM 进行 管理 , 要么 自己 去 实现 内存 管理 , 要么…
Этот набор исправлений добавляет поддержку мультиплексора DMA STM32. Это позволяет отображать любой запрос DMA от периферии к любому каналу DMA продукта. Этот IP был представлен с SoC STM32H7. — История версий: v4: * Добавить возможность работы с несколькими мастерами для STM32 DMAMUX * Избавиться от свойства st, dmamux и настраиваемого API между STM32
Lottery Triple trigger chart
今天 给 大家 分享 关于 stm32 关于 uart 一些 新 特性 ,针对 较 新 系列 stm32 (如 : stm32h7 、 g0 、 g4 等) 的 uart , 可 通过 软件 改变 rx 和 tx 引脚 、 高低 反 序 介绍。 支持 rxd 和 txd 管脚.时候 , 我们 在 外接 rs232 芯片 时 , 可能 会将 rxd 和 txd 两根 线 接。
但是 在 网上 的 资料 往往 都是 一篇 文章 被 转 转 基本上 空闲 DMA的 实践 , dma , 只 用 空闲 中段 加 接收 完成 中段 就 可以 完成 接收 一 帧 不定 的 的 数据。 我 试验 的 stm32F407 , hal stm32 都…
Сервер SQL перенаправляет вывод в файл
Инструмент Tcs для поддержки непрерывной доставки, включая DevOps
Разъем лебедки Stormworks не работает
Пакет текстур Cooldude v2
Организатор прогулки в шкафу
Алгоритм Евклидова расстояния
Как готовить красная киноа в микроволновке
stm32, прерывание uart, TureSTUDIO. Ошибка автора темы 13. Дата начала 16 апреля 2019 г. Просто погуглите stm32 SPL, похоже, то, что мне нужно. Я прочитаю руководство.Спасибо за указатель. Насколько я понимаю, при использовании DMA никакие пакеты не теряются.
У серии STM32F7 есть ошибки на UART и I2C. Некоторые из ошибок STM32F7 даже включают ошибки в самом ядре ARM, и вам нужно перейти на веб-сайт ARM для получения подробной информации. Написав исправления для обоих продуктов MZ (EC и EF) и обновленных для продуктов MX, я знаю, что нет таких, которые напрямую связаны с самим ядром MIPS.
Очевидно, я что-то здесь упускаю, но в настоящее время не вижу, что именно.Я надеюсь, что кто-то заметит оплошность. Я использую все шесть USART / UART с DMA Tx на STM32F205. У меня есть общая инициатива …
st-link に つ な が っ て い る usart の ピ ン と 割 り 込 み ・ dma の 設定 を 行。 回路 図 を 調 べ る. нуклео 基板 の 回路 図 か ら 、 使用 し て 基板 の 回路 図 を 調 べ nucleo-f072rb 基板 の 回路 図 の 抜 粋 。st-link に つ っ て
20.03.2017 stm32 中 串口 dma 实验 里 , 为什么 选择 通道 4 (选择 串口 的 发 … 1 2019-03-05 STM32F4 DMA 接收 串口 定 长 数据 , 每秒 来 … 更多 类似 问题>
Matlab cad import
Напишите абзац о вашем последнем отпуске в тетради
Частные владельцы, которые принимают плохой кредит рядом со мной
Вопросы по библейской игре
Проверка прогресса установки 5 mcq ap bio
Индекс Моргана Стэнли
Если есть python pandas
Soap-клиент с прокси java
Плагин Headshot для создания персонажей 3
Танцующий какаду
Статус USPS таможенного оформления
Тоническая солфа песен поклонения
Универсальный пульт дистанционного управления для приемника onkyo2
32 9 Управление доступом через Интернет Как отформатировать samsung ssd 860 evo для mac
Игры Space Mining онлайн
Samsung tu7000 против lg un7300
Tcl a1x извлечение батареи
Faxon lightweight bcg review
Заброшенные безэмоциональные фанфики про Наруто
Newyall качество автозапчастей
дизайн движение
9 0002
Сколько молей воды (г) образуется при 2.0 молей nh4 (g) реагируют полностью
Похороны commonlit answers
Springfield model 18 series f 410 clip
Rotate image matlab function
6
classic
Sitemap_2019_10.xml
Samsung ssd 970 evo plus цена за 1 тб
Edward the blue engine rws
Ответ на последовательные целочисленные задачи ключ
Efm32 пример uart
Efm32 пример uart
Перейти к основному содержанию
Efm32, пример uart
efm32 uart, пример 1 (стр.Он поддерживает полнодуплексную асинхронную связь UART, а также RS-485, SPI, MicroWire и 3-проводную связь. Загрузка программного обеспечения Simplicity Studio € — € Предоставляет обширную документацию для всех устройств EFM32 и примеры кода с использованием emlib • Отображение текущего потребления EFM32 MCU в реальном времени. С уникальной комбинацией мощной 32-битной ARM Cortex- В этом видео я показываю: 1. Обзор стартового набора EFM32 Pearl Gecko показан на рисунке ниже. Свяжите вывод DATA с узлом соединения.Микроконтроллеры EFM32 Pearl Gecko хорошо подходят для любых приложений с батарейным питанием, а также для других систем, требующих высокой производительности и низкого энергопотребления. 2. Бесплатная доставка на следующий день. Например, с помощью магнитного датчика Холла EFM32 может преобразовывать вращательное положение в количественную скорость или расход. USART имеет широкий выбор режимов работы, форматов кадров и скоростей передачи. На этот раз мы должны получить приглашение загрузчика без необходимости нажимать U (это нажатие клавиши « U » необходимо только на физическом UART, а не на виртуальном USB; простого подключения к виртуальному USB достаточно, чтобы указать загрузчику, что оставшаяся часть взаимодействие загрузчика должно происходить через виртуальное USB-устройство. Приобретите Silicon Labs, изолированный оценочный комплект USB с USB-портом для платы расширения UART для изолированного USB-EK для EFM8 и EFM32 Starter Isolated-USB-EK.Простой пример Bluetooth Arduino с использованием телефона Android для подключения и переключения светодиода C8051 EFM32. JP2 соединяет UART TX и UART RX вместе, обеспечивая возвратную петлю. Вот пример отправляемой строки: 0. Встроенный, uart через usb для микроконтроллера stm32. Периферийные устройства EFM32 могут использоваться в EM2 и EM3 со сверхнизким энергопотреблением: например, DMA можно использовать в режиме EM2 с MCU в режиме 900 нА !! … Самые энергосберегающие микроконтроллеры и радиоприемники в мире 1. UART — это полнодуплексный асинхронный канал связи, который обменивается данными с периферийными устройствами и персональными компьютерами с использованием таких протоколов, как RS-232, RS-485, LIN и IrDA®.c * Это пример, который описывает шаги по созданию примера приложения, которое * настраивает АЦП для запуска преобразования по триггеру GIO и отображения его через uart. Один — отладка энергопотребления, второй — дешевые EFM32 STK на Mouser. Загрузчик может быть идеальным примером. Введение в универсальный асинхронный приемник / передатчик UART или UART для краткости представляет собой аппаратную схему (модуль), используемую для последовательной связи. Разнообразные разъемы на Dronecode Probe обеспечивают мгновенное аппаратное соединение с большинством аппаратных средств, совместимых с Dronecode. 8) Откройте Minicom с 115200 8n1 и снова полностью отключенным управлением потоком.Эти флаги можно сбросить или установить только аппаратно. 2. Он поддерживает две платы EFM32, EFM32GG-STK3700 и EFM32GG-DK3750. Я реализовал клиент MODBUS (Примеры / modbus_client. Cortex-M0 — симпатичный зверь с одноцикловым целочисленным множителем. EFM32 Giant Gecko Проблемы USART Опубликовано richdinoso 5 апреля 2017 г. 12 января 2021 г. · Также мы обсудили настройки UART и как данные передаются между 2 устройствами. M3 Пример: среднее потребление тока было снижено с 550 мкА до 170 мкА (Wonder Gecko) Эффективные режимы энергопотребления, низкоэнергетический UART и периферийная рефлексная система устройства делают EFM32 идеальным контроллером для электронной бумаги Приложения.26. Он поддерживает полнодуплексную асинхронную связь UART, а также RS-485, SPI, MicroWire и 3-проводную связь. 1. Требуется ли дополнительная настройка порта usart перед его использованием в качестве uart. * * * @b Step @b 1: * Бесплатная загрузка библиотеки avr uart. EFM32GG11 включает мощный 32-битный ARM® Cortex®-M4 и обеспечивает надежную защиту. Я настоятельно рекомендую вам ознакомиться с главой 12. Каждая буква или число, отправленное через UART, находится в ASCII, поэтому, если будет отправлено число 0, чтение UART будет читать десятичное число 48, которое равно 0 в ASCII.(CONFIG_SERIAL_EFM32_UART) + = efm32-uart. 3. Драйвер не буферизует и не ставит данные в очередь, но ставит в очередь операции передачи и приема UART. Следующие ниже примеры программного обеспечения демонстрируют способ достижения полной связи UART с использованием функциональности LEUART EFM32. Чтобы изменить целевую плату, перейдите в Project -> Properties -> C / C ++ Build -> Board / Part / SDK. Вы можете оценивать примеры, чтобы помочь нам улучшить их качество. • Через собственный USB-регулятор EFM32. Прерывание асинхронно по отношению к текущему главному процессу.Для беспроводного обновления доступны примеры проектов, просто выполните поиск в верхней части этой страницы, но имейте в виду: могут потребоваться некоторые меры предосторожности (EEProm / Ram), чтобы сделать его надежным, не оставив клиента с нефункционирующим устройством. 22 апреля 2016 г. · Пример скетча Arduino hc-06 для подключения к телефону Android. • Примеры программного обеспечения для EFM32GG11, UART и шины I2C доступны в фиксированных местах на разъеме. • Загрузка и запуск примеров приложений, хранящихся в комплекте. Например, чтобы сделать удобочитаемые значения показаний АЦП (с поправкой на делители усиления или напряжения).EFM32GG12 включает мощный 32-битный ARM® Cortex®-M4 и обеспечивает надежную безопасность Привет всем, я здесь новичок, на данный момент я прохожу стажировку, и я работаю над iot-проектом, который служит для считывания различных измерений из sdi-12 с кораблем EFM32, проект, над которым я сейчас работаю, — это интерфейс между выводами uart tx и rx, которые дают 3. Рисунок 25 января 2017 г. · Например, у вас не будет проблем с передачей данных, если ваши два оба устройства связи работают со скоростью 9800 бод, даже если ожидаемая скорость (исходя из номинальной тактовой частоты) составляет 9600 бод.Я пытался реализовать базовое побайтовое прерывание UART Rx на плате STM32F4, используя скелетный код HAL, сгенерированный STMCubeMX версии 4. 0 USART / UART — асинхронный режим AN0045 — Примечание по применению В этом примечании к приложению описывается, как настроить EFM32 UART или USART для работы в асинхронном режиме. Это означает, что LEUART может выполнять полную связь по UART, даже когда устройство находится в режиме глубокого сна EM2. Я нашел решение, непростой способ, на который пришлось потратить несколько часов, но я хотел бы поместить этот пример в блог, чтобы каждый мог его использовать или понять, 25 октября 2019 г. · UART означает «Универсальный асинхронный приемник / передатчик» , и это очень простой интерфейс последовательной связи.Примеры проектов настроены для EFM32G890F128, но могут быть легко перенесены на другие устройства EFM32, изменив настройки проекта. Вы можете оценивать примеры, чтобы помочь нам улучшить их качество. LTO очень легко включить, но есть некоторые небольшие особенности, о которых необходимо позаботиться. Энергосберегающие микроконтроллеры EFM32 идеально подходят для приложений со сверхнизким энергопотреблением. COM4 (в Windows) или / dev / ttyACM1 (в Linux) — это физический интерфейс UART, который можно использовать для взаимодействия с целевым семейством EFM32 Pearl Gecko. Спецификация семейства EFM32PG12. Микроконтроллеры EFM32 Pearl Gecko — самые энергоемкие в мире. дружественные микроконтроллеры.1. Может быть много ошибок синтаксического анализа. Пример потока rs485_isolated Пример успешно показывает, как изолировать два STK MCU друг от друга. Для масштабирования без использования чисел с плавающей запятой необходимы две операции — умножение и деление. Выбор источника питания осуществляется с помощью ползункового переключателя в нижнем левом углу платы. 3 Примеры приложений В папке EFM32_Gxxx_STK / examples в каталоге установки вы найдете пример программы, использующей BSP, с соответствующими файлами проекта / Makefiles для поддерживаемых IDE.Загрузите пример на устройство ToolStick, которое использует связь UART. Последовательный протокол BGAPI обеспечивает точно такие же интерфейсы Bluetooth API через UART, что и BGAPI API, при использовании в автономном режиме. В этом примере связь LEUART инициализируется с использованием DMA для передачи полученных данных из регистра приема LEUART в системную память. Вы можете отключить прерывание половинной передачи, сбросив бит HTIE в регистре DMA_SxCR. Infineon. Затем в разделе «Поддержка SPI» включите STM32 SPI Controller (CONFIG_SPI_STM32 в конфигурации ядра) :.Этот пример представляет собой самое простое устройство USB, которое только можно вообразить. EFM32 имеет два LEUART, которым требуется только 32. 3. Источник тактовой частоты 768 кГц необходим для обеспечения связи UART со скоростью до 9600 бод / с. Дизайн и реализация LEUART были объяснены в следующих разделах. EFM32 имеет два LEUART, которым требуется только 32. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 Используя виртуальный прибор с доступными байтами UART, мы можем увидеть, сколько байтов находится в последовательном буфере.USART имеет широкий выбор режимов работы, форматов кадров и скоростей передачи. Пытаюсь переехать. 2.. • Отображение потребления тока микроконтроллером EFM32 в реальном времени. Вы должны изменить функциональность, чтобы что-то сделать с полученным символом и отправить обратно информацию, которую вы хотите, а не просто эхо полученного символа. ) Уровни абстракции без сохранения состояния и транзакций Минимальные взаимозависимости Протестировано на всех аппаратных платформах Примеры проектов IDE Демонстрация API-интерфейсов драйверов периферийных устройств MCUXpresso SDK 9 CMSIS-CORE и CMSIS-DSP Аппаратные стеки / промежуточное ПО для микроконтроллеров Поддержка платы Программного обеспечения Код приложения RTOS Пример драйверов периферийных устройств MPU-9250 Драйвер и драйверы MPU-9250 Прошивка Sensor Fusion доступна для использования с smWSP и любым начальным комплектом Silicon Labs EFM32.9. Спасибо, PM_Dialog Tue, 2019-01-22 20:53 Sep 06, 2019 · EFM32 Pearl Gecko Starter Kit Вот пример для Hello. Следующий подход можно использовать, когда приложение должно использовать более одного UART на март. 27, 2016 · Универсальный асинхронный прием / передача (UART) — жизненно важный протокол связи, который относительно легко настроить и использовать. MPU-9250 также представлен в модуле слияния датчиков 12 степеней свободы с поддержкой Bluetooth, smSFM1, разработанном Sensor Maestros, который можно использовать для разработки пользовательских приложений слияния датчиков.Управляющий MCU может действовать как контроллер платы (BC). Этот тег также контролирует, должен ли порт UART giv-en предоставлять уровень BGAPI как точку управления хостом. Этот проект настраивает UART на скорость 115200 бод, 8 / N / 1, без управления потоком и с включенным BGAPI. IDE и терминал ToolStick не могут одновременно связываться с дочерней платой. C ++ (Cpp) LEUART_Rx — найдено 3 примера. Перепрограммирование приложения на EFM32-STK3800 ¶ В этом примере используется образец приложения Hello World. exe прилагается к примеру.В этом примере программного обеспечения реализована демонстрация USB CDC. Таким образом, вы можете настроить один USART в асинхронный режим и подключить EFM32 к вашему ПК с помощью внешнего моста USB / UART e. 15 февраля 2021 г. · в сообщение о фиксации и, возможно, предоставить пример того, как это будет использоваться в командной строке ядра. com / site / index. 4 Как включить в свои собственные приложения Самый простой способ включить BSP в ваше приложение — это основывать свою работу на примере семейства EFM32 Giant Gecko Series 1. Спецификация семейства EFM32GG12. Микроконтроллеры EFM32 Giant Gecko Series 1 являются самыми энергоэффективными в мире. микроконтроллеры с новыми интерфейсами подключения и функциями пользовательского интерфейса.Когда bc_en низкий, bc_tx и bc_rx могут использоваться другими приложениями. • Выбор режима отладки (IN / OUT / MCU / OFF) Поскольку TFT-дисплей и клавиши используются совместно контроллером платы и EFM32, отдельный О нет! Не удалось загрузить некоторые стили. Страница создана 2020-10-14 09:35 EST. Однако, когда я хочу использовать функцию прерывания, она больше не работает. 1. Cortex-M3 (EnergyMicro) Я добавил массив указателей в верхнюю часть стека для каждой задачи в целях отладки (некоторые из задач остаются неизменными).11 — clocks: переход к входным часам 12 13 Периферийные часы, обеспечивающие питание, также могут быть обработаны, для чего требуется второе свойство 14 — clock-names: кортеж, перечисляющий имена входных часов. Цель этой магистерской диссертации — заставить FreeRTOS работать на микроконтроллере EFM32 с максимально низким энергопотреблением. Он может быть закодирован строго программно с использованием выводов ввода-вывода общего назначения, обычно называемых битовыми, или может быть реализован аппаратно. Этот клиент MODBUS не зависит от поставщика, и примеры использования клиента для каждого поставщика находятся в соответствующем каталоге (EFM32 / modbus_efm32.На следующей диаграмме показана основная процедура синхронизации, используемая для приема UART. Сообщите здесь, если что-нибудь в демоверсии нуждается в обновлении. c, STM32 / modbus_stm32. Прилагаемый пример программного обеспечения для EFM32GG-DK3750 Giant Gecko Development Kit показывает, как реализовать управляемый прерыванием прием и передачу с использованием встроенного приемопередатчика RS-232. 14 ноября 2007 г. · Например, когда приложение должно взаимодействовать с устройством 1, программа сопоставляет аппаратный UART с выводами RP1 и RP2. EFM32 LEUART — это уникальный низкоэнергетический UART, который предлагает двустороннюю связь при очень жестком бюджете мощности — всего 32.Он поддерживает две платы EFM32, EFM32GG-STK3700 и EFM32GG-DK3750. Мы покажем, как использовать прямой режим, режим на основе прерывания и режим, управляемый DMA, и будем использовать логический анализатор для сравнения точных таймингов различных событий. 11. Какие параметры доступны с загрузчиком STM32 Bootloader2. Пример получения драйвера STM32 HAL с прерыванием. 1 * Synopsys DesignWare ABP UART 2 3 Необходимые свойства: 4 — совместимость: «snps, dw-apb-uart» 5 — reg: смещение и длина регистра, установленного для устройства.EFM32PG1 оснащен мощным 32-битным ARM® Cortex®-M4 и широким выбором периферийных устройств, включая уникальный криптографический аппаратный механизм, поддерживающий AES, ECC и SHA. Примеры программного обеспечения EFM32. Его можно использовать, например, для воспроизведения любого звука или создания модулятора для модема. Источник тактовой частоты 768 кГц для обеспечения связи UART со скоростью до 9600 бод / с. Модуль также поддерживает функцию. Для опытных пользователей это средство можно использовать для управления внешним приемопередатчиком RS485, для обмена данными по RS485 через совместно используемую среду (полудуплекс), но он также может, например, управлять светодиодом активности UART.Это лучшие примеры C ++ (Cpp) ITM_SendChar из реального мира, полученные из проектов с открытым исходным кодом. EFM32 Pearl Gecko MCU 128 x 128 пикселей ЖК-дисплей с памятью SPI Si7021 Датчик температуры и влажности Заголовок EXP GPIO I2C GPIO Пользовательские кнопки и светодиоды Емкость Тачпады Контроллер платы ACMP Разъем USB Mini-B DEBUG UART Рис. 2. Проблема с демонстрацией FreeRTOS на EFM32 DK Nov 23 февраля 2020 г. · Трассировка в реальном времени Serial Wire Viewer (SWV) поддерживается устройствами Cortex-M (такими как STM32, Kinetis, LPC, EFM32 и т. Д.)Тактовая частота 768 кГц и специальные функции для связи без вмешательства процессора. Эта функция не может сбросить автоматически сброшенный флаг. Отключитесь от устройства в Simplicity IDE. EFM32 LEUART — это низкоэнергетический UART, который обеспечивает передачу и прием данных при минимальном потреблении энергии. Блок-схема комплекта UG154: EFM32 Pearl Gecko CORTEXM3_EFM32_MICRO. 32-разрядные микроконтроллеры (MCU) EFM32 ™ PG22 Семейство 32-разрядных микроконтроллеров (MCU) EFM32PG22 — это версия отмеченной наградами беспроводной платформы SoC EFR32xG22 (BG22, MG22 и FG22), совместимой только с выводами и программным обеспечением MCU.Он также может взаимодействовать со смарт-картами ISO7816 и устройствами IrDA. Основанные на ядрах ARM ®Cortex -M0 +, Cortex-M3 и Cortex-M4, микроконтроллеры Gecko также включают в себя наиболее энергоэффективные периферийные устройства. 13 мая 2013 г. · Как и в случае с другими микроконтроллерами EFM32, разработка Gecko может выполняться с помощью Simplicity Studio, небольшой работающей программы. как в Windows, так и с некоторыми ограничениями в Linux, который загружает документацию, таблицы данных и образцы кода, а также устанавливает инструменты отладки, помогающие измерять энергопотребление, загружая микропрограммное обеспечение в целевой объект и различные инструменты проектирования, которые могут помочь. Например, процессор находится в спящем режиме до тех пор, пока он получает некоторые последовательные данные от UART (последовательный), чтобы загорелся светодиод./ ** @example example_adcDisplay. Когда я повторяю RX в TX в цикле while (1) в моей основной функции, он работает. Я надеялся использовать ардуино, чтобы просто отвечать на любые написанные мной команды. В этом примере программного обеспечения реализована демонстрация USB CDC. Этот модуль содержит функции для управления периферийным устройством LEUART 32-разрядных микроконтроллеров и систем на кристалле Silicon Labs. Чтобы включить драйвер в конфигурации ядра, запустите make kmenuconfig, перейдите в раздел «Драйверы устройств» и включите поддержку SPI. 32-разрядные микроконтроллеры (MCU) EFM32 ™ Энергосберегающие микроконтроллеры EFM32 идеально подходят для приложений со сверхнизким энергопотреблением.C8051 EFM32. Никогда больше не пишите другой драйвер UART (или, по крайней мере, сэкономьте немного усилий на следующем проекте). MPU-6050 был просто примером; пример использования, который я пытаюсь воспроизвести, — это команда / регистр собственного адреса. Основанные на ядрах ARM® Cortex®-M0 +, Cortex-M3 и Cortex-M4, микроконтроллеры EFM32 также включают наиболее энергоэффективные периферийные устройства и режимы энергопотребления, позволяющие проектировать высокофункциональные системы с низким энергопотреблением. Комплект расширения работает со следующими стартовыми наборами MCU от Silicon Labs: • EFM32 Pearl Gecko PG12 Starter Kit — SLSTK3402A 10 января 2020 г. · Например, хост может представлять отладчик следующим образом: COM3 (в Windows) или / dev / ttyACM0 (в Linux) — это интерфейс GDB.Таким образом, вы можете настроить один USART в асинхронный режим и подключить EFM32 к вашему ПК с помощью внешнего моста USB / UART (например, 7 8 Обработка часов: 9 Тактовая частота входных часов должна быть предоставлена одним из 10 — clock- частота: входная тактовая частота для UART. Затем мы можем использовать чтение UART (массив байтов) для чтения последовательных данных из порта в виде массива байтов. g. EFM32 Giant Gecko Series 1 Family Data Sheet EFM32GG11 Family Data Sheet EFM32 Giant Gecko Микроконтроллеры Series 1 — это самые энергосберегающие микроконтроллеры в мире с новыми интерфейсами для подключения и функциями пользовательского интерфейса.В этом примере программного обеспечения реализована демонстрация USB CDC. USART имеет широкий выбор режимов работы, форматов кадров и скоростей передачи. Все, что вам нужно для создания более взаимосвязанного мира. Это лучшие примеры C ++ (Cpp) для LEUART_Rx из реального мира, извлеченные из проектов с открытым исходным кодом. Dronecode Probe — это универсальный консольный адаптер JTAG / SWD + UART, совместимый с большинством проектов на базе ARM Cortex и, в частности, с оборудованием, поддерживаемым проектом Dronecode. FT232RL). Ниже приведены примеры этих команд, использующих протокол xmodem.• Выбор режима отладки (IN / OUT / MCU / OFF) Поскольку TFT-дисплей и клавиши используются совместно контроллером платы и EFM32, отдельная тема. Но что потребуется, чтобы перенести наш пример mbed для работы на LPC1758? Мы должны вернуться к нашему терминалу и ввести: mbed compile -m LPC1858 -t GCC_ARM Наш код делает то же самое, что и в предыдущем примере, но теперь он больше не зависит от производителя. Пример программного обеспечения, включенный в эту заметку по применению, содержит драйверы и полный стек USB LUFA для EFM32.Я собираюсь использовать все три метода и покажу вам разницу между всеми тремя. Отладка: Нет, для отладки вам понадобится отладчик SWD, такой как на DK или STK. g EFM32 ZZZZZ Энергетические режимы с хорошей архитектурой Ультраэнергетический UART с низким энергопотреблением Полный UART с тактовой частотой 32 кГц 150 нА при 9600 бод / с ЖК-дисплей 20 сентября 2019 г. · Хорошим примером периферийного устройства глубокого сна на EFM32 является интерфейс датчика с низким энергопотреблением (LESENSE) , который может включать индуктивные, емкостные и резистивные датчики в рабочем цикле при автономной работе в режиме глубокого сна.Драйвер UART поддерживает возможности UART периферийных устройств USART, UART и LEUART. Чтобы увидеть, как работает UART и как бесом устанавливается связь UART, попробуйте этот код устройства. На основе версии ядра 3. Я пытался настроить uart на типе EFM32 Starter, и теперь я могу отправлять символы с платы EFM32 Starter kit на компьютер, но когда я пытаюсь получить с компьютера, используя пример , мое прерывание вызывается один раз, но данные, которые я получаю, равны 0x0, а затем после первого символа я больше не получаю прерывание.M4F В 4 раза выше энергопотребление с ARM Cortex M4F по сравнению с 1 Введение Микроконтроллеры EFM32 являются самыми энергосберегающими микроконтроллерами в мире. 25,0. Например, мост USB-UART можно перевести в режим пониженного энергопотребления, подключив Wake к GND. Страница создана 2013-09-03 22:55 EST. Его можно использовать в режиме опроса, как показано в примере ниже: Создано в четверг, 9 марта 2017 г., 20:44:34 для документации по программному обеспечению EFM32 Gecko 1. Драйвер полностью реентерабелен, и несколько экземпляров драйвера могут сосуществовать. Итак, убедитесь, что у вас есть избыточность (например, вы можете потерять байт).Также в проект включен Great Cow Graphical BASIC, редактор на основе значков для программ GCBASIC. Таким образом, оборудование EFM32 предназначено для работы в режиме глубокого сна, называемом EM2, и может ждать входящего кадра UART, потребляя при этом очень мало энергии. 10 Функция для записи в UART и завершения новой строки В дополнение к предыдущей функции эта функция завершает строку с помощью команды новой строки (0x0A) и возврата каретки (0x0D). 19 мая 2018 г. · Я наткнулся на проект, в котором нужно было написать собственный код для UART, я пробовал, или вы можете поискать в Google даже на странице 2, но смог найти любой образец кода или пример.9 следует использовать. (UART / LPUART / LPSCI, SPI / DSPI / LPSPI и т. Д. EFM32 UART Bootloader. 1 В этом документе описывается протокол i2c. 1 Использование генератора разрешено только с лицензией. Это обычная ситуация при измерении расхода воды или тепла. G. I Я сейчас немного в кроличьей норе профилирования энергопотребления системы для небольших микроконтроллеров. EFM32 emlib API € — € Онлайн-документация для функций emlib AN0009 EFM32 Приступая к работе € — € Примечание к приложению, которое предоставляет справочную информацию об устройствах EFM32, Simplicity Studio, и как использовать библиотеки emlib.3 апреля 2012 г. · В эталонном дизайне «EPD-On SK2» используется стандартный стартовый комплект EFM32 Gecko (STK) для обработки функций библиотеки сигналов, передачи изображения через мост USB и UART, управления контроллером чипа на пленке электрофоретического дисплея, и отображение оптимизированного результата. но после нескольких неудачных попыток я решил использовать SoftSerial. COM4 (в Windows) или / dev / ttyACM1 (в Linux) — это физический интерфейс UART, который можно использовать для взаимодействия с целевым приложением (например.Плата AK-CMSIS-DAP JTAG / SWD — это реализация Artekit этого стандарта, работающая на бескварцевых SiLabs Happy Gecko EFM32 Cortex M0 + (EFM32HG308F64G-B-QFN24), с 64 КБ флэш-памяти и 8 КБ ОЗУ, работающей на частоте 25 МГц, полностью открытый исходный код. и открытое оборудование. Микроконтроллеры EFM32 Giant Gecko Series 1 — это самые энергосберегающие микроконтроллеры в мире с новыми интерфейсами для подключения и функциями пользовательского интерфейса. Генерация произвольных сигналов с помощью MCU чрезвычайно полезна. Устройство будет полагаться на драйвер устройства libusb на хосте, хост-приложение EFM32-LedApp.Пример LUFA в примечании к применению AN0861 действительно является нашим единственным примером виртуального COM-порта EFM32 USB-to-UART. Предоставлено несколько примеров программного обеспечения, которые показывают, как использовать DMA с АЦП, UART, SPI и т. Д. Ограничение частоты # Последний шаг для патча Pots — ограничение частоты отправки. Пример: фильтр Kalmann (например, светодиод msp432 rgb, пользовательский светодиод RGB, пользовательские переключатели Zwei (приложение / пробуждение) Verfügbare I / O, die auf Header auf einem 0,1-Zoll (2,54 мм) Растровый, встроенный Программируемые микроконтроллеры ICDI gebracht werden с приложениями: MSP430 LaunchPad с CCS и Grace Это простая программа для чтения байта из клиента i2c под Linux.Центральные подзадачи: 22 марта 2016 г. · UART можно настроить двунаправленным, и вы можете отключить компонент и Hi-Z контакты при необходимости для экономии энергии. Остальные протоколы можно использовать таким же образом. Примеры программного обеспечения EFM32. Как использовать UART 1 ноября 2010 г. · Одним из примеров доступных инструментов является система Advanced Energy Monitoring (AEM), которая является частью стартовых комплектов и комплектов для разработки MCU EFM32 Gecko от Energy Micro. Семейство EFM32 Jade Gecko EFM32JG1 Спецификация MCU EFM32 Jade Gecko — самые энергоэффективные микроконтроллеры в мире.o 01 июля 2013 г. · Посмотрите на примеры, предоставленные с программным обеспечением Studio, чтобы увидеть, как они запускают uart для сравнения. Он написан для Giant Gecko и потребует портирования для Happy Gecko. Если у вас есть какие-либо вопросы относительно связи UART, пожалуйста, используйте раздел комментариев ниже, чтобы задать свои вопросы. Пример программного обеспечения, включенный в эту заметку по применению, содержит драйверы и полный стек USB LUFA для EFM32. и он отвечает за выполнение всей внутренней работы по отношению к UART, необходимой для перезапуска UART после цикла сна.GitHub Gist: мгновенно делитесь кодом, заметками и фрагментами. Серийный интерфейс samsung android, класс устройства связи usb, сетевой драйвер ndis, драйвер usb cdc для розничной продажи android. 0 Простой первый проект Microblaze в Vivado — мигающие светодиоды с символом, полученным через UART. Нажата кнопка Idl e / Start для увеличения или уменьшения символа и передачи символа обновления, полученного символа на экране обновления Рис. 3. Класс устройства связи Cdc. Для заказов более 100 заполните эту форму. 😵 Пожалуйста, попробуйте перезагрузить эту страницу Помощь Создать Присоединиться Войти.ЗАКРЫТЬ MSTAT = 60. Он поддерживается всеми основными операционными системами (Windows, Linux и Mac OS). 1. Поставщик уникального приложения-примера устройства. Графическое изображение данных UART с помощью LabVIEW Графическое изображение данных UART с помощью LabVIEW Пример с использованием MSP430 31 марта 2016 г. Джастин Бауэр В этом посте будет рассказано, как начать новый проект LabVIEW и графически отобразить некоторые простые данные из COM-порта на панели запуска TI MSP430. Основанные на ядрах ARM® Cortex®-M0 +, Cortex-M3 и Cortex-M4, микроконтроллеры EFM32 также включают наиболее энергоэффективные периферийные устройства и режимы энергопотребления, позволяющие проектировать высокофункциональные системы с низким энергопотреблением.3. c) чтобы продемонстрировать, как использовать драйвер CMSIS UART. Программное обеспечение с открытым исходным кодом. В этом руководстве мы фактически рассматриваем внутренний UART. 12 сентября 2017 г. · В этом руководстве показано, как использовать интерфейс STM32 UART в различных режимах с использованием библиотек HAL. грамм. EFM32 Series 0: Начало работы Обзор серии В этом учебном курсе по последовательной связи EFM32 рассматриваются SPI / UART, I2C, LEUART и USB, а также приводится список полезных документов, чтобы узнать больше о последовательной связи EFM32. php / 310-stm32-programming EFM32 ™ PG22 32-разрядные микроконтроллеры (MCU) Семейство 32-разрядных микроконтроллеров (MCU) EFM32PG22 представляет собой версию микроконтроллера, совместимую только с выводами и программным обеспечением, отмеченной наградами беспроводной SoC-платформы EFR32xG22 (BG22, MG22 и FG22).(Некоторые тесты проводятся с использованием часов HSI в качестве источника синхронизации USART1. Более простым решением было бы использование внешнего моста USB / UART. Начав с наименее эффективного способа, который заключается в опросе данных, полученных периферийным устройством UART, тогда мы увидим метод приема, управляемый прерываниями, который включает в себя вмешательство ЦП, но в любом случае неблокирующий. Это позволяет управлять стеком Bluetooth через последовательный интерфейс, такой как UART, с отдельного хоста, такого как микроконтроллер EFM32. Соответствует ли этот уровень уровню периферийных устройств (для пример UART) стороннего устройства? Ответ В техническом описании устройства EFM32 вы могли видеть напряжение VIOOH / VIOOL при другом режиме привода и ток при подаче другого напряжения источника питания.) можно использовать для перенаправления printf () таким образом, чтобы вывод поступал в окно консоли в отладчике с помощью кабеля JTAG, устраняя необходимость в любом кабеле USB или UART. HAL_StatusTypeDef HAL_UART_Transmit_DMA (UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size) в библиотеке CubeMX, он включит все прерывания DMA. Примеры программного обеспечения EFM32. C ++ (Cpp) ITM_SendChar — найдено 30 примеров. XC800 XE166 XC 2000 Графическое отображение данных UART с помощью LabVIEW • MCU получает данные UART и обновляет свой экран.9. 1 из GNU Arm Embedded в качестве примера. 1 Пример адаптера UART в Руководстве пользователя UM-B-044: Справочник по программной платформе DA1468x (HTML) с нашего портала поддержки. • Регулировка напряжения MCU (VMCU). Если вы похожи на меня, то после того, как поигрались с некоторыми простыми проектами на основе кода RTL в попытке научиться использовать Vivado и программировать свой VC707, вы спрашивали себя: «Какого черта я должен делать с этим что-нибудь полезное? вещь???». Рисунок 3. Я предполагаю, что имя функции «uart_tx» происходит от случая использования сервиса Nordic UART-over-BLE — оно не имеет никакого отношения к обмену данными между MCU хоста и nRF8001? как программировать / отлаживать silabs EFM32 через встроенный интерфейс USB.3v и sid12, которые имеют одну единственную линию данных от последовательного порта или фреймов ATM на некоторые физические носители. MCU EFM32 Giant Gecko на EFM32GG-STK3700 предназначен для питания от трех различных источников: • Через встроенный отладчик. 5. Подключение осуществляется путем установки высокого уровня линии bc_en. Включенный пример кода написан для комплекта разработчика EFM32_Gxxx_DK, но легко переносится на любую часть EFM32 с периферийным устройством I2C. 06.06.2019 · 5. Ниже приведены небольшие примеры того, как можно использовать эти программы.В дополнение к загрузке Example; Вступление. 26 июня 2020 г. · В этом руководстве я кратко перечислю различные способы получения данных UART в микроконтроллерах STM32. OverSampling = UART_OVERSAMPLING_16; Примечание. Источником тактовой частоты USART1 является системная частота 72 МГц, использующая источник тактовой частоты HSE PLL. Мы вышлем пример. Точно так же процесс дублируется, когда MCU хочет поговорить с ним. После этого печать отправляет линию через UART каждый раз, когда импульсный сигнал поступает на его вывод SEND. Хотя поначалу это может показаться сложным, я рекомендую вам взглянуть и запустить его на Giant Gecko в качестве отправной точки.Микроконтроллеры STM8 особенно дешевы для полнофункционального 8-битного микроконтроллера. 2. Информация о потреблении тока в реальном времени отображается на ЖК-дисплее (при использовании DVK) или может отображаться с помощью программы EnergyAware Profiler компании, подключив любой из комплектов к ПК через USB. Выполнение инструмента EINK Image Process, версии Python 3. В этом примере хост-компьютер использовался только для выполнения манипуляции с изображением, создания выходных байтовых потоков для массивов DTM1 и DTM2 и отправки этих потоков на узел шлюза через UART. Связь.Встроенное приложение EFM32 / EFR32. последовательный интерфейс командной строки). Просмотрите наши последние предложения комплектов для разработки интерфейсов. Он также может взаимодействовать со смарт-картами ISO7816 и устройствами IrDA. Поиск в Google для EFM32 с индивидуальным дизайном. Он поддерживает полнодуплексную асинхронную связь UART, а также RS-485, SPI, MicroWire и 3-проводную связь. Вот пример использования последовательного порта для печати на терминал. 1 Прослушивание и прием в EM2. Я рекомендую использовать один из STK, так как для них доступно множество примеров кода, и в них включен отладчик.Я буду использовать GCC 7. В этой статье я объясню некоторые основные основы архитектуры ATmega и приведу простой пример, созданный в AVR Studio, который резюмирует материал. https: // pbelectronique. Снижает энергопотребление. Touch, UART, SPI, I2C, Lesense, ++. Компоновка EFM32 Wonder Gecko Development Kit показана ниже. В этом. Источник тактовой частоты 768 кГц для обеспечения связи UART со скоростью до 9600 бод / с. В конце этой статьи мы рассмотрели пример передачи строки из Arduino Uno в NodeMCU через UART.Единственный недостаток порта EFM32, кажется, в том, что с ним нет примеров. Это очень похоже на основной драйвер tegra_tcu, но, учитывая, насколько прост этот драйвер и основной драйвер, использующий структуру почтового ящика, что делает фактическую реализацию несовместимой, я думал, что J4 дает доступ ко всем функциям на мосту USB к UART. и позволяет сигналам MCU подключаться к ним. Микроконтроллер Gecko обеспечивает вычислительную мощность, необходимую для очень быстрого обновления экрана EPD.Вам нужно будет загрузить этот скетч, а затем открыть последовательный терминал Arduino и установить скорость передачи 115200 бит / с, чтобы увидеть данные, передаваемые с платы Arduino. Команды отправляются через UART, чтобы сообщить о дизайне 15 ноября 2016 г. · UartHandle. Физическое соединение UART, которое передается через последовательный порт USB. В качестве репрезентативного примера: датчик WIFI, который спит при 500 нА, просыпается после тайм-аута, считывает датчик, подключается к Wi-Fi для передачи данных exfil (всплески 300 мА), а затем возвращается в режим сна.Сгенерировано 29 марта 2019 г. из проекта linux revision v5. Плата расширения позволяет микроконтроллеру EFM32 подключаться к модулю Wi-Fi WGM110, который может подключаться к сетям Wi-Fi, а также быть точкой доступа, к которой могут подключаться другие устройства. 8. Доступны как блокирующие, так и неблокирующие передаточные функции. • Загрузка и запуск примеров приложений, хранящихся в комплекте. 8. UART продается / поставляется как отдельная интегральная схема (ИС) или как внутренний модуль в микроконтроллерах. Он также может взаимодействовать со смарт-картами ISO7816 и устройствами IrDA.3 Добавьте обработчик прерывания и функции обратного вызова. См. AN0042. Два модуля EFM32 I2C подключены и настроены как на передачу (ведущий режим), так и на прием данных между собой (ведомый режим) с использованием общей шины I2C. 30 июля 2014 г. · Это пример кода для связи UART @ 9600 бод (msp430g2xx3_uscia0_uart_01_9600. В Примечаниях к приложению -> Загрузчик UART AN0003 (возможно, AN0042, если вы не используете USB). Одно исправление: AN003 касается загрузчика UART, а AN0042 — насчет загрузчика USB, но все платы Olimex EFM32 основаны на «старейшем» микроконтроллере Gecko от Energymicro (ныне Silicon labs).Его цель — включить или выключить пользовательские светодиоды под управлением уникальных команд настройки поставщика. • Регулировка напряжения MCU (VMCU). 5. Функция main () действительно проста! EFM32 USB CDC ПОСЛЕДОВАТЕЛЬНЫЙ ПОРТ WINDOWS 7 X64 TREIBER. 10 сентября 2018 г. · Физическое соединение UART, которое ретранслируется через последовательный порт USB. 1-rc2 Powered by Code Browser 2. Я пытаюсь использовать USB на PIC32MX795F512L в нестандартной конструкции. отправлено vaibhav singh 19 июня 2015 На основе версии ядра 5. EFM — это сокращение от энергосберегающих микроконтроллеров.Пример программного обеспечения, включенный в эту заметку по применению, содержит драйверы и полный стек USB LUFA для EFM32. Семейство EFM32 Pearl Gecko EFM32PG1 Спецификация Микроконтроллеры EFM32 Pearl Gecko — это самые энергосберегающие микроконтроллеры в мире. 2. Модуль универсального асинхронного приемного передатчика (UART) является одним из модулей последовательного ввода-вывода, доступных в семействе устройств dsPIC33F. Небольшой пример в этом отношении будет очень полезен. XC800 XE166 XC 2000 C166 XMC4000. Назначенный номер com-порта, последовательный порт USB, вход odin в режим загрузки, композитное устройство cdc.для обнаружения и устранения шума в данных датчика) Расчет матрицы 10×10 с плавающей запятой (f32) и операции с фиксированной точкой (q15) на ARM Cortex M3 в сравнении с (например, 10 факторов, которые делают EFM32 самым энергоэффективным микроконтроллером в мире. Мы используем аналитические куки чтобы понять, как вы используете наши веб-сайты, чтобы мы могли их улучшить, e. AN0042: Загрузчик USB / UART Это примечание по применению предназначено для пользователей загрузчика на устройствах EFM32 или EZR32 с поддержкой USB. Проверка регистров показывает, что мои данные читай правильно, просто обратно не отправляет.Компоновка оборудования EFM32WG-DK3850 Аналоговый аудиовход / выход Односторонний и дифференциальный Аналоговые входы 10/100 Мбит / с Ethernet RS 232 UART и LEUART Кнопка питания I2 S Цифро-аналоговый преобразователь Пользовательские светодиоды Кнопки и джойстик ЖК-дисплей TFT 320 x240 с резистивным сенсорным экраном EFM32 Семейство микроконтроллеров основано на ARM Cortex-M3. в) — программа просто отправляет полученный символ обратно на хост (ПК). 17 июня 2020 г. · Однако периферийные устройства UART в микроконтроллере могут использоваться для отправки последовательных данных в последовательный COM-порт ПК и отображения их на терминале с помощью платы преобразователя USB-TTL.0 Все очень просто — я хочу получить символ в UA. Эта функция очищает флаги состояния UART с предоставленной маской. Great Cow BASIC — это компилятор BASIC с открытым исходным кодом для 8-битных микроконтроллеров Microchip PIC и Atmel AVR. Бухгалтерский учет; CRM; Бизнес-аналитика STM8 — это семейство 8-битных микроконтроллеров от STMicroelectronics, расширенный вариант архитектуры микроконтроллеров ST7. Следовательно, вы не ограничены использованием определенного модуля UART (UART1, UART2 или UART3). JP4 и JP5 управляют типом ввода / вывода GPIO.. \ $ \ endgroup \ $ — Густаво Литовский, 13 фев. 2013 в 18:39, указан ниже. Эти команды сначала выполняются на машине UNIX, а затем на вашем ПК выбирается соответствующая опция для начала передачи. Пример кода. используя различные режимы передачи прямого доступа к памяти. Одним из примеров этого типа является пример TS F300-5 FeaturesDemo из мастера создания примера проекта Simplicity Studio. Или вы используете встроенное периферийное USB-устройство HG / LG / GG / WG. Мастер отправляет подчиненному эти данные 3. Перепрограммирование приложения на EFM32PG-STK3402A ¶ В этом примере используется образец приложения Hello World.avr-lib. Между EFM32 и BC существует соединение UART. Я считаю, что контакты usart могут работать как порт uart. 1 Примеры выполнения программы. c) Более простой подход — использовать микросхему FTDI USB <-> Serial. LEUART обеспечивает полную связь UART с использованием низкой частоты 32. * Цифровое значение может быть просмотрено на компьютерном терминале с настройками uart @ 9600 * без четности, 2 стоповых бита. 21 июля 2018 г. · Судя по названию, сегодня я пишу о том, как получать данные UART (SERIAL) с помощью ПРЕРЫВАНИЯ ОПРОСА и DMA.Это особенно полезно для микроконтроллера без собственного USB-контроллера, но скорость передачи данных будет ограничиваться интерфейсом UART микроконтроллера и / или FTDI, а не скоростью USB. FreeRTOS — это небольшая бесплатная ОС с открытым исходным кодом, предназначенная для встраиваемых устройств. они используются для сбора информации о страницах, которые вы посещаете, и о том, сколько кликов вам нужно, чтобы выполнить задачу. Предупреждение: этот файл не был частью базы данных компиляции. 16 апреля 2016 г. · Проект Atmega Architecture, GPIO (AVRStudio4 + Proteus VSM).Начните вводить текст в поле поиска плат и найдите желаемую плату разработки, затем щелкните 13 июня 2020 г. · 1. Когда USART не получает новые данные в течение запрограммированного времени, выдается сигнал тайм-аута приемника и прерывание. генерируется, если включено. 0. Загорание светодиода происходит при последовательном обратном вызове и, как таковое, находится в контексте прерывания. грамм. Мой код: 5 апреля 2017 г. · Я планирую использовать DMA, но сейчас я просто делаю небольшую демонстрацию, чтобы увидеть персонажей из UART, и это, казалось, был простейшим примером.3. Infineon. Он поддерживает две платы EFM32, EFM32GG-STK3700 и EFM32GG-DK3750. 19 мая 2016 г. · Например, если вам нужен простой инструмент, я думаю, что OpenOCD может быть не лучшим выбором для вас! Другие хорошие альтернативные инструменты отладки: Segger J-Link; УЛИНК; Отладчики по умолчанию, встроенные в оценочные платы (например, STM32, EFM32 и другие семейства MCU) поставщиками микросхем. Например, хост может представлять отладчик следующим образом: COM3 (в Windows) или / dev / ttyACM0 (в Linux) — это интерфейс GDB.Затем EFM32 может использовать функции библиотеки BSP (Board Support Package) для отправки команд в BC. В основном я пишу некоторые драйверы i2c для EFM32, которые хочу протестировать. Пример: Kalmann-Filter (например, EFM32JG1 включает мощный 32-битный ARM® Cortex®-M3 и широкий выбор периферийных устройств, включая уникальный криптографический аппаратный механизм, поддерживающий AES, ECC и SHA. GitHub Gist: мгновенно делитесь кодом , примечания и фрагменты. Тег
.