3837|6

6960

帖子

11

TA的资源

版主

楼主
 

【国民技术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也是挺方便的。工程上传如下:

N32G45_USB.7z

4.7 MB, 下载次数: 27

最新回复

他有拆成64字节为一包吗?  详情 回复 发表于 2022-2-9 22:06
点赞 关注(1)
 
 

回复
举报

7159

帖子

2

TA的资源

版主

沙发
 

测试一下,发送大于64字节的数据,会有什么反应。

 
 
 

回复

6960

帖子

11

TA的资源

版主

板凳
 

表示无压力:

   

点评

他有拆成64字节为一包吗?  详情 回复 发表于 2022-2-9 22:06
 
 
 

回复

6960

帖子

11

TA的资源

版主

4
 

我就想象stm32那一样写成设备注册的样式,没找到资料。

 
 
 

回复

7159

帖子

2

TA的资源

版主

5
 
表示无压力: &nbsp; &nbsp;

他有拆成64字节为一包吗?

点评

我特意去翻了一下USB的接口buf,最长接收是64一包。  详情 回复 发表于 2022-2-12 08:51
 
 
 

回复

6960

帖子

11

TA的资源

版主

6
 
wangerxian 发表于 2022-2-9 22:06 他有拆成64字节为一包吗?

我特意去翻了一下USB的接口buf,最长接收是64一包。

 
 
 

回复

6960

帖子

11

TA的资源

版主

7
 

/* Private variables ---------------------------------------------------------*/
uint8_t USB_Rx_Buffer[VIRTUAL_COM_PORT_DATA_SIZE];

#define VIRTUAL_COM_PORT_DATA_SIZE              64

是DEMO的缘由吧,他直接就转去给rt_printf,所以没有什么问题。

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表