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!










