======Тестируем UART на процессорном модуле 1967ВН044====== В отличие от процессора цифровой обработки сигналов 1967ВН028, процессоры 1967ВН034/044 обладают куда более широким набором периферийных блоков: UART, SPI, SSI, МКИО, ARINC и даже контроллеры интерфейсов ЖКИ и видеокамеры. В наше распоряжение попал отладочный комплект 1967ВН044, точнее плата, на которую установлен процессор (модуль процессора для микросхемы 1967ВН044). К сожалению, чтобы протестировать контроллеры ЖКИ, видеокамеры, нужны дополнительные модули к нашей плате. Поэтому, для начала и с имеющимися ресурсами, попробуем протестировать UART. На процессорном модуле, используется микросхема FT232RL (Спецификация на микросхему доступна [[http://easyelectronics.ru/datasheet/FT232RL_V202.pdf|здесь]]), которая выполняет функцию преобразования USB <-> UART. Поэтому, не задумываясь берём шнур USB A - USB B и подключаем: на плате разъём XS7 и к PC. Также подсоединяем, как обычно, отладчик - разъём XP5 и подсоединяем питание разъём XP1 (НО плату пока не включаем (тумблер SA2)). ===== Создаем проект ===== Переходим к среде CM-LYNX. Тут все как обычно: создали новое рабочее пространство (workspace), а затем [[prog:spec:proj_codemaster-lynx#создание_и_настройка_проекта_на_примере_1967вн028|File->New->Project...]]. Подключаем библиотеку HAL, как описывалось в одной из предыдущих статей [[prog:spec:proj_codemaster-lynx:vn034#подключение_библиотек_hal|статей]]. Будем использовать библиотеку 1967VN044, так как по заявлению разработчиков, эта версия является более актуальной. Соответственно, располагается библиотека по следующему пути: \CM-LYNX\...\toolchain\1967VN044. ===== main.c ===== Сразу приведём пример кода с небольшими комментариями: // main.c #include //Данные для посылки uint8_t ucTestText[ ] = { 'H', 'e', 'l', 'l', 'o', ' ', 'f', 'r', 'o', 'm', ' ', '1', '9', '6', '7', 'V', 'N', '0', '4', '4', 0x0D, 0x0A }; int main(void) { //Объявление структуры UART_Init_type UARTInit; //Применение стандартных настроек UART HAL_UART_DefaultInitStruct( &UARTInit ); //Используем порт А2 и А3 как альтернативную функцию HAL_GPIO_Init( LX_GPIO_PA, GPIO_PIN_2 | GPIO_PIN_3, GPIO_PinMode_Alt ); //Настройка UART1 HAL_UART_Init( LX_UART1, &UARTInit ); //Разрешение прерываний UART1 HAL_UART_ITEnable( LX_UART1 ); //Глобальное разрешение прерываний HAL_Interrupt_GlobalEnable(); while( 1 ) { //Отправка данных HAL_UART_ITSend( LX_UART1, ucTestText, 22 ); //Ожидание передачи всех данных while( !UartTxRxStatus.TxReady[ UART1 ] ); } } Отдельно приведём функцию стандартных настроек UART: void HAL_UART_DefaultInitStruct( UART_Init_type* InitStruct ) { InitStruct->BitRate = 9600; //скорость работы интерфейса в битах InitStruct->WorkMode = UART_Mode_TxRx; //режим работы (передатчик, приемник, трансивер) InitStruct->OverSampling = UART_OverSampling_Normal; //Количество синхросигналов на один бит информации InitStruct->WordLength = UART_WordLen_8bit; //Длина передаваемых данных InitStruct->StopBits = UART_Stop_1bit; //Количество стоп-битов InitStruct->ParityMode = UART_Parity_Off; //Управление режимом проверки четности InitStruct->FIFOSize = UART_FIFOSize_8Byte; //Размер FIFO приемника и передатчика InitStruct->TXDMode = UART_TXD_Direct; //Управление режимом работы линии TXD InitStruct->DMACtrlErr = UART_DMACtrl_Dis; //Управление запросом к контроллеру DMA во время обнаружения ошибки приема } ===== PuTTY ===== Теперь компилируем проект, включаем питание платы (SA2), [[prog:spec:proj_codemaster-lynx#режим_debug|создаем конфигурацию отладки]] и переходим в перспективу Debug. Запускать программу пока рано, нам необходимо воспользоваться терминальной программой для принятия данных. Будем использовать PuTTY, загрузить её можно [[http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html|отсюда]]. При запуске программы открывается окно PuTTY Configuration (слева указана категория - Session). Первоначально необходимо задать Connection type: Serial. Следующим шагом указываем наш COM-порт в поле Serial line : COM9 (в моём случае) и задаем скорость - она равна 9600 это стандартное значение, его мы задавали в функции HAL_UART_DefaultInitStruct (). Перед тем, как задать номер COM-порта, необходимо посмотреть его в диспетчере устройств. {{dsp:putty1.png}} Теперь открываем COM-порт (open), возвращаемся в CM-LYNX в открытую перспективу Debug и нажимаем "play" или клавишу F8 {{prog:cmlynx:play1.png}} И процессор бесконечно нас приветствует! {{dsp:putty2.png}} ===== Вывод информации по UART с помощью printf () ===== Чтобы выводить информацию по UART с помощью printf () необходимо добавить описание стандартной функции fputc (). Основная статья -[[prog:debug:printfuart]]. int fputc(int ch, FILE *f) { HAL_UART_Send (LX_UART1, (uint8_t *) &ch, 1); return ch; }