852|6

2161

帖子

3

资源

版主

【国民技术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文件夹拷到目录下面。

image.png

在工程目录中添加编译的目录:

  image.png  删除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);
    }
}

编译通过后下载到开发板重启:电脑成功检测到串口端口:

image.png  用串口助手连接虚拟串口,向开发板发数据:开发板shell成功打印出来:

image.png  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, 下载次数: 2


回复

1918

帖子

0

资源

版主

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


回复

2161

帖子

3

资源

版主

表示无压力: image.png

image.png    

点评

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

回复

2161

帖子

3

资源

版主

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


回复

1918

帖子

0

资源

版主

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

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

点评

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

回复

2161

帖子

3

资源

版主

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

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


回复

2161

帖子

3

资源

版主

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

#define VIRTUAL_COM_PORT_DATA_SIZE              64

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


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

相关帖子
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
    推荐帖子
    运放电路:同相放大还是反相放大?

     电子电路中的运算放大器,有同相输入端和反相输入端,输入端的极性和输出端是同一极性的就是同相放大器,而输入端的极性和输出 ...

    求推荐散热片(铝质)加工厂家

    最近的项目中电路板元器件密度比较高,发热量比较大,密闭空间没法风冷;最后选的散热片传导散热,将热量导到壳体,然后外部水冷 ...

    讲一下MSP430程序库有关UART异步串口

    从常用的单片机是这两款:msp430f149,msp430f169。这两款单片机中均有两个增强型串行通信接口,都可以进行同步或是异步通信, ...

    求助一份51单片机与A4988控制四线无刷电机原理图及测试程序

    求助一份51单片机与A4988控制四线无刷电机原理图及测试程序。谢谢大佬

    单片机内核的中断及中断向基础知识

    单片机其他的中断源,比如ADC、SPI、PWM等。以外部中断0为例,在编程中常使用的方式为: void INT0()interrupt 0 using 1 ...

    安规耐压与漏电流问答

    1.为何产品要进行电气安规测试? 这是许多产品制造商最想问的一个问题,当然最普遍的回答是“因为安规标准中有规定。&rdqu ...

    关闭
    站长推荐上一条 1/8 下一条

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

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

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

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