======Тестируем 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;
}