СОВРЕМЕННАЯ ЭЛЕКТРОНИКА №9/2013
ЭЛЕМЕНТЫ И КОМПОНЕНТЫ 24 WWW.SOEL.RU СОВРЕМЕННАЯ ЭЛЕКТРОНИКА ◆ № 9 2013 чи, на самом деле при чтении инфор- мация поступает из регистра приём- ника порта USART, а при записи дан- ные заносятся в регистр передатчика порта USART. Для работы с регистром данных используются следующие операторы: USART1->DR = tx1; // Передать байт переменной tx1 через USART rx1 = USART1->DR; // Считать приня- тый байт из USART в переменную rx1 Р ЕГИСТР USART_BRR Регистр USART_BRR служит для зада- ния скорости обмена через порт USART и содержит определяющую эту ско- рость переменнуюUSARTDIV с фикси- рованной точкой. Данная переменная состоит из двух частей: целой 12-раз- рядной части DIV_mantissa и дробной 4-разрядной части DIV_fraction. Дроб- ная часть позволяет довольно точно подстроить скорость обмена для любой частоты тактового сигнала. Скорость обмена вычисляется по формуле: , где fck – тактовый сигнал (PCLK2 для USART1 и PCLK1 для USART2, 3). Соот- ветственно, значение переменной . Рассмотрим пример вычисления зна- чения переменной USARTDIV для ско- рости порта USART, равной 9600 бод с тактовой частотой 8 МГц. . Целая часть USARTDIV имеет значе- ние 52, а в 16-ричном формате 0x34. Для перевода дробной части 0,0833 в 16-ричный формат, необходимо умножить эту часть на 16 и округлить полученное значение до целого. Таким образом, получим: 0,0833 × 16 = 1,3328. После округления и перевода этого значения в 16-ричный формат полу- чим число 0х01. Теперь, поместив обе части вычисляемого числа на свои раз- ряды в соответствии с таблицей 1, полу- чим значение USARTDIV = 0x0341, кото- рое следует записать в регистр задания скорости USART_BRR. Такая запись осуществляется с по- мощью следующих операторов: USART1–>BRR = 0x0341; // Записать значение скорости для USART1 При округлении дробной части воз- никла погрешность, которую мож- но вычислить с помощью обратного преобразования. Для этого необходи- мо преобразовать полученное значение в десятичное представление. В нашем случае целая часть равна 0x34 = 52, а дробная часть равна 1/16 = 0,0625 и USARTDIV = 52,0625 вместо расчёт- ного значения 52,0833. Ошибка в процентном выражении составит: error = (52,0833 – 52,0625) / 52,0833 × 100% = 0,04%. Такая ошибка не превышает предельно допустимое значение, составляющее 5%, и впол- не приемлема для нормальной рабо- ты порта USART. Теперь рассмотрим разряды трёх управляющих регистров: USART_CR1, USART_CR2 и USART_CR3. Р ЕГИСТР USART_CR1 Регистр USART_CR1 имеет следую- щие разряды: ● разряд 0 SBK управляет отправкой символа разрыва связи (0 – не посы- лать, 1 – посылать). ● разряд 1 RWU определяет режим приёмника USART (0 – приёмник активен, 1 – приёмник в «спящем» режиме); ● разряд 2 RE разрешает работу при- ёмника; ● разряд 3 TE разрешает работу пере- датчика; Таблица 1. Формат регистров порта USART Сдвиг Регистр 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0x00 USART_SR Резерв CTS LBD TXE TC RXNE IDLE ORE NE FE PE Reset value 0 0 1 1 0 0 0 0 0 0 0x04 USART_DR Резерв DR[8:0] Reset value 0 0 0 0 0 0 0 0 0 0x08 USART_BRR Резерв DIV_Mantissa[15:4] DIV_Fraction [3:0] Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x0C USART_CR1 Резерв UE M WAKE PCE PS PEIE TXEIE TCIE RXNEIE IDLEIE TE RE RWU SBK Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0x10 USART_CR2 Резерв LINEN STOP [1:0] CLKEN CPOL CPHA LBCL Резерв LBDIE LBDL Резерв ADD[3:0] Resert value 0 0 0 0 0 0 0 0 0 0 0 0 0 0x14 USART_CR3 Резерв STSIE CTSE RTSE DMAT DMAR SCEN NACK HDSEL IRLP IREN EIE Reset value 0 0 0 0 0 0 0 0 0 0 0 0x18 USART_ GTPR Резерв GT[7:0] PSC[7:0] Reset value 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Рис. 2. Формат кадра порта USART Старт бит Старт бит Старт бит Старт бит Стоп бит Стоп бит Бит0 Бит1 Бит2 Бит3 Бит4 Бит5 Бит6 Бит7 Бит8 Кадр ожидания (Idle frame) Кадр данных Бит паритета Следующий кадр данных Кадр разрыва (Break frame) © СТА-ПРЕСС
RkJQdWJsaXNoZXIy MTQ4NjUy