MyTetra Share
Делитесь знаниями!
Insider's Guide STM32 (part 2)
Время создания: 26.02.2018 16:17
Текстовые метки: adc, timer, pwm, usart, usb, can, i2c, spi
Раздел: Electronics - Microcontrollers - STM32

5. ПЕРИФЕРИЯ


В STM32 обычно 5 портов по 16 линий ввода-вывода. У каждого порта имеется 2 конфигурационных регистра по 32-бита. Совместно они образуют 64-битный конфигурационный регистр. Эти 64 бита разделены на 4-битные поля, позволяющие настроить соответствующую им линию ввода-вывода. В свою очередь, 4-битное поле конфигурации состоит из 2-битного поля режима и 2-битного поля конфигурации. Поле режима позволяет указать, в каком направлении работает линия: на ввод или на вывод, а поле конфигурации позволяет настроить характеристики управления:

  • если линия настроена как вход, то к ней можно подключить подтягивающий к плюсу или минусу резистор;
  • линия, настроенная на вывод, может быть либо двухтактной, либо с открытым стоком. Для линий вывода можно также указать ее максимальное быстродействие: 2, 10 или 50 МГц.



После завершения настройки портов, конфигурационные параметры можно защитить. Для этого необходимо выполнить запись в регистр блокировки конфигурации. В этом регистре для каждого вывода предусмотрен бит блокировки. После его установки блокируется возможность записи в соответствующие поля конфигурации и режима. После установки всех требуемых бит блокировки, необходимо в бит 16 регистра блокировки записать последовательность 1, 0, 1. Этим будет активизирована блокировка. Убедиться в активизации блокировки можно, если сразу после записи выполнить подряд два считывания этого же бита. Считывание значений 0, 1 свидетельствует об успешной активации блокировки.

Доступ к линиям ввода-вывода осуществляется через регистры ввода и вывода данных. Для выполнения действий над отдельными битами можно использовать либо поддерживаемый ядром Cortex способ "bit banding" применительно к регистрам ввода и вывода, либо воспользоваться двумя специальными регистрами битовой обработки. Регистр установки/сброса бит - 32-битный регистр. Верхние 16 бит связаны с каждой из линий ПВВ. Запись в них логической 1 приводит к сбросу соответствующей линии ввода-вывода. Идентично этому, запись логической 1 в любой из младших 16 бит приведет к установке соответствующей линии ввода-вывода. Второй регистр битовой обработки - регистр сброса бит. Этот регистр 16-битный. Запись в его биты логических 1 приводит к сбросу соответствующих линий ввода-вывода.


Альтернативные функции


Альтернативные функции у МК STM32 управляются через регистр переназначения и отладки. Каждое из цифровых УВВ (UART, CAN, таймеры, I2C и SPI) имеет одно- или двухбитное поле, которое позволяет назначить работу с различной комбинацией выводов. После выбора альтернативных функций выводов, необходимо в конфигурационных регистрах ПВВ переключить назначение вывода с линии ввода-вывода на альтернативную функцию. Регистр переназначения также управляет конфигурацией выводов отладочного JTAG-порта. Сразу после сброса, порт JTAG активизируется с отключенной функцией трассировки данных. JTAG можно переключить в режим двухпроводного отладочного интерфейса, а неиспользуемые выводы использовать в качестве линий ввода-вывода общего назначения.


Внешние прерывания


Блок внешних прерываний имеет 19 линий прерываний, которые связываются векторами через NVIC. Из них 16 линий связаны с линиями GPIO и могут генерировать прерывание по нарастающему или подающему фронту, или же по обоим фронтам. Оставшиеся три линии связаны с линией прерывания RTC, линией возобновления работы порта USB и выходом сигнализации блока контроля напряжения питания. NVIC предоставляет отдельные векторы прерываний для линий внешних прерываний (EXTI).

Каждую из 16 линий EXTI можно связать с соответствующей линией ввода-вывода любого из портов. Для этого предусмотрены четыре конфигурационных регистра. Данные регистры разделены на четырехбитные поля, связанные с каждой линией EXTI. С помощью данного поля каждую линию EXTI можно связать с любым из пяти GPIO, например, линию EXTI0 можно связать с линией 0 порта A, B, C, D или E. Такой подход позволяет использовать любой из выводов МК в качестве линии прерывания. Функцию EXTI можно также использовать в связке с альтернативной функцией, активизированной на внешнем выводе.


//Назначение функций внешних прерываний линиям GPIO

AFIO->EXTICR[0] = 0x00000000;

//Разрешение источников внешних прерываний

EXTI->IMR = 0x00000001;

//Разрешение возобновления при внешних событиях

EXTI->EMR = 0x00000000;

//Выбор падающего фронта в качестве источника запуска

EXTI->FTSR = 0x00000001;

//Выбор нарастающего фронта в качестве источника запуска

EXTI->RTSR = 0x00000000;

//Разрешение источников прерываний в NVIC

NVIC->Enable[0] = 0x00000040;

NVIC->Enable[1] = 0x00000000;


После установки регистров конфигурации EXTI, каждое внешнее прерывание можно настроить на генерацию прерывания по нарастающему или падающему фронтам. Также предусмотрена возможность принудительной генерации прерывания EXTI путем записи в соответствующие биты регистра программного прерывания.



ADC


В зависимости от модели, в микроконтроллеры STM32 может быть встроен один или несколько аналогово-цифровых преобразователей. АЦП питаются отдельным напряжением, которое в зависимости типа корпуса может находиться в пределах 2.4 - 3.6В. Источник опорного напряжения (ИОН) АЦП соединен либо внутренне с напряжением питания АЦП, либо со специальными внешними выводами. АЦП характеризуется 12-битной разрешающей способностью и частотой преобразования 1МГц. У него имеется до 18 мультиплексированных каналов, 16 из которых можно использовать для измерения внешних сигналов. Оставшиеся два канала связаны со встроенным датчиком температуры и внутренним ИОН.


АЦП поддерживает возможность раздельного программирования времени преобразования в каждом из каналов. Всего предусмотрена возможность выбора 8 дискретных значений из диапазона от 1.5 до 239.5 циклов.



Каждый АЦП поддерживает два базовых режима преобразования: регулярный и инжектированный.


В режиме регулярных преобразований задается канал или группа каналов, которые в дальнейшем преобразовываются поочередно. Число каналов в группе регулярных преобразований конфигурируется пользователем (до 16 каналов). Кроме того, можно задавать порядок преобразования каналов, а один и тот же канал канал в цикле преобразования может быть оцифрован несколько раз. Группа регулярных преобразований запускается программно или аппаратно различными сигналами таймеров или по 1-ой линии внешних прерываний (EXTI 1). Сразу после запуска, преобразования в регулярной группе выполняются непрерывно. Альтернативно, группа может работать в режиме с остановкой преобразования, когда по завершении оцифровки выбранных каналов преобразование приостанавливается вплоть до следующего запуска группы регулярных преобразований.



Каждый раз, когда завершается оцифровка в группе регулярных преобразований, результат преобразования помещается в единственный регистр результата преобразования и генерируется прерывание. 12-битный результат хранится в 16-битном регистре с левым или правым выравниванием бит.

У АЦП1 имеется специальный канал ПДП, который может использоваться для передачи каждого результата преобразования в организованный в памяти буфер данных. Использование данного метода позволяет сократить частоту генерации прерываний до одного по завершении каждого цикла оцифровки группы регулярных преобразований. Более продвинутым методом является использование двойного буфера, который позволяет выполнять обработку накопленных данных из одной части буфера и, при этом, продолжать записывать результаты преобразований во вторую часть буфера, а по завершении цикла преобразования наоборот - обрабатывать данные из второй части, а помещать новые данные в первую. Для реализации данного метода необходимо использовать прерывания по половинному и полному завершению ПДП, а также режим кольцевого буфера в блоке ПДП.


Другая группа преобразований называется инжектированной. В последовательность преобразований инжектированной группы может входить до четырех каналов, а запуск преобразований выполняется программно или аппаратно. Сразу после запуска этой группы, приостанавливается оцифровка в группе регулярных преобразований, выполняется собственная последовательность преобразований, а затем возобновляется очередность преобразований в регулярной группе. Также как и в случае регулярной группы, может быть заданы любая последовательность каналов и многократное преобразование одного и того же канала в одной последовательности преобразований. Однако, в отличие от регулярной группы, у каждого инжектированного преобразования имеется свой собственный регистр результата и регистр смещения.



В регистр смещения можно запрограммировать 16-битное значение, которое автоматически вычитается из результата преобразования АЦП. Если результирующее значение - отрицательное, то регистр результата инжектированной группы дополняется знаком. Также как и в регулярной группе, результат может храниться с правым или левым выравниванием.


Помимо двух режимов преобразования, АЦП поддерживают функцию оконного компаратора, которая заключается в генерации прерывания при выходе результата преобразования за пределы заданных пользователем нижней и верхней границ (условия снижения и превышения напряжения, соответственно). Оконный компаратор может использоваться для мониторинга выбранного регулярного или инжектированного канала, или же всех регулярных или инжектированных каналов. Помимо мониторинга напряжения, функция оконного компаратора может использоваться в качестве детектора пересечения нуля.



Конфигурация АЦП.

АЦП имеет блоки регистров для настройки: индивидуального времени преобразования, регулярных и инжектированных последовательностей преобразований, значений смещения для инжектированной группы и пороговых значений оконного компаратора. Вся настройка АЦП выполняется через регистры управления и статуса.

Ниже приведен пример конфигурации преобразования одного канала с генерацией прерывания.


ADC1->CR2 = 0x005E7003; //Switch on the ADC and enable continuous conversion

ADC1->SQR1 = 0x0000; //set sequence length to one

ADC1->SQR2 = 0x0000; //select conversion on channel zero

ADC1->SQR3 = 0x0001;

ADC1->CR2 |= 0x005E7003; //rewrite on bit

ADC1->CR1 = 0x000100; //Start conversion of regular channels, enable ADC interrupt

NVIC->Enable[0] = 0x00040000; //enable ADC interrupt

NVIC->Enable[1] = 0x00000000;


В процедуре обработки прерывания результат преобразования считываются из регистра результата и выводится на линии GPIO.


void ADC_IRQHandler (void)

{

GPIOB->ODR = ADC1->DR << 5; // Copy ADC result to port pins

}


Вместо прерывания для передачи результата АЦП в GPIO можно использовать канал DMA.


DMA_Channel1->CCR = 0x00003A28; //Circular mode, peripheral and memory increment disabled


//Load destination address into peripheral register,GPIO port data register

DMA_Channel1->CPAR = (unsigned int) 0x4001244C;


//Load source address into memory register

DMA_Channel1->CMAR = (unsigned int) 0x40010C0C;


DMA_Channel1->CNDTR = 0x1; //Load number of words to transfer

DMA_Channel1->CCR |= 0x00000001; //Enable the DMA transfer


При этом в конфигурации АЦП должна быть включена поддержка DMA.


ADC1->CR2 |= 0x0100;


Dual Conversion Mode


В режимах сдвоенных преобразований АЦП2 подчинен АЦП1, обеспечивая поддержку восьми дополнительных режимов преобразования.


Режимы одновременного преобразования инжектированных групп и одновременного преобразования регулярных групп.



В первых двух режимах сдвоенных преобразований синхронизируется преобразование регулярной и инжектированной групп преобразования двух АЦП. Этот режим полезен при необходимости одновременного измерения двух физических величин, например, ток и напряжение.


Комбинированный режим одновременного преобразования регулярных/инжектированных групп (Combined Regular/Injected Simultaneous Mode)



Данный режим предоставляет возможность синхронизировать преобразование как регулярных, так и инжектированных групп обоих АЦП.


Режим быстрых и медленных преобразований со смещением во времени (Fast

Interleave And Slow Interleave Modes)




В режимах быстрых и медленных преобразований со смещением во времени синхронизируется работа регулярных групп преобразования обоих АЦП, однако в отличие от режима непрерывных преобразований, здесь перед запуском преобразования АЦП1 вводится небольшая задержка. В режиме быстрого преобразования со смещением во времени эта задержка равна семи циклам синхронизации АЦП и исчисляется по отношению к моменту запуска преобразования АЦП2. В режиме медленных преобразований со смещением во времени задержка равна 14 циклам синхронизации АЦП. Каждый из этих режимов может использоваться для увеличения частоты дискретизации за счет комбинирования работы двух преобразователей.


Режим поочередного запуска (Alternate Trigger Mode)

В режиме поочередного запуска аппаратный запуск АЦП1 вначале приведет к запуску преобразований инжектированной группы АЦП1, а затем - к запуску преобразований инжектированной группы АЦП2


Комбинирование режима одновременного преобразования регулярной группы и режима поочередного запуска (Combined Regular Simultaneous And Alternate Trigger Mode)


Режим поочередного запуска можно скомбинировать с режимом одновременного преобразования регулярных групп. Вследствие этого, преобразования регулярных групп обоих АЦП будут выполняться синхронно, а инжектированных групп - поочередно.


Комбинирование режима одновременного преобразования инжектированной группы и режима со смещением во времени (Combined Injected Simultaneous And Interleaved Mode)



В последнем режиме преобразования преобразование регулярных групп обоих АЦП выполнятся со смещением во времени, а инжектированных - одновременно.



Таймеры


У МК STM32 имеется несколько блоков таймеров. Некоторые таймеры расширенные, остальные таймеры являются таймерами общего назначения. Все таймеры выполнены по общей архитектуре, а расширенный таймер отличается лишь добавлением специальных аппаратных блоков.


Таймеры общего назначения


Все блоки таймеров выполнены на основе 16-битного перезагружаемого счетчика, который синхронизируется с выхода 16-битного предделителя. Перезагружаемое значение хранится в отдельном регистре. Счет может быть прямой, обратный или двунаправленный (сначала прямой до определенного значения, а затем обратный). Вход синхронизации счетчика можно связать с одним из восьми различных источников. В их число входят: специальный сигнал синхронизации, производный от сигнала главной системной синхронизации; выходной сигнал синхронизации одного из других таймеров или внешний сигнал синхронизации, связанный с выводами захвата/сравнения.

Помимо составляющего основу таймера счетчика, в каждый блок таймера также входит четырехканальный блок захвата/сравнения. Данный блок выполняет, как стандартные функции захвата и сравнения, так и ряд специальных функций. Каждый из таймеров может генерировать прерывания и поддерживает DMA.


В каждом таймере присутствует блок захвата/сравнения.


Базовый блок захвата имеет 4 канала, подключенных к конфигурируемым детекторам фронтов. При обнаружении нарастающего или падающего фронта, текущее значение счетчика записывается в 16-битный регистр захвата/сравнения. Когда возникает событие захвата, счетчик таймера может быть сброшен или приостановлен. Кроме того, одновременно с этим может быть запущено прерывание или DMA-передача.

Блок захвата имеет возможность использования двух каналов захвата для автоматического измерения параметров внешнего ШИМ-сигнала, в т.ч. заполнение импульсов и период следования импульсов.


TIM3->CR1 = 0x00000000; //по умолчанию

TIM3->PSC = 0x000000FF; //установка макс. коэф. предделителя

TIM3->ARR = 0x00000FFF; //установка макс. перезагружаемого знач.

TIM3->CCMR1 = 0x00000001; //Вход IC1 связываем с TI1

TIM3->CCER |= 0x00000000; //IC1 реагирует на нарастающий фронт

TIM3->CCMR1 |= 0x00000200; //Вход IC2 связываем с TI1

TIM3->CCER |= 0x00000020; //IC2 реагирует на падающий фронт

TIM3->SMCR = 0x00000054; //Выбор TI1FP1 в качестве входа, запуск по нарастающему фронту

//сброс счетчика

TIM3->CCER |= 0x00000011; //разрешение каналов захвата

TIM3->CR1 = 0x00000001; //разрешение таймера


Каждый таймер микроконтроллеров STM32 имеет 4 канала схем сравнения. В базовом режиме сравнения генерируется событие захвата, если обнаруживается совпадение состояния счетчика с 16-битным значением, хранящимся в регистре захвата/сравнения. Данное событие может использоваться для изменения состояния связанного с каналом захвата/сравнения вывода, генерации сброса таймера, прерывания или DMA-передачи.


PWM

В этом режиме период ШИМ задается с помощью регистра автоматической перезагрузки таймера. Значение заполнения импульсов задается через регистр захвата/сравнения канала. Таким образом, каждый таймер может генерировать до четырех независимых ШИМ-сигналов. Таймеры могут работать и синхронизированно, позволяя генерировать до 16 синхронизированных ШИМ-сигналов.


Каждый таймер поддерживает специальный режим ШИМ, в котором можно генерировать ШИМ-сигналы с выравниванием по фронту или центру.

В режиме с выравниванием по фронту, падающий (falling edge. Тогда изображение выше нарисовано неправильно) фронт импульса всегда совпадает с моментом перезагрузки таймера.

В режиме с выравниванием по центру, таймер конфигурируется как реверсивный счетчик, который сначала считает в прямом направлении, а затем - в обратном.


TIM2->CR1 = 0x00000000; //по умолчанию

TIM2->PSC = 0x000000FF; //установка макс. знач. предделителя

TIM2->ARR = 0x00000FFF; //установка макс. перезагружаемого знач.

TIM2->CCMR1 = 0x00000068; //Устанавливаем режим ШИМ

TIM2->CCR1 = 0x000000FF; //Задаем стартовое значение ШИМ

TIM2->CCER = 0x00000101; //разрешаем выхода канала 1

TIM2->DIER = 0x00000000; //разрешаем обновление прерывания

TIM2->EGR = 0x00000001; //разрешаем обновление

TIM2->CR1 = 0x00000001; //разрешаем работу таймера


Режим одновибратора (One Pulse Mode)

Как в базовом режиме сравнения, так и в режиме ШИМ блоки таймеров непрерывно генерируют прямоугольные импульсы. Однако, при необходимости, в каждом из таймеров можно задействовать опциональный режим одновибратора для генерации одиночного импульса. Данный режим, по сути, является особой версией режима ШИМ, в котором генерация ШИМ-сигнала инициируется внешним сигналом запуска (внешний вывод или выход запуска любого другого таймера) и длится один цикл. В результате генерируется один импульс с программируемой задержкой и длительностью.



Расширенный таймер


В каждом из трех каналов этого таймера предусмотрены два противофазных выхода. Таким образом, он представляет собой 6-канальный ШИМ-блок.



Часы реального времени и регистры с резервированием питания (RTC And Backup Registers)


У МК STM32 имеется два домена питания: основной домен питания системы и УВВ, и домен с резервированием питания. В последнем домене расположены 16-битные регистры, часы реального времени и независимый сторожевой таймер.

Расположенные в этом домене регистры - это обычные 10 ячеек памяти, которые можно использовать для хранения критической информации, когда МК STM32 находится в дежурном режиме работы и основное питание отключено. В экономичных режимах работы МК остаются в работе часы реального времени и независимый сторожевой таймер и, поэтому, их можно использовать для возобновления нормальной работы системы STM32 или для выполнения сброса всего МК.

Входящие в МК STM32 часы реального времени представляют собой 32-битный счетчик, оптимизированный под счет секунд при синхронизации частотой 32.768 кГц. Во время настройки системы синхронизации, в качестве источника синхронизации часов реального времени можно выбрать внутренний низкочастотный генератор, внешний низкочастотный генератор или внешний высокочастотный генератор. После выбора источник синхронизации соединяется с часами реального времени через делитель частоты с фиксированным коэффициентом деления (128). Для организации точного счета секунд далее может быть задействован еще один предделитель RTC. Счетчик RTC может генерировать три прерывания:

  • при инкрементировании секунд;
  • при переполнении счетчика;
  • при срабатывании функции сигнализации.

Последнее прерывание генерируется в случае, когда текущее значение счетчика RTC достигнет значения, хранящегося в регистре уставки времени.

RTC расположены в домене с резервированием питания, который получает питание от напряжения VBAT, а прерывание, сигнализирующее о достижении заданного времени, связано с 17-ой линией внешних прерываний. Это означает, что после перевода основного домена питания STM32 в экономичный режим работы, RTC останутся в работе. Кроме того, воздействуя на линию внешнего прерывания, RTC могут сигнализировать NVIC Cortex о необходимости возобновления работы основного домена питания STM32. Данная конфигурация очень важна для маломощных устройств, которые в целях сбережения энергии батарейного источника большую часть времени проводят в дежурном режиме, но при этом должны иметь возможность, при необходимости, возобновить активную работу.


Регистры с резервированием питания и вход вмешательства (Backup Registers And Tamper Pin)


В домене с резервированием питанием также имеется десять 16-битных регистров, которые функционируют как энергонезависимое статическое ОЗУ. Хранящиеся в них данные можно стереть путем выполнения записи в соответствующий регистр управления. Этот же регистр управляет активностью внешнего входа вмешательства. Состояние данного вывода (высокое или низкое) можно настроить во время запуска. В ходе нормальной работы изменение логического уровня на этом входе приведет к запуску события обнаружения вмешательства, что вызовет очистку регистров с резервированием питания. Также можно активировать прерывание, которое позволяет МК выполнить защитные действия при обнаружении вмешательства.



SPI


Для организации быстродействующей связи с интегральными схемами у МК STM32 имеется два модуля SPI, предназначенных для полнодуплексной передачи данных на частоте до 18МГц. Важно обратить внимание, что один модуль SPI подключен к высокоскоростной шине УВВ APB2, которая может работать на частоте до 72МГц. Второй модуль связан с более низкоскоростной шиной APB1, максимальное быстродействие которой ограничивается частотой 36 МГц. У каждого из модулей SPI предусмотрена возможность программирования полярности и фазы синхронизации и формата передаваемых данных (8 или 16 бит, передача первым старшего или младшего значащего разряда). Кроме того, каждый модуль SPI может работать в ведущем или подчиненном режиме, что позволяет ему связаться с любой другой ИС, оснащенной интерфейсом SPI.



Для передачи данных на больших скоростях у каждого модуля SPI предусмотрено два канала DMA: один для передачи данных и один для копирования принятых данных в память. С помощью DMA можно добиться автономной двунаправленной передачи высокоскоростных потоков данных. В дополнение к стандартным возможностям интерфейса SPI, модуль SPI микроконтроллеров STM32 содержит два аппаратных блока CRC. Один блок CRC используется для передачи данных, а другой - для приема. Оба блока могут генерировать и проверять коды CRC8 и CRC16. Данная возможность на практике необходима при использовании одного из модулей SPI для подключения к карте MMC/SD.




I2C


Для связи с интегральными схемами у МК STM32 имеется еще один специальный интерфейс - I2C. Интерфейс I2C может работать в ведущем или подчиненном режиме и поддерживает возможность арбитра шины, что необходимо в мультимастерных системах. Интерфейс I2C поддерживает оба скоростных режима шины: стандартный со скоростями до 100 кГц и быстродействующий со скоростями до 400 кГц.

Модуль I2C использует 7- и 10-битные режимы адресации. Модуль полностью реализует протокол передачи данных по шине и требует для управления только необходимой протоколу передачи информации. Модуль I2C может генерировать два прерывания:

  • при обнаружении ошибок
  • для управления адресом связи и передаваемыми данными.

Кроме того, блок DMA предоставляет два канала, которые можно использовать для чтения из буфера передачи и записи данных в этот буфер. Таким образом, сразу после задания адреса и подлежащих передаче данных можно начать двунаправленную передачу данных полностью под аппаратным управлением.

Благодаря поддержке всех перечисленных возможностей, модули I2C являются скоростными и эффективными шинными интерфейсами. Однако у них реализован ряд дополнительных возможностей, позволяющих расширить базовые функции шины I2C. В модуль I2C микроконтроллеров STM32 входит блок аппаратной проверки ошибок в пакете (блок PEC). После активизации, блок PEC будет генерировать байт с CRC-кодом для проверки ошибок.



Данный байт автоматически помещается в конец передаваемого потока данных. Блок PEC также имеет возможность проверки принятых данных на соответствие переданному байту защиты от ошибок.


Модуль I2C МК STM32 также поддерживает два дополнительных коммуникационных протокола: SMBus и PMBus.

Протокол SMBus был предложен Intel в 1995 году для использования внутри ПК и серверов. Протоколом SMBus оговариваются требования к канальному слою, в т.ч. использование PEC и передача стандартизованных конфигурационных данных между BIOS компьютера и ИС различных производителей. Работая в режиме SMBus, модуль I2C, помимо PEC, поддерживает ряд других возможностей протокола SMBus. К их числу относятся протокол разрешения адреса SMN, протокол уведомления host-устройства и работа с сигналом SMBALERT.

Протокол PMBus является разновидностью SMBus и предназначен для работы в системах электропитания. PMBus позволяет конфигурировать, программировать и контролировать в реальном времени системы электропитания



USART


В МК STM32 интегрируется до 3 модулей USART, каждый из которых поддерживает несколько расширенных режимов работы, позволяющие использовать МК в самых современных коммуникационных применениях. Все три USART способны передавать данные на скорости до 4.5 Мбит/сек. Каждый из них также полностью программируется, в т.ч. размер передаваемых данных (8 или 9 бит), передача бита паритета или стоп-бита, а также скорость передачи. Один USART подключен к шине APB2, которая способна синхронизироваться частотой до 72 МГц. а остальные связаны с 36-мегагерцевой шиной APB1.


Каждый USART имеет собственный генератор скорости связи с возможностями дробного деления частоты. В отличие от обычных делителей частоты, такой генератор позволяет получить стандартные скорости связи при любой частоте синхронизации шины. Также как и остальные модули последовательных интерфейсов, каждый модуль USART оснащен двумя каналами DMA для двунаправленной связи с буфером данных. В конфигурации UART, модуль USART может работать в нескольких режимах работы. USART имеет возможность работы с однопроводной полудуплексной линией, используя для этого только вывод Tx. Для связи с модемами, а также для аппаратного управления передачей потока данных, у каждого USART предусмотрены дополнительные линии управления CTS и RTS.


Каждый из USART также может использоваться для подключения к шине LIN. Данная шина используется в автомобильном транспорте для низкоскоростной связи с кластерными микроконтроллерами. Все USART поддерживают возможности кодера/декодера инфракрасной последовательной связи (SIR). Эти возможности отвечают стандарту IrDA по инфракрасной передаче данных на скоростях до 115200 бит/сек с использованием полудуплексной NRZ-модуляции и экономичной работой при синхронизации USART частотами в пределах 1.4┘2.2МГц. У каждого USART поддерживается дополнительный режим смарт-карты, в котором активизируется поддержка стандарта ISO 7618-3.


Помимо работы в роли высокоскоростного интерфейса UART, каждый USART может быть переведен в режим синхронной связи. Его можно использовать для связи с внешними УВВ, оснащенными SPI-совместимым интерфейсом, по 3-проводной линии. Работая в данном режиме, USART работает в роли ведущего шины SPI и поддерживает возможность программирования полярности и фазы синхронизации. Благодаря этому, возможна связь с практически любой подчиненной SPI микросхемой.



CAN & USB


Оба модуля, USB и CAN, требуют выделения сравнительно большого объема статического ОЗУ для организации буферов сообщений, поэтому, у МК STM32 имеется дополнительная область статического ОЗУ размером 512 байт, которая может использоваться модулями CAN и USB. Доступ к этой памяти имеют только названные модули. Кроме того, данную память можно назначить на работу только с одним из этих модулей. Это означает, что модули CAN и USB не могут работать одновременно. Если же в применении использование обеих интерфейсов обязательно, то их работу нужно чередовать.


CAN-controller


Входящий в МК STM32 CAN-контроллер является полнофункциональным CAN-узлом, отвечающий требованиям к активным и пассивным устройствам CAB 2.0A и 2.0B и поддерживающий передачу данных на скорости не более 1 Мбит/сек. CAN-контроллер оснащен также дополнительными возможностями для организации детерминистической передачи данных по специальному CAN-протоколу передачи в реальном времени TTCAN. После активизации функции TTCAN будет поддерживаться автоматическая повторная передача сообщений и автоматическая вставка в CAN-пакет двух дополнительных байт с зафиксированным моментом времени передачи сообщения. Все эти возможности необходимы в системах управления через CAN-интерфейс в масштабе реального времени.


Полное наименование CAN-контроллера - модуль bxCAN, где bx указывает на поддержку модулем дополнительных возможностей. Обычный модуль CAN использует один буфер приема и передачи, а у расширенного модуля CAN используется несколько буферов приема и передачи. Модуль bxCAN является гибридом двух архитектур модулей CAN. У него имеется три почтовых ящика для передаваемых сообщений и два почтовых ящика для принимаемых сообщений. Каждый из принимающих почтовых ящиков имеет буфер FIFO для помещения в него трех сообщений. Данная архитектура является компромиссной с точки зрения производительности передачи данных и занимаемого места в кристалле ИС.


Следующая важная функция CAN-контроллера - фильтрация получаемых сообщений. Поскольку CAN является широковещательной шиной, каждое переданное сообщение принимается всеми узлами шины. В CAN-шине любой разумной степени сложности передается достаточно большое число сообщений. Задачей каждого подключенного к CAN-узлу ЦПУ является реагирование на CAN-сообщения. Таким образом, чтобы избавить CAN-контроллер от проблемы приема в буфер нежелательных сообщений, необходима их фильтрация. У CAN-контроллера микроконтроллеров STM32 имеется 14 банков фильтров, которые можно использовать для блокировки всех CAN-сообщений, кроме избранных сообщений или групп сообщений.

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

В первой конфигурации регистры банков фильтров являются 3-битными и могут использоваться для фильтрации 11- и 29-битных полей идентификаторов сообщения, а также бит RTR и IDE в 16-битном режиме.

Во второй конфигурации, в первый 32-битный регистр записывается идентификатор сообщения, во второй - маска сообщения. Регистр маски маркирует биты регистра идентификатора, как 'важный' или 'неважный'. Благодаря этому, появляется возможность принимать группу сообщений с помощью одного банка фильтров. Если принимающие фильтры пропускают сообщение, то вместе с ним принимающий буфер FIFO будет записан указатель на определивший совпадение фильтр. Это позволит прикладной программе ускорить идентификацию сообщения без необходимости считывания и дешифрации идентификатора пакета сообщения.


Все CAN-контроллеры поддерживают два режима работы: нормальный режим для приема и передачи пакетов сообщений и режим инициализации для задания параметров связи. Как уже говорилось, МК STM32 могут работать в экономичном режиме SLEEP. В этом режиме синхронизация модуля bxCAN отключена, однако доступ к регистрам почтовых ящиков остается возможным. Модуль bxCAN имеет возможность активизации работы при обнаружении активности на шине CAN. Его работу можно также реактивировать прикладной программой. Работая в нормальном режиме, поддерживаются два дополнительных подрежима. Первый подрежим - режим SILENT. В нём CAN-контроллер может принимать сообщения, но не может передавать и не генерирует бит ошибок в посылке и подтверждения сообщения. Данный режим рассчитан на CAN-шины с пассивным мониторингом. Второй подрежим - режим LOOPBACK. В этом режиме, передаваемые сообщения сразу же принимаются в приемный буфер. Он необходим для реализации диагностических функций и также полезен на фазе отладки кода программы. Оба рассмотренных режима можно комбинировать. Они идеальны для выполнения функций самотестирования при подключении к работающей шине.


USB module


Модуль интерфейса USB, входящий в состав некоторых МК STM32, является полноскоростным (12 Мбит/сек) и предназначен для взаимодействия с хост-интерфейсом USB, как например, используемым в ПК. Данный модуль полностью реализует физический уровень и уровень передачи данных, в т.ч. проверку ошибок в пакетах и повторная передача. Интерфейс USB-устройства также поддерживает возможности приостановки и возобновления, необходимые для снижения потребляемой мощности.

Интерфейс USB поддерживает до 8 конечных точек, которые пользователь может настроить как конечная точка управления, прерывания, потока или изохронная. Для организации буфера конечной точки может использоваться статическое ОЗУ размером 512 байт, использование которого совмещено еще и с CAN-контроллером. По завершении инициализации модуля USB, прикладная программа разделяет данное статическое ОЗУ на последовательность буферов.


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


Для хранения пакетов данных используется 512-байтное статическое ОЗУ. Во время инициализации, эта область памяти разделяется на несколько буферов для каждой активной конечной точки. Изохронные конечные точки используют специальный двойной буфер, который позволяет во время считывания данных из одной части буфера продолжать прием в другую часть.


























 
MyTetra Share v.0.53
Яндекс индекс цитирования