【国民技术N32G457评测】RT_Thread Studio 移植USB虚拟串口
[复制链接]
利用 N32G45 自带的 USB 功能,连接电脑 USB,虚拟出一个 USB 串口,实现电脑和开发板的数据通信。官方提供的MDK提供了例子,利用RT_Thread Studio,配置成USB后不能工作,现在就把例子中的MDK程序移植到rt_thread_studio。
1、在packages中新建usb_drvier文件夹,把例程中的Virtual_COM_Port文件夹拷到这里目录下面。再把Nationstech.N32G45x_Library.1.1.1\firmware\n32g45x_usbfs_driver文件夹拷到目录下面。
在工程目录中添加编译的目录:
删除Vitrual_COM_Port下面的main.c 与main.h
然后编译,会出很多报错,其中很多是n32g45x_it.c中的函数重复定义,删除重复函数。还有就是添加n32g45x.h头文件。编译通过后在applications的main.c中添加头文件以及USB初始化函数
#include <stdint.h>
#include <rtthread.h>
#include <rtdevice.h>
#include "hw_config.h"
#include "usb_lib.h"
#include "usb_pwr.h"
/* defined the LED1 pin: PB5 */
#define LED1_PIN 100
int main(void)
{
uint32_t Speed = 200;
/* set LED1 pin mode to output */
rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
USB_Interrupts_Config();
Set_USBClock();
USB_Init();
while (1)
{
rt_pin_write(LED1_PIN, PIN_LOW);
rt_thread_mdelay(Speed);
rt_pin_write(LED1_PIN, PIN_HIGH);
rt_thread_mdelay(Speed);
}
}
编译通过后下载到开发板重启:电脑成功检测到串口端口:
用串口助手连接虚拟串口,向开发板发数据:开发板shell成功打印出来:
USB虚拟串口接收函数为usb_endp.c中的void EP3_OUT_Callback(void),如果需要处理数据在这里处理。
/*******************************************************************************
* Function Name : EP3_OUT_Callback
* Description :
* Input : None.
* Output : None.
* Return : None.
*******************************************************************************/
void EP3_OUT_Callback(void)
{
uint16_t USB_Rx_Cnt;
/* Get the received data buffer and update the counter */
USB_Rx_Cnt = USB_SilRead(EP3_OUT, USB_Rx_Buffer);
/* USB data will be immediately processed, this allow next USB traffic being
NAKed till the end of the USART Xfer */
USB_To_USART_Send_Data(USB_Rx_Buffer, USB_Rx_Cnt);
/* Enable the receive of data on EP3 */
USB_SetEpRxValid(ENDP3);
}
USB虚拟串口发送函数为hw_config.c的
/*******************************************************************************
* Function Name : USB_To_USART_Send_Data.
* Description : send the received data from USB to the UART 0.
* Input : data_buffer: data address.
Nb_bytes: number of bytes to send.
* Return : none.
*******************************************************************************/
void USB_To_USART_Send_Data(uint8_t* data_buffer, uint8_t Nb_bytes)
{
uint32_t i;
for (i = 0; i < Nb_bytes; i++)
{
USART_SendData(USART1, *(data_buffer + i));
while(USART_GetFlagStatus(USART1, USART_FLAG_TXDE) == RESET);
}
}
大家可以根据需要去修改,用上usb_虚拟串口,省得个USB—TTL也是挺方便的。工程上传如下:
|