内容介绍
内容介绍
1.任务目的
实现USB-UART Hub,自己设计通信方式,实现USB到多路UART的收发。
2.硬件介绍
3.MCUXpresso Config Tools配置
NXP提供了MCUXpresso Config Tools v10这个非常方便的配置工具,可以快速生成IO初始化以及外设初始化的代码。这里我的主要配置如下:
IO初始化
配置了两个串口以及USB使用的IO。
时钟树
主时钟来源是外部的32MHz的晶振,通过PLL0分频倍频,主频为150MHz。
USB时钟来源是内部的96MHz时钟二分频后得到48MHz。
串口时钟来源也是内部的96MHz时钟二分频后得到48MHz。
外设初始化配置
这里将USB配置为从模式,并支持两个串口。
将串口配置为115200的频率。并使能收发。
4.主要代码
串口中断事件处理
当接受到串口发来的数据的时候,就会通过USB把数据发出去。
/* FLEXCOMM0_IRQn interrupt handler */
void FLEXCOMM0_FLEXCOMM_IRQHANDLER(void) {
/* Place your code here */
uint8_t data;
/* If new data arrived. */
if ((kUSART_RxFifoNotEmptyFlag | kUSART_RxError) & USART_GetStatusFlags(FLEXCOMM0_PERIPHERAL))
{
data = USART_ReadByte(FLEXCOMM0_PERIPHERAL);
(void)USB_DeviceCdcAcmSend(s_UsbInterface0CicVcom.cdcAcmHandle, USB_DIC_VCOM_IN_ENDPOINT, &data, 1);
}
/* Add for ARM errata 838869, affects Cortex-M4, Cortex-M4F
Store immediate overlapping exception return operation might vector to incorrect interrupt. */
#if defined __CORTEX_M && (__CORTEX_M == 4U)
__DSB();
#endif
}
USB接受到数据事件处理
当接受到USB来的数据的时候,就会调用串口的发送将数据给出去。
void USB_DeviceInterface0CicVcomTask(void)
{
usb_status_t error = kStatus_USB_Error;
if ((1 == s_UsbDeviceComposite->attach) && (1 == s_UsbInterface0CicVcom.startTransactions))
{
/* User Code */
if ((0 != s_recvSize) && (0xFFFFFFFFU != s_recvSize))
{
int32_t i;
/* Copy Buffer to Send Buff */
for (i = 0; i < s_recvSize; i++)
{
s_currSendBuf[s_sendSize++] = s_currRecvBuf[i];
}
s_recvSize = 0;
}
if (s_sendSize)
{
uint32_t size = s_sendSize;
s_sendSize = 0;
error = USB_DeviceCdcAcmSend(s_UsbInterface0CicVcom.cdcAcmHandle, USB_DIC_VCOM_IN_ENDPOINT, NULL, 0);
if (error != kStatus_USB_Success)
{
/* Failure to send Data Handling code here */
}
USART_WriteBlocking(FLEXCOMM0_PERIPHERAL, s_currSendBuf, size);
}
}
}
5.实际演示
接到电脑上时会出现两个串口设备。接上串口模块之后可以实现互相发送。
6.总结感想
作为一款通用性的芯片,而且是第一款M33内核的芯片,LPC55S69实在有太多东西值得挖掘。本身我也是NXP很忠实的用户,每一款新的MCU都会去尝尝鲜。不得不说,LPC55S69的表现确实很棒。
7.意见建议
这次活动挺好的,期待下一次的板卡。
附件下载
程序.zip
团队介绍
评论
0 / 100
查看更多
猜你喜欢
Funpack第十一期基于LPC55S69的USB转UART HUB使用LPC55S69 EVK制作了一个usb转串口hub,实现usb转两路串口
振青666
1557
Funpack第11期 项目:使用NXP官方开发板LPC55S69EVK,从SD卡中获取预存的图像数据,并显示在LCD屏幕上参加FunPack 第11期活动,选择任务二,项目相关的视频,如:使用的开发环境,硬件平台,软件平台
强者的心
1000
Funpack第11期LPC55S69-EVK上的Micropython移植基于NXP的LPC55S69-EVK与RT-Thread的Micropython移植,实现串口通信和控制IO口。
涵尘者
989