Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Настройка USART с помощью библиотеки StdPeriph.



Программирование USART в STM32 происходит по следующему алгоритму:

1. Подключить файл, отвечающий за программирование USART в StdPeriph.

2. Выбрать один из доступных USART и определить номера выводов, на которые выведен данный USART.

3. Включить тактирование порта (портов), на который выведен USART.

4. Инициализировать выводы USART на работу в альтернативном режиме.

5. Включить тактирование USART.

6. Инициализировать USART.

7. Разрешить глобальные прерывания от USART.

8. Разрешить прерывания от USART по завершению приема байта.

9. Включить работу USART.

На этом инициализация заканчивается.

Рассмотрим подробнее каждый пункт.

Подключение заголовочного файла

Для подключения USART надо расскоментировать строку #include " stm32f4xx_usart.h" в файле stm32f4xx_conf.h.

Определение номера выводов, на которые выведен USART

Для определения номеров выводов, на которые выведен данный USART, используется таблица с определением всех выводов МК (см. файл stm32f4xx pinout.pdf, стр. 45- 57).

Включение тактирования

Для включения тактирования порта надо написать строку:

 

RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE);

Где х – буква, обозначающая порт.

Инициализация выводов USART на работу в альтернативном режиме

МК Stm32f4xx имеет в наличии 3 USART. Каждый вывод USART-а может быть подключен к одному из двух заранее заданных выводов. Конкретные номера выводов можно узнать из технической документации на конкретный микроконтроллер, в которой описываются значения всех выходов.

Подключение выводов к USART производится функцией GPIO_PinAFConfig.

Например, так:

GPIO_PinAFConfig(GPIOх, GPIO_PinSourceY, GPIO_AF_USART3),

где х – буква, обозначающая порт, на котором находится необходимый вывод. Y – номер вывода.

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

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

Для правильной работы входного вывода USART, его требуется подтянуть к питанию, т.к. пассивным состоянием USART считается «1».

Скорость обычно выбирают равной 50МГц.

Включение тактирования USART

Включение тактирования USART производится функцией:

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USARTх, ENABLE);

Где х – номер выбранного USART.

Список устройств, которые включаются этой функцией можно найти в файле stm32f10x_rcc.h.

Инициализация USART.

Структура, инициализирующая USART, описана в файле stm32f4xx_usart.h и обозначается как USART_InitTypeDef.

Примечание : Прежде всего, разберемся, как же заполнять подобные структуры. Сама структура описана, как уже было сказано в файле stm32f4xx_usart.h. Рядом с каждым параметром этой структуры дано описание, для чего нужен тот или иной параметр и как он инициализируется. Если для инициализации какого-то параметра нужно использовать определённые ниже define, то в комментариях к параметру указывается ссылка на этот define начинающаяся ключевым словом @ref. Далее следует слово, набив которое в поиск, можно без труда отыскать нужные define. Например, параметр USART_StopBits. У него в комментариях указана строка: @ref USART_Stop_Bits. Скопировав слово USART_Stop_Bits в поиск можно найти, что данный параметр принимает одно из 4-х значений: USART_StopBits_1, USART_StopBits_0_5, USART_StopBits_2, USART_StopBits_1_5. Последний define проверяет, является ли указанный define элементом USART_Stop_Bits. Для инициализации он не используется.

Рассмотрим элементы этой структуры:

В USART_BaudRate описывается скорость передачи и приёма данных. Микроконтроллер может выставить практически любую скорость передачи. Это значение ограничено только частотой тактирования. Причём ограничения касаются не только максимального диапазона, но и точности тактирования USART. Обычно скорость передачи USART принимает одно из следующих стандартных значений: 300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400, 460800, 921600. По-умолчанию это значение обычно принимается равным 9600. Задаётся в численном виде.

USART_WordLength задаёт длину одной посылки. Stm32f4xx поддерживает только 2 длины в 8 и 9 бит, которые обозначаются соответственно USART_WordLength_8b и USART_WordLength_9b. По умолчанию это значение обычно принимается равным 8 бит.

USART_StopBits – задаёт количество стоп бит. По умолчанию количество стоп-бит равно 1.

USART_Parity – проверка на чётность для увеличения вероятности правильной передачи данных. По умолчанию проверка обычно отключается.

USART_Mode определяет режим работы USART. Будет ли тот работать только на передачу, только на приём или сразу в обе стороны. Обозначается соответственно USART_Mode_Tx, USART_Mode_Rx и USART_Mode_Tx|USART_Mode_Rx.

USART_HardwareFlowControl включает аппаратное управление потоком. Может принимать одно из следующих значений:

USART_HardwareFlowControl_None

USART_HardwareFlowControl_RTS

USART_HardwareFlowControl_CTS

USART_HardwareFlowControl_RTS_CTS

По-умолчанию управление потоком обычно отключается.

Инициализация производится функцией USART_Init. Например:

USART_Init(USARTх, & USART_InitStructure);

где х – номер используемого USART, USART_InitStructure – имя переменной, в которой содержится структура с параметрами.

 

Включение глобальных прерываний от USART

Глобальные прерывания от USART включаются следующей строкой:

NVIC_EnableIRQ(USARTх_IRQn),

где х – номер используемого USART.

 

Включение прерывания от USART по завершению приема байта

Прерывание по завершению приема байта включается следующей строкой:

USART_ITConfig(USARTх, USART_IT_RXNE, ENABLE),

где х – номер используемого USART.

 

Включение USART

Включение USART производится следующей строкой:

USART_Cmd(USARTх, ENABLE),

где х – номер используемого USART.

 

Функция обработки прерывания от USART

Опишем функцию прерывания от USART, которая возвращает принятый байт. Необходимо учитывать 2 момента:

1) Флаг прерывания аппаратно не сбрасывается.

2) У USART все прерывания вызывают одну и ту же функцию.

Т.е. необходимо различать прерывания от разных источников (например, по завершению приема или по завершению передачи) и программно сбрасывать флаг прерывания. Функция, вызываемая при возникновении прерывания от USART2, выглядит так:

void USART2_IRQHandler(void)

{

uint8_t Res_data=0;

// Обработка события RXNE (приёма)

if ( USART_GetITStatus(USART2, USART_IT_RXNE) )

{

// очистка бита прерывания

USART_ClearITPendingBit(USART2, USART_IT_RXNE);

//Сюда пишется, что должно произойти при приёме одного байта:

Res_data = USART_ReceiveData(USART2); //Приняли байт

}

// Обработка события TXE

if ( USART_GetITStatus(USART2, USART_IT_TXE) )

{

// очистка бита прерывания

USART_ClearITPendingBit(USART2, USART_IT_TXE);

//Сюда пишется, что должно произойти после передачи байта.

}

}

 

Отправка байта по USART

Перед отправкой байта необходимо дождаться завершения отправки предыдущего байта с помощью строки:

while (! USART_GetFlagStatus(USART1, USART_SR_TXE)) {}

Т.о. функцию отправки одного байта данных можно написать следующим образом:
//-------------------------------------------------------------------------------------
//Функция, отправляющая байт в USART

//-------------------------------------------------------------------------------------
void send_to_USART(uint8_t data)

{

while(! (USART2-> SR & USART_SR_TC)); //Ждем пока бит TC в регистре SR

//станет равен 1

USART2-> DR=data; //Отсылаем байт через USART

}

Параметр функции data является байтом, отсылаемым через USART. Например, отправить через USART байт, в котором записано число 48, можно при помощи следующей строки:

send_to_USART(48);

 

Отправка строки с текстом по USART

Для передачи строки данных можно использовать процедуру:

void SendString_to_ USART (const char *str)

{

while(*str! = '\0')

{

while (USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);

USART_SendData(USART1, *str++);

}

}


Поделиться:



Популярное:

  1. III. Задачи, решаемые организацией с помощью ИСУ и ИТУ.
  2. VI. Выберите подчинительный союз, с помощью которого стиль и смысл высказывания передается точнее других.
  3. VIII. Проделки с помощью прута и колокольчика
  4. А. Сделайте свое лицо красивым с помощью массажа рта
  5. Анализ данных с помощью команд Подбор параметра и Поиск решения
  6. Анализ — это такой логический приём, с помощью которого мы мысленно расчленяем приметы, явления, выделяя отдельные их части, свойства.
  7. Билет №35 .Вопрос 3 Создание защищенных сетей VPN с помощью IPSec
  8. В нормальном мозге полушарие, которое ошиблось, обращается за помощью к другому.
  9. В. Настройка параметров брандмауэра.
  10. Ввод формулы с помощью программы MS Equation.
  11. Владимир Путин: «Нарастить туристический потенциал можно только с помощью комплексного подхода»
  12. Второй аспект проверки модели связан с установлением степени, в которой информация, получаемая с ее помощью, действительно помогает руководству совладать с проблемой.


Последнее изменение этой страницы: 2017-03-11; Просмотров: 1739; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.021 с.)
Главная | Случайная страница | Обратная связь