FRDM-K22F является одним из последних членов семей борта Свободы: 512 КБайт флэша, 128 KB RAM и обычные компоненты доски свободы на нем. К сожалению, Freescale решила не заполнять разъем платы micro-SD на плате, поэтому с этой точки зрения FRDM-K64F является более выгодным . Но у платы есть USB, так что это делает его еще интересным. И это то, о чем этот пост: добавление USB к плате FRDM-K22F за несколько минут …
Обновление программного обеспечения
В этой статье я использую Kinetis Design Studio с компонентами Processor Expert.
Вам нужна «Экспертная поддержка процессора для Kinetis K22F / KV31F @ 120 / 100MHz Service Pack». Вы получаете это обновление с помощью меню «Справка»> «Установить новое программное обеспечение» и используете
http://freescale.com/lgfiles/updates/Eclipse/KDS
обновить сайт:
Кроме того, вам нужны последние компоненты McuOnEclipse Processor Expert от SourceForge ( https://sourceforge.net/projects/mcuoneclipse/files/PEx%20Components/ ), см. « Выпуски McuOnEclipse на SourceForge ».
Создание проекта
Создайте новый проект для Processor Expert в Eclipse и для устройства MK22FN512xxx12 :
Вы * не * выберите опцию Kinetis SDK, только выбрать процессор Эксперт:
Конфигурация часов
K22 может работать до 120 МГц. Я настраиваю его на максимальную скорость, аналогичную K64F (см. « FRDM-K64F на максимальной скорости 120 МГц »). У меня включен внешний кристалл 8 МГц:
MCG установлен в PEE с выходной частотой ФАПЧ 120 МГц
Системные часы установлены на максимально возможные значения:
Конфигурация USB
Добавьте компонент FSL_USB_Stack в проект. Я использую здесь класс USB CDC Device. Настройте его для использования Init_USB_OTG_VAR0 и включения класса USB CDC Device:
Включите синхронизирующий вентиль и пусть он использует часы PLL / FLL с выходом делителя часов в качестве источника синхронизации. Чтобы построить необходимые тактовые частоты дискретизации USB 48 МГц из тактовых импульсов PLL 120 МГц, используйте множитель 2 с делителем 5:
Finally, select the K22FN120 as CPU in the USB CDC sub component:
That’s it!
Application Code
What is missing is now the application code. It can be very simple as this:
#include <stdio.h> static uint8_t cdc_buffer[USB1_DATA_BUFF_SIZE]; static uint8_t in_buffer[USB1_DATA_BUFF_SIZE]; static void CDC_Run(void) { int i, cnt = 0; uint32_t val = 0; unsigned char buf[16]; for(;;) { while(CDC1_App_Task(cdc_buffer, sizeof(cdc_buffer))==ERR_BUSOFF) { /* device not enumerated */ LED1_Neg(); LED2_Off(); WAIT1_Waitms(10); } LED1_Off(); LED2_Neg(); if (CDC1_GetCharsInRxBuf()!=0) { i = 0; while( i<sizeof(in_buffer)-1 && CDC1_GetChar(&in_buffer[i])==ERR_OK ) { i++; } in_buffer[i] = '\0'; (void)CDC1_SendString((unsigned char*)"echo: "); (void)CDC1_SendString(in_buffer); UTIL1_strcpy(buf, sizeof(buf), (unsigned char*)"val: "); UTIL1_strcatNum32u(buf, sizeof(buf), val); UTIL1_strcat(buf, sizeof(buf), (unsigned char*)"\r\n"); (void)CDC1_SendString(buf); val++; } else { WAIT1_Waitms(10); cnt++; if ((cnt%1024)==0) { /* from time to time, write some text */ (void)CDC1_SendString((unsigned char*)"Type some text and it will echo.\r\n"); CDC1_SendBlock((unsigned char*)"hello?\r\n", sizeof("hello?\r\n")-1); } } } }
Summary
The K22F is the latest addition to the list of supported USB microcontroller in the FSL_USB_Stack component. The example project featuring USB CDC is available onGitHub.
Happy USBing!