Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Настройка 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)) {} Т.о. функцию отправки одного байта данных можно написать следующим образом: //------------------------------------------------------------------------------------- { 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++); } } Популярное:
|
Последнее изменение этой страницы: 2017-03-11; Просмотров: 1739; Нарушение авторского права страницы