0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

雅特力AT32 MCU USB设备库的架构和使用方法

0739hhbb 来源:AT32 MCU 雅特力科技 2023-02-22 10:09 次阅读

AT32 USB设备协议库

这部分主要介绍AT32 USB设备库的结构和库的使用方法,AT32 USB是基于USB2.0全速设备,不支持USB2.0高速设备。这里库的作用是用来管理USB外设和实现USB的基本协议,使开发者能够更快的上手开发。USB Deivce库包含以下几个模块如图1:
  • 用户应用程序

    此部分为开发者根据应用具体需求开发应用程序。

  • USB Core Driver和USB设备类

    USB Core Driver:此部分实现USB设备标准协议栈,标准请求等接口

    USB设备类:此部分实现一个具体USB设备的描述和设备请求。

  • USB硬件底层接口

    此部分实现硬件寄存器抽象接口

  • USB/OTG外设

图1. USB库结构f9323596-b216-11ed-bfe3-dac502259ad0.png    

AT32 USB库文件

如下是AT32 USB应用工程结构图:图2. AT32工程结构f943cee6-b216-11ed-bfe3-dac502259ad0.pngCore Driver库路径:OTGFS-->middlewaresusb_driversUSBFS-->middlewaresusbd_driversDevice Class库路径:middlewaresusbd_class如下是USB库文件列表:表1. USB库文件列表f96d1f62-b216-11ed-bfe3-dac502259ad0.png表2. USB设备类型文件列表f9962538-b216-11ed-bfe3-dac502259ad0.png  

USB设备库文件说明

USB库实现USB设备标准请求,同时实现USB规格里面的4种传输类型(control,interrupt,bulk,isochronous)的函数接口。图3.USB库文件结构f9d3e382-b216-11ed-bfe3-dac502259ad0.png  

USB设备文件函数接口

usbd_int.c函数接口usbd_int.c主要处理底层中断,不同USB外设,此部分会根据外设不同而有所改变。AT32系列芯片USB外设存在USBFS和OTGFS两种外设,此部分函数接口基本相同。表3.usbd_int函数接口fa10aa7e-b216-11ed-bfe3-dac502259ad0.png  usbd_core.c函数接口usbd_core.c此文件封装不同的usb接口用于不同的地方调用,包括一些接收,发送函数等。表4.usbd_core函数接口fa2ac83c-b216-11ed-bfe3-dac502259ad0.png  usbd_sdr.c函数接口usbd_sdr.c此文件处理USB一些标准请求。表5.usbd_sdr函数接口fa61a870-b216-11ed-bfe3-dac502259ad0.png支持的标志设备请求如下表:表6. 标准设备请求fa719c94-b216-11ed-bfe3-dac502259ad0.png  usbd_xx_class.c函数接口usbd_xx_class.c 此文件为具体设备类型的数据处理,通过结构体函数来实现不同设备类型数据的处理。开发者根据不同的设备类型,来实现下面函数结构体中的函数,达到不同应用结果。函数结构体如下:表7.设备class函数结构体fa9affb2-b216-11ed-bfe3-dac502259ad0.png表8.设备class函数接口fab19236-b216-11ed-bfe3-dac502259ad0.png  usbd_xx_desc.c函数接口usbd_xx_desc.c此文件为设备描述文件,设备描述信息都通过此文件的函数接口返回给主机。表9.设备描述函数结构体fad473f0-b216-11ed-bfe3-dac502259ad0.png表10.设备描述接口函数faefc38a-b216-11ed-bfe3-dac502259ad0.png  其它参数函数的参数结构体如下,USB设备库中参数传递使用结构体usbd_core_type,如下图:图4.全局结构体fb273eb4-b216-11ed-bfe3-dac502259ad0.pngUSB设备的连接状态如下图:连接状态包含:
  • 默认状态

  • 地址状态

  • 配置状态

  • 挂起状态

可使用usbd_connect_state_get函数查询当前USB设备的连接状态。图5.USB设备连接状态fb4eb944-b216-11ed-bfe3-dac502259ad0.pngUSB设备返回值,USB函数接口使用如下函数返回值。图6.函数返回值fb64146a-b216-11ed-bfe3-dac502259ad0.png  

端点FIFO分配

USB要正常收发数据,在初始化时需要为每个端点分配发送/接收的FIFO,FIFO的大小可以根据端点上传输的最大包长度确认。注意,分配给所有端点FIFO大小的和不能超过系统分配给USB缓冲区的最大长度,具体USB的缓冲区大小参考RM上的描述。开发者可以参考例程usb_conf.h为每个端点自定义分配FIFO。另外使用USBFS和OTGFS两种不同的外设时,usb_conf.h中对端点FIFO分配稍有不同。 USBFS外设端点FIFO分配USBFS外设端点分配实现了两种分配方式,一种自动分配,一种是用户自定义分配。
  • 自动分配:

    1. 通过打开usb_conf.h中USB_EPT_AUTO_MALLOC_BUFFER宏开启自动分配功能

    2. 在调用打开端点函数(usbd_ept_open)时自动根据传入的最大包长度自动分配FIFO

    3. 如果使用双缓冲模式(同步端点,双缓冲Bulk)时,在打开端点前先调用(usbd_ept_dbuffer_enable)表示使用双缓冲模式,可参考audio例程。

    4. 自动分配audio例程配置如下:

    usb_conf.h

    fb8f2ef2-b216-11ed-bfe3-dac502259ad0.png

    audio_class.c:端点打开

    fbb7e18a-b216-11ed-bfe3-dac502259ad0.png

  • 自定义分配:

    1. 关闭usb_conf.h中USB_EPT_AUTO_MALLOC_BUFFER宏开启自定义分配

    2. 在调用打开端点函数(usbd_ept_open)时调用usbd_ept_buf_custom_define函数自定义为端点分配FIFO,参考vcp_loopback例程。

    3. vcp_loopback例程自定义分配配置

    usb_conf.h:

    fbe61cee-b216-11ed-bfe3-dac502259ad0.png

    cdc_class.c端点打开:

    fc12f61a-b216-11ed-bfe3-dac502259ad0.png

OTGFS外设端点FIFO分配OTGFS对于端点的接收缓冲是共享的,因此对于所有的OUT端点,只需要分配一个接收FIFO。对发送缓冲区则需要为每个发送端点分配一块自己专用的FIFO。支持的端点个数请参考对应型号的RM。OTGFS的端点分配都需要开发者根据端点支持的最大包长度进行分配,注意usb_conf.h中对端点分配的FIFO大小单位为word(Byte)。以vcp_loopback例程为例:fc40a02e-b216-11ed-bfe3-dac502259ad0.png  

USB设备初始化

在使用USB时,需要对USB的寄存器做一些基本的初始化,通过调用USB的初始化函数完成这部分的操作,对于外设USBFS和OTGFS在初始化时所调用的函数一定的区别。 USBFS外设初始化USBFS初始化函数usbd_core_init包含5个参数:fc7b6bc8-b216-11ed-bfe3-dac502259ad0.png例程vcp_loopback的初始化如下:usbd_core_init(&usb_core_dev, USB, &class_handler, &desc_handler, 0); OTGFS外设初始化OTGFS初始化函数usbd_init包含5个参数:fc99ec24-b216-11ed-bfe3-dac502259ad0.png例程vcp_loopback的初始化如下:fcbd976e-b216-11ed-bfe3-dac502259ad0.png  

USB设备中断处理

USB中断入口函数usbd_irq_handler处理所有USB中断,包括Reset,端点收发数据,SOF,挂起,唤醒等中断,下面介绍一些典型的中断处理。图7.USB中断处理函数fccdc5b2-b216-11ed-bfe3-dac502259ad0.png  Reset中断处理当USB设备在总线上检测到Reset信号时,将产生Reset中断。软件在收到Reset中断时,需要做基本的初始化,用于后面的枚举处理。Reset中断处理函数usbd_reset_handler:
  • 端点FIFO初始化

  • 设备地址设置为0

  • 端点0初始化

  • 调用设备类的事件函数

    udev->class_handler->event_handler(udev, USBD_RESET_EVENT);

端点中断处理当USB端点收发数据完成时,将产生对应的端点完成中断,端点完成中断处理发送和接收的数据。中断处理函数:usbd_xeptx_handler SOF中断处理打开SOF中断之后,USB设备在每收到一个主机发送的SOF就会产生SOF中断。中断处理函数:usbd_sof_handler
  • 中断处理函数会调用设备类的SOF处理函数

    udev->class_handler->sof_handler(udev);

Suspend中断处理当总线满足挂起条件时,USB设备会产生一个挂起中断,开发者可根据此中断判断是否需要进入低功耗模式。中断处理函数:usbd_suspend_handler
  • 连接状态设置为挂起状态

  • 设置设备进入挂起状态

  • 调用设备类的事件处理函数

    udev->class_handler->event_handler(udev, USBD_SUSPEND_EVENT);

Wakeup中断处理当设备在挂起状态时,如果总线上有wakeup信号,USB设备将产生wakeup中断。中断处理函数:usbd_wakeup_handler
  • 设备退出挂起状态

  • 连接状态设置为进入挂起之前的状态

  • 调用设备类事件处理函数

    udev->class_handler->event_handler(udev, USBD_WAKEUP_EVENT);

USB设备端点数据处理流程

USB设备在收到主机发送的数据包之后,对应端点0的数据(IN/OUT/SETUP)会做单独处理,其它端点的数据会调用设备类的IN/OUT handler进行数据处理。如下图所示数据的处理过程:图8.端点数据处理流程fcf323de-b216-11ed-bfe3-dac502259ad0.png图9. Setup处理流程fd1a6c14-b216-11ed-bfe3-dac502259ad0.png  USB控制端点枚举流程当设备接到主机之后,通过控制端点(端点0)进行枚举动作,典型的枚举流程图如下:图10.USB枚举流程fd4835fe-b216-11ed-bfe3-dac502259ad0.pngUSB控制传输过程包含SETUP-DATA-STATUS三个阶段,如下是一个主机获取设备信息的传输过程GET_DESCRIPTOR:图11 Get Descriptorfd6480b0-b216-11ed-bfe3-dac502259ad0.png如下是USB库处理上图Get Descriptor的流程:图12. USB库处理Get Descriptor调用流程fda5eec4-b216-11ed-bfe3-dac502259ad0.pngUSB设备请求格式(Setup请求)图13.Setup请求格式fde1e91a-b216-11ed-bfe3-dac502259ad0.png  USB应用端点处理流程应用端点指客户实际应用使用到的非0端点,包括Bulk,interrupt,ISO等端点类型,这些端点的数据通回调函数in_handler和out_handler进行处理。开发者只需要在xxx_class.c中class_in_handler和class_out_handler里面实现具体端点的数据处理即可。IN端点数据处理:图14.IN端点数据处理fe194306-b216-11ed-bfe3-dac502259ad0.pngOUT端点数据处理:图15.OUT端点数据处理fe3b6562-b216-11ed-bfe3-dac502259ad0.png  

USB设备类型例程

本章将说明使用AT32 USB设备库实现不同的设备类型的例程。目前实现的设备例程如下:
  • Audio

  • custom_hid

  • keyboard

  • mouse

  • msc(mass strorage)

  • printer

  • vcp_loopback

  • virtual_msc_iap

  • composite_vcp_keyboard

  • hid_iap

Audio例程

Audio例程使用audio V1.0的协议实现一个Speaker和Microphone,传输Audio数据使用同步传输,Speaker使用同步OUT传输,Microphone使用同步IN传输。Audio的例程运行在AT-START评估板上,Audio Speaker和Mircophone是基于Audio Arduino Demo Board进行实现,实验过程中需要连接AT-START和Audio Arduino Board,更多开发板信息请参考《UM_Audio Arduino Daughter Board_V1.0/V2.0》,Audio协议请参数《Universal Serial Bus Device Class Define for Audio Device V1.0》。 实现功能实现一个Speaker和Microphone的Audio复合设备,可以同时进行音频播放和录音。Speaker功能:
  • 支持16K,48K采样率

  • 支持采样率切换

  • 支持16bit采样

  • 支持静音

  • 支持音量调节

  • 支持feedback功能

  • 支持双通道

Microphone功能:
  • 支持16K,48K采样率

  • 支持采样率切换

  • 支持16bit采样

  • 支持静音

  • 支持音量调节

  • 支持双通道

外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举以及Audio部分控制。

  • 端点1 IN:用于Microphone录音数据

  • 端点1 OUT:用于Speaker播放数据

  • 端点2 IN:用于Feedback数据

I2C
  • 使用I2C发送控制信息到音频Board

I2S:
  • 使用I2S1发送数据到音频board(speaker)

  • 使用I2S2从音频board接收数据(microphone)

DMA
  • 使用DMA1通道3传输I2S1的数据

  • 使用DMA1通道4传输I2S2的数据

TIMER:
  • 使用TIMER产生Codec所需要的时钟

Audio设备实现USB Audio设备类实现源文件在audio_class.c和audio_desc.c中,外部codec的控制以及音频数据的处理都在audio_codec.c中实现,根据主机的请求设置会调用到audio_codec.c中具体的设置函数。另外需要特别注意关于USB设备端点FIFO大小的分配在usb_conf.h中配置,此部分根据具体端点传输的最大包长度进行分配。 1. 设备描述:(audio_desc.c/h
  • Audio设备的描述(g_usbd_descriptor)

  • Audio设备的配置描述信息(g_usbd_configuration)

    AC interface

    Mricrophone Streaming interface

    Microphone Terminal INPUT/OUTPUT

    Microphone Feature Unit

    Microphone Endpoint

    Speaker Streaming interface

    Speaker Terminal INPUT/OUTPUT

    Speaker Feature Unit

    Speaker Endpoint

    Feedback Endpoint

  • Lang id (g_string_lang_id)

  • 序列号(g_string_serial)

  • 厂商产品ID(audio_desc.h)

    fe573706-b216-11ed-bfe3-dac502259ad0.png

  • 制造商、产品名、配置描述、接口描述(audio_desc.h)

    fe7439fa-b216-11ed-bfe3-dac502259ad0.png

2. 数据处理部分(audio_class.c/h audio_codec.c/h
  • 端点初始化(class_init_handler)

    fe9b5bc0-b216-11ed-bfe3-dac502259ad0.png

  • 端点清除(class_clear_handler)

    feb2576c-b216-11ed-bfe3-dac502259ad0.png

  • Audio控制请求(class_setup_handler)

    实现如下audio控制请求:

    fed7e536-b216-11ed-bfe3-dac502259ad0.png

    ff0152fe-b216-11ed-bfe3-dac502259ad0.png

  • Audio音量、静音、采样率设置(class_ept0_rx_handler)

    此函数用于接收完主机发送的设置数据之后进行处理,包括设置音量,静音,以及采样率的设置。

    ff387b94-b216-11ed-bfe3-dac502259ad0.png

  • Microphone和Feedback数据传输(class_in_handler)

    ff659a34-b216-11ed-bfe3-dac502259ad0.png

  • Speaker数据接收(class_out_handler)

    ff7e6014-b216-11ed-bfe3-dac502259ad0.png

  • audio_codec.c中实现codec具体的控制以及数据处理,需要实现如下函数:

    ff8f0e00-b216-11ed-bfe3-dac502259ad0.png

    以上函数可根据例程里的方式进行实现,也可以根据开发者实际使用的codec来进行修改,对于codec的初始化部分,在这里将不再讲述。

  • audio例程功能配置

    audio_conf.h中可以对当前audio例程进行配置,例如:是否需要speaker功能,支持采样率等,有如下选项配置:

    ffd80c04-b216-11ed-bfe3-dac502259ad0.png

如何根据Audio例程进行开发本章将简单描述如何修改audio例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改audio配置(audio_conf.h)

  • 根据功能需求修改设备描述信息(audio_desc.c, audio_desc.h)

    设备描述信息(g_usbd_descriptor)

    设备配置描述信息(g_usbd_configuration)

    其它描述

  • 根据功能修改要使用端点(audio_class.c, audio_class.h)

    端点定义(audio_class.h)

    端点初始化(class_init_handler,class_clear_handler)

  • 修改使用的Audio控制请求

    控制请求修改(class_setup_handler)

    控制请求设置处理(class_ept0_rx_handler)

  • Audio数据处理修改

    IN数据处理(class_in_handler)

    OUT数据处理(class_out_handler)

  • 根据需求修改端点FIFO大小分配(usb_conf.h)

  • 根据具体需求实现codec函数接口(audio_codec.c)

custom_hid例程

custom_hid实现一个HID(human interface device)功能,与上位机(Artery_UsbHid_Demo)通信完成一些简单的交互操作,HID使用中断传输与上位机通信,例程在AT-START开发板上运行,上位机可在官网下载,关于HID协议参考《Human Interface Devices (HID) V1.11》。 实现功能
  • 上位机显示按键状态

  • 通过上位机控制开发板LED等开关状态

  • HID数据回环功能

外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举

  • 端点1 IN:用于数据发送

  • 端点1 OUT:用于数据接收

custom_hid设备实现custom_hid设备类实现源代码主要在custom_hid_class.c和custom_hid_desc.c中,这两个源文件实现了对设备的描述和设备的处理。 1. 设备描述:(custom_hid_desc.c/h)
  • custom hid设备描述(g_usbd_descriptor)

  • custom hid设备配置描述(g_usbd_configuration)

    HID interface

    HID Endpoint

  • custom hid report描述(g_usbd_hid_report)

    HID_REPORT_ID_2(LED2)

    HID_REPORT_ID_3(LED3)

    HID_REPORT_ID_4(LED4)

    HID_REPORT_ID_5(BUTTON)

    HID_REPORT_ID_6(LOOPBACK DATA)

  • Lang id(g_string_lang_id)

  • 序列号(g_string_serial)

  • 厂商产品ID(custom_hid_desc.h

    fff20f3c-b216-11ed-bfe3-dac502259ad0.png

  • 制造商、产品名、配置描述、接口描述(custom_hid_desc.h)

    000a149c-b217-11ed-bfe3-dac502259ad0.png

2. 数据处理部分(custom_hid_class.c/h)
  • 端点初始化(class_init_handler)

    0031ae8a-b217-11ed-bfe3-dac502259ad0.png

  • 端点清除(class_clear_handler)

    005768d2-b217-11ed-bfe3-dac502259ad0.png

  • HID设备类请求(class_setup_handler)

    实现如下请求:

    SET_PROTOCOL

    GET_PROTOCOL

    SET_IDLE

    GET_IDLE

    SET_REPORT

    代码如下:

    0082eae8-b217-11ed-bfe3-dac502259ad0.png

  • Custom_HID发送数据

    00b64708-b217-11ed-bfe3-dac502259ad0.png

  • Custom_HID接收数据

    00c4f190-b217-11ed-bfe3-dac502259ad0.png

  • 数据处理

    00d5c81c-b217-11ed-bfe3-dac502259ad0.png

如何根据custom hid例程进行开发本章将简单描述如何修改custom_hid例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(custom_hid_desc.c, custom_hid_desc.h)

    设备描述信息(g_usbd_descriptor)

    设备配置描述信息(g_usbd_configuration)

    设备报告描述符(g_usbd_hid_report)

    其它描述

  • 根据功能修改要使用端点(custom_hid_class.c, custom_hid_class.h)

    端点定义(custom_hid_class.h)

    端点初始化(class_init_handler,class_clear_handler)

  • 修改使用的custom_hid控制请求

    控制请求修改(class_setup_handler)

    控制请求设置处理(class_ept0_rx_handler)

  • custom_hid发送接收数据处理修改

    IN数据处理(class_in_handler)

    OUT数据处理(class_out_handler)

  • 根据需求修改端点FIFO大小分配(usb_conf.h)

  • 修改数据处理部分

keyboard例程

keyboard实现一个键盘功能,使用中断传输与上位机通信,例程在AT-START开发板上运行,通过按键发送字符串到主机。 实现功能
  • 通过按键发送字符串(”Keyboard Demo”)到主机

外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举

  • 端点1 IN:用于数据发送

keyboard设备实现keyboard设备类实现源代码主要在keyboard_class.c和keyboard_desc.c中,这两个源文件实现了对设备的描述和设备的处理。 1. 设备描述:(keyboard_desc.c/h
  • keyboard设备描述(g_usbd_descriptor)

  • keyboard设备配置描述(g_usbd_configuration)

    keyboard interface

    keyboard endpoint

  • keyboard report描述(g_usbd_hid_report)

  • Lang id(g_string_lang_id)

  • 序列号(g_string_serial)

  • 厂商产品ID(keyboard_desc.h)

    00f4e530-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、产品名、配置描述、接口描述(keyboard_desc.h)

    01087fdc-b217-11ed-bfe3-dac502259ad0.png

2. 数据处理部分(keyboard_class.c/h
  • 端点初始化(class_init_handler)

    013759d8-b217-11ed-bfe3-dac502259ad0.png

  • 端点清除(class_clear_handler)

    0154ab78-b217-11ed-bfe3-dac502259ad0.png

  • HID设备类请求(class_setup_handler)

    实现如下请求:

    SET_PROTOCOL

    GET_PROTOCOL

    SET_IDLE

    GET_IDLE

    SET_REPORT

  • keyboard发送数据

    01751732-b217-11ed-bfe3-dac502259ad0.png

  • keyboard字符数据处理

    018ed0e6-b217-11ed-bfe3-dac502259ad0.png

如何根据keyboard例程进行开发本章将简单描述如何修改keyboard例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(keyboard_desc.c, keyboard_desc.h)

    设备描述信息(g_usbd_descriptor)

    设备配置描述信息(g_usbd_configuration)

    设备报告描述符(g_usbd_hid_report)

    其它描述

  • 根据功能修改要使用端点(keyboard_class.c, keyboard_class.h)

    端点定义(keyboard_class.h)

    端点初始化(class_init_handler,class_clear_handler)

  • 修改使用的keyboard控制请求

    控制请求修改(class_setup_handler)

    控制请求设置处理(class_ept0_rx_handler)

  • keyboard发送接收数据处理修改

    IN数据处理(class_in_handler)

    OUT数据处理(class_out_handler)

  • 根据需求修改端点FIFO大小分配(usb_conf.h)

  • 修改数据处理部分

Mouse例程

实现功能mouse实现一个简单的鼠标功能,使用中断传输与上位机通信,例程在AT-START开发板上运行,通过开发板上的按键发送鼠标右键功能。图16.鼠标传输格式01ad4d0a-b217-11ed-bfe3-dac502259ad0.png鼠标d通常是通过设置X和Y值来控制PC鼠标移动。 外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举

  • 端点1 IN:用于数据发送

mouse设备实现mouse设备实现源代码主要在mouse_class.c和mouse_desc.c中,这两个源文件实现了对设备的描述和设备的处理。 1. 设备描述:(mouse_desc.c/h
  • mouse设备描述(g_usbd_descriptor)

  • mouse设备配置描述(g_usbd_configuration)

    mouseinterface

    mouseendpoint

  • mouse report描述(g_usbd_hid_report)

  • Lang id(g_string_lang_id)

  • 序列号(g_string_serial)

  • 厂商产品ID(mouse_desc.h)

    01e9ce9c-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、产品名、配置描述、接口描述(keyboard_desc.h)

    02015c6a-b217-11ed-bfe3-dac502259ad0.png

2. 数据处理部分(mouse_class.c/h)
  • 端点初始化(class_init_handler)

    02221ab8-b217-11ed-bfe3-dac502259ad0.png

  • 端点清除(class_clear_handler)

    024927c0-b217-11ed-bfe3-dac502259ad0.png

  • HID设备类请求(class_setup_handler)

    实现如下请求:

    SET_PROTOCOL

    GET_PROTOCOL

    SET_IDLE

    GET_IDLE

    SET_REPORT

  • keyboard发送数据

    0262cdba-b217-11ed-bfe3-dac502259ad0.png

  • mouse数据处理

    027719a0-b217-11ed-bfe3-dac502259ad0.png

如何根据mouse例程进行开发本章将简单描述如何修改mouse例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(mouse_desc.c, mouse_desc.h)

    设备描述信息(g_usbd_descriptor)

    设备配置描述信息(g_usbd_configuration)

    设备报告描述符(g_usbd_hid_report)

    其它描述

  • 根据功能修改要使用端点(mouse_class.c, mouse_class.h)

    端点定义(mouse_class.h)

    端点初始化(class_init_handler,class_clear_handler)

  • 修改使用的mouse控制请求

    控制请求修改(class_setup_handler)

    控制请求设置处理(class_ept0_rx_handler)

  • mouse发送接收数据处理修改

    IN数据处理(class_in_handler)

    OUT数据处理(class_out_handler)

  • 根据需求修改端点FIFO大小分配(usb_conf.h)

  • 修改数据处理部分

msc例程

msc(mass storage)例程展示如何通过USB BULK传输,进行PC主机和AT-START通信,该例程支持BOT(Bulk only transfer)协议和SCSI(small computer system interface)指令。图17. BOT 命令/数据/状态 流程02aeb752-b217-11ed-bfe3-dac502259ad0.png图18.BOT命令格式02d11d74-b217-11ed-bfe3-dac502259ad0.png图19.BOT状态格式02fa5a72-b217-11ed-bfe3-dac502259ad0.png  实现功能
  • 将内部FLASH虚拟成一个磁盘

  • 实现bulk-only传输协议

  • 实现subclass SCSI传输命令

    MSC_CMD_INQUIRY

    MSC_CMD_START_STOP

    MSC_CMD_MODE_SENSE6

    MSC_CMD_MODE_SENSE10

    MSC_CMD_ALLOW_MEDIUM_REMOVAL

    MSC_CMD_READ_10

    MSC_CMD_READ_CAPACITY

    MSC_CMD_REQUEST_SENSE

    MSC_CMD_TEST_UNIT

    MSC_CMD_VERIFY

    MSC_CMD_WRITE_10

    MSC_CMD_READ_FORMAT_CAPACITY

外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举

  • 端点1 IN:用于数据发送

  • 端点1 OUT:用于数据接收

msc设备实现1. 设备描述:(msc_desc.c/h
  • msc设备描述(g_usbd_descriptor)

  • msc设备配置描述(g_usbd_configuration)

    msc interface

    msc endpoint

  • Lang id(g_string_lang_id)

  • 序列号(g_string_serial)

  • 厂商产品ID(custom_hid_desc.h)

    0311144c-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、产品名、配置描述、接口描述(msc_desc.h)

    03333d60-b217-11ed-bfe3-dac502259ad0.png

2. 数据处理部分(msc_class.c/h)
  • 端点初始化(class_init_handler)

    0349afa0-b217-11ed-bfe3-dac502259ad0.png

  • 端点清除(class_clear_handler)

    037224a8-b217-11ed-bfe3-dac502259ad0.png

  • MSC设备请求(class_setup_handler)

    GET_MAX_LUN

    BO_RESET

    代码如下:

    039912d4-b217-11ed-bfe3-dac502259ad0.png

  • IN传输处理

    03c93900-b217-11ed-bfe3-dac502259ad0.png

  • OUT传输处理(接收数据)

    03e5fce8-b217-11ed-bfe3-dac502259ad0.png

3. BOT和SCSI命令处理Bulk-only transfer和SCSI的命令处理在库文件msc_bot_scsi.c/h中。表11.msc_bot_scsi函数列表040a6fd8-b217-11ed-bfe3-dac502259ad0.png  4. diskio处理此部分主要处理与存储设备间接口,例程里面以内部flash的存储控制作为说明,msc_diskio.c/h根据开发者使用存储不同,只需要实现对应存储的读写函数即可。表12.inquiry描述044256d2-b217-11ed-bfe3-dac502259ad0.png表13 diskio操作函数04617972-b217-11ed-bfe3-dac502259ad0.png  如何根据msc例程进行开发本章将简单描述如何修改msc例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(msc_desc.c, msc_desc.h)

    设备描述信息(g_usbd_descriptor)

    设备配置描述信息(g_usbd_configuration)

    其它描述

  • 根据功能修改要使用端点(msc_class.c, msc_class.h)

    端点定义(msc_class.h)

    端点初始化(class_init_handler,class_clear_handler)

  • 修改使用的msc控制请求

    控制请求修改(class_setup_handler)

    控制请求设置处理(class_ept0_rx_handler)

  • msc发送接收数据处理修改

    IN数据处理(class_in_handler)

    OUT数据处理(class_out_handler)

  • 根据需求修改端点FIFO大小分配(usb_conf.h)

  • 修改diskio部分,实现表13里面的函数(msc_diskio.c/h)

printer例程

Printer例程展示了使用USB Device作为打印机设备,此demo可在PC端识别到一个打印机设备并且可应答PC端发送的关于printer类的状态请求命令(例如打印机的有纸/无纸状态) 实现功能
  • 实现一个打印机设备

外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举

  • 端点1 IN:用于数据发送

  • 端点1 OUT:用于数据接收

printer设备实现1. 设备描述(printer_desc.c/h
  • printer设备描述(g_usbd_descriptor)

  • printer设备配置描述(g_usbd_configuration)

    printer interface

    printer endpoint

  • Lang id(g_string_lang_id)

  • 序列号(g_string_serial)

  • 厂商产品ID(custom_hid_desc.h)

    04893b60-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、产品名、配置描述、接口描述(msc_desc.h)

    04ac42e0-b217-11ed-bfe3-dac502259ad0.png

2. 数据处理(printer_class.c/h
  • 端点初始化(class_init_handler)

    04d8248c-b217-11ed-bfe3-dac502259ad0.png

  • 端点清除(class_clear_handler

    04fe3c30-b217-11ed-bfe3-dac502259ad0.png

  • printer设备请求(class_setup_handler)

    GET_DEVICE_ID

    PORT_STATUS

    SOFT_RESET

    代码如下:

    051592e0-b217-11ed-bfe3-dac502259ad0.png

  • IN传输处理

    0530c466-b217-11ed-bfe3-dac502259ad0.png

  • OUT传输处理(接收数据)

    054ff750-b217-11ed-bfe3-dac502259ad0.png

如何根据printer例程进行开发本章将简单描述如何修改printer例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(printer_desc.c, printer_desc.h)

    设备描述信息(g_usbd_descriptor)

    设备配置描述信息(g_usbd_configuration)

    其它描述

  • 根据功能修改要使用端点(printer_class.c, printer_class.h)

    端点定义(printer_class.h)

    端点初始化(class_init_handler,class_clear_handler)

  • 修改使用的printer控制请求

    控制请求修改(class_setup_handler)

    控制请求设置处理(class_ept0_rx_handler)

  • printer发送接收数据处理修改

    IN数据处理(class_in_handler)

    OUT数据处理(class_out_handler)

  • 根据需求修改端点FIFO大小分配(usb_conf.h)

vcp loopback例程

在现代PC中,USB是和绝大部分外设通信的标准接口。尽管如此,大部分的工业软件依旧使用COM接口(UART)通信。vcp_loopback例程提供使用USB设备interwetten与威廉的赔率体系 COM接口方法,解决了该问题, vcp_loopback例程展示了如何通过CDC协议进行USB数据收发。改例程需要使用虚拟串口驱动,可在官网下载。 实现功能
  • 实现一个虚拟串口

外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举

  • 端点1 IN:用于数据发送

  • 端点1 OUT:用于数据接收

  • 端点2 IN:监控中断传输

vcp_loopback设备实现1. 设备描述(cdc_desc.c/h
  • cdc设备描述(g_usbd_descriptor)

  • cdc设备配置描述(g_usbd_configuration)

    cdc interface

    cdc endpoint

  • Lang id(g_string_lang_id)

  • 序列号(g_string_serial)

  • 厂商产品ID(custom_hid_desc.h)

    056f8ade-b217-11ed-bfe3-dac502259ad0.png

  • 制造商、产品名、配置描述、接口描述(msc_desc.h)

    0596a916-b217-11ed-bfe3-dac502259ad0.png

2. 数据处理(cdc_class.c/h
  • 端点初始化(class_init_handler)

    05b8695c-b217-11ed-bfe3-dac502259ad0.png

  • 端点清除(class_clear_handler)

    05e0ec92-b217-11ed-bfe3-dac502259ad0.png

  • cdc设备请求(class_setup_handler)

    SET_LINE_CODING

    GET_LINE_CODING

    代码如下:

    06044ee4-b217-11ed-bfe3-dac502259ad0.png

  • IN传输处理

    062ca394-b217-11ed-bfe3-dac502259ad0.png

  • OUT传输处理(接收数据)

    06570bd4-b217-11ed-bfe3-dac502259ad0.png

如何根据vcp_loopback例程进行开发本章将简单描述如何修改cdc例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(cdc_desc.c, cdc_desc.h)

    设备描述信息(g_usbd_descriptor)

    设备配置描述信息(g_usbd_configuration)

    其它描述

  • 根据功能修改要使用端点(cdc_class.c, cdc_class.h)

    端点定义(cdc_class.h)

    端点初始化(class_init_handler,class_clear_handler)

  • 修改使用的cdc控制请求

    控制请求修改(class_setup_handler)

    控制请求设置处理(class_ept0_rx_handler)

  • cdc发送接收数据处理修改

    IN数据处理(class_in_handler)

    OUT数据处理(class_out_handler)

  • 根据需求修改端点FIFO大小分配(usb_conf.h)

virtual_msc_iap例程

virtual msc iap实现一个升级功能的设备,不依赖上位机,当接入PC之后,通过将固件拷贝到磁盘以达到升级目的。 实现功能
  • 将flash虚拟成磁盘进行升级

  • Iap保留使用20K byte空间

  • 升级完成之后reset usb设备返回升级状态

  • 支持下载地址设置

  • 支持升级完成之后跳转到APP运行

  • 支持bin文件升级

外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举

  • 端点1 IN:用于数据发送

  • 端点1 OUT:用于数据接收

virtual_msc_iap设备实现1. 设备描述(msc_desc.c/h参考3.5.3.1 2. 数据处理部分(msc_class.c/h参考3.5.3.2 3. BOTSCSI命令处理参考3.5.3.3 4. diskio处理参考3.5.3.4 5. flash升级部分(flash_fat16.c/h
  • 升级状态

    0683b3c8-b217-11ed-bfe3-dac502259ad0.png

    当连接Host之后,在响应磁盘上通过TXT文档显示当前状态

    准备升级状态(Ready.TXT)

    升级成功(Success.TXT)

    升级失败(Failed.TXT)

    未知文件或错误(Unkonwn.TXT)

    升级文件大于FLASH大小(Large.TXT)

  • FAT16分区表描述

    06a93de6-b217-11ed-bfe3-dac502259ad0.png
  • 升级接口函数06f42540-b217-11ed-bfe3-dac502259ad0.png
如何根据virtual_msc_iap例程进行开发本章将简单描述如何修改virtual_msc_iap例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(msc_desc.c, msc_desc.h)设备描述信息(g_usbd_descriptor)设备配置描述信息(g_usbd_configuration)其它描述
  • 根据功能修改要使用端点(msc_class.c, msc_class.h)端点定义(msc_class.h)端点初始化(class_init_handler,class_clear_handler)
  • 修改使用的msc控制请求控制请求修改(class_setup_handler)控制请求设置处理(class_ept0_rx_handler)
  • msc发送接收数据处理修改IN数据处理(class_in_handler)OUT数据处理(class_out_handler)
  • 根据需求修改端点FIFO大小分配(usb_conf.h)
  • 修改diskio部分,实现表13里面的函数(msc_diskio.c/h)
  • 修改flash_fat16.c/h升级参数,包括APP起始地址,IAP占用空间等,要保证IAP和APP地址不重合。

composive_vcp_keyboard例程

复合设备定义如下:拥有多个相互独立接口的设备被称为复合设备。当使用该设备时,该设备上拥有多个组合的功能。例如,Composite vcp keyboard demo 提供的复合设备包含HID和CDC功能(键盘和串口通信) 实现功能
  • 实现一个USB虚拟串口(参考3.7)
  • 实现一个USB键盘设备(参考3.3)
外设资源使用USB外设:
  • 端点0 IN/OUT:用于USB枚举
  • 端点1 IN:用于数据发送
  • 端点1 OUT:用于数据接收
  • 端点2 IN:CDC命令中断传输
  • 端点3 IN:Keyboard发送数据
composite_vcp_keyboard设备实现1. 设备描述(cdc_keyboard_desc.c/h
  • cdc_keyboard设备描述(g_usbd_descriptor)
  • cdc_keyboard设备配置描述(g_usbd_configuration)cdc interfacecdc endpointkeyboard interfacekeyboard endpoint
  • Lang id(g_string_lang_id)
  • 序列号(g_string_serial)
  • 厂商产品ID(custom_hid_desc.h)071ba26e-b217-11ed-bfe3-dac502259ad0.png
  • 制造商、产品名、配置描述、接口描述(msc_desc.h)07318782-b217-11ed-bfe3-dac502259ad0.png
2. 数据处理(cdc_keyboard_class.c/h
  • 端点初始化(class_init_handler)07595ae6-b217-11ed-bfe3-dac502259ad0.png
  • 端点清除(class_clear_handler)077dc21e-b217-11ed-bfe3-dac502259ad0.png
  • 设备请求(class_setup_handler)cdc设备类请求:SET_LINE_CODINGGET_LINE_CODIN

    Keyboard hid设备类请求:

    SET_PROTOCOLGET_PROTOCOLSET_IDLEGET_IDLESET_REPORT

    代码如下:

    079b6a44-b217-11ed-bfe3-dac502259ad0.png
  • IN传输处理07cb4796-b217-11ed-bfe3-dac502259ad0.png
  • OUT传输处理(接收数据)0808f5d2-b217-11ed-bfe3-dac502259ad0.png
如何根据composite_vcp_keyboard例程进行开发本章将简单描述如何修改composite_vcp_keyboard例程的代码来进行复合设备开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(cdc_keyboard_desc.c, cdc_keyboard_desc.h)设备描述信息(g_usbd_descriptor)设备配置描述信息(g_usbd_configuration)其它描述
  • 根据功能修改要使用端点(cdc_keyboard_class.c, cdc_keyboard_class.h)端点定义(cdc_class.h)端点初始化(class_init_handler,class_clear_handler)
  • 修改使用的cdc控制请求控制请求修改(class_setup_handler)控制请求设置处理(class_ept0_rx_handler)
  • cdc_keyboard发送接收数据处理修改IN数据处理(class_in_handler)OUT数据处理(class_out_handler)
  • 根据需求修改端点FIFO大小分配(usb_conf.h)

hid_iap例程

hid_iap例程使用usb hid实现IAP升级功能,需要搭配上位机使用,上位机可在官网下载IAP_Programmer。hid iap的例程代码位于BSP固件库utilitiesat32f435_437_usb_iap_demo中,使用方法可参考《AN0007_AT32_IAP_using_the_USB_HID_ZH_V2.x.x.pdf》 1. 实现功能
  • 实现使用HID进行设备升级
2. 外设资源使用USB 外设:
  • 端点0 IN/OUT:用于USB枚举
  • 端点1 IN:用于数据发送
  • 端点1 OUT:用于数据接收
hid_iap设备实现1. 设备描述(hid_iap_desc.c/h
  • hid iap设备描述(g_usbd_descriptor)
  • hid iap设备配置描述(g_usbd_configuration)HID interfaceHID Endpoint
  • hid iap report描述(g_usbd_hid_report)
  • Lang id(g_string_lang_id)
  • 序列号(g_string_serial)
  • 厂商产品ID(hid_iap_desc.h)08321566-b217-11ed-bfe3-dac502259ad0.png
  • 制造商、产品名、配置描述、接口描述(hid_iap_desc.h)084e44e8-b217-11ed-bfe3-dac502259ad0.png
2. 数据处理(hid_iap_class.c/h
  • 端点初始化(class_init_handler)087c3c40-b217-11ed-bfe3-dac502259ad0.png
  • 端点清除(class_clear_handler)089e6f86-b217-11ed-bfe3-dac502259ad0.png
  • HID设备类请求(class_setup_handler)实现如下请求:SET_PROTOCOLGET_PROTOCOLSET_IDLEGET_IDLESET_REPORT代码如下:08be20b0-b217-11ed-bfe3-dac502259ad0.png
  • hid iap发送数据08e60cec-b217-11ed-bfe3-dac502259ad0.png
  • hid iap接收数据0918b4f8-b217-11ed-bfe3-dac502259ad0.png
  • 升级命令数据处理 094243a4-b217-11ed-bfe3-dac502259ad0.png
3. hid iap升级协议表14.hid iap升级命令0976967c-b217-11ed-bfe3-dac502259ad0.png
  1. 0x5AA0进入IAP模式

    作为一个特定的命令,当用户APP收到这个命令之后将进入IAP模式。实现方式为收到这个命令之后擦除flag然后reset

    上位机:[0x5A, 0xA0]

    IAP设备响应:[0x5A, 0XA0, ACK/NACK]

  2. 0x5AA1开始下载

    上位机:[0x5A,0xA1]

    IAP设备响应:[0x5A,0xA1,ACK/NACK]

  3. 0x5AA2设置下载地址

    设置下载地址需按照1KB对齐,每下载1Kbyte数据之后,都需要重新设置下载地址。

    上位机(命令+地址):[0x5A, 0xA2, 0x08, 0x00, 0x40, 0x00]

    IAP设备响应:[0x5A,0xA2, ACK/NACK]

  4. 0x5AA3下载数据命令(1KB 对齐多个包发送)

    下载数据命令采用命令+长度+数据的格式进行发送,每包最大数据量为60Byte(64–命令–长度),当发送数据达到1KB时,上位机需要等待设备的ACK响应。此时设备需将1KB的数据写到FLASH。

    上位机(命令(2Byte)+长度(2 Byte)+数据(n byte)):[0x5A,0xA3,LEN1,LEN0,DATA0….DATAn]

    收完1KB数据后IAP设备响应:[0x5A, 0XA3, ACK/NACK]

  5. 0x5AA4下载结束

    上位机:[0x5A, 0xA4]

    IAP设备响应:[0x5A, 0xA4, ACK/NACK]

  6. 0x5AA5固件CRC校验

    上位机传输固件起始地址和固件大小/1KB(固件大小按1KB对齐,不足补0xFF),由IAP计算CRC之后返回给上位机。

    上位机:[0x5A,0xA5, 0x08, 0x00, 0x40, 0x00, LEN1, LEN0]

    IAP设备响应: [0x5A, 0xA5, ACK/NACK, CRC3, CRC2, CRC1, CRC0]

  7. 0x5AA6跳转命令

    跳转命令将跳转到用户代码进行运行

    上位机:[0x5A,0xA6, 0x08, 0x00, 0x40, 0x00]

    IAP设备响应:[0x5A,0xA6,ACK/NACK]

  8. 0x5AA7获取IAP设置的app地址

    返回IAP设置的app地址

    上位机:[0x5A, 0xA7]

    IAP设备响应:[0x5A, 0xA7, ACK/NACK, 0x08, 0x00, 0x40, 0x00]

如何根据hid_iap例程进行开发本章将简单描述如何修改hid_iap例程的代码来进行开发,根据应用具体的需求来修改代码。
  • 根据功能需求修改设备描述信息(hid_iap_desc.c, hid_iap_desc.h)设备描述信息(g_usbd_descriptor)设备配置描述信息(g_usbd_configuration)其它描述
  • 根据功能修改要使用端点(hid_iap_class.c, hid_iap_class.h)端点定义(hid_iap_class.h)端点初始化(class_init_handler,class_clear_handler)
  • 修改使用的hid控制请求控制请求修改(class_setup_handler)控制请求设置处理(class_ept0_rx_handler)
  • hid_iap发送接收数据处理修改IN数据处理(class_in_handler)OUT数据处理(class_out_handler)
  • 根据需求修改端点FIFO大小分配(usb_conf.h)
  • 修改hid_iap_user.h中的升级参数,包括APP起始地址等,IAP占用空间等,保证APP地址和IAP的地址不要重合。
审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17108

    浏览量

    350885
  • usb
    usb
    +关注

    关注

    60

    文章

    7927

    浏览量

    264402
  • 雅特力
    +关注

    关注

    0

    文章

    157

    浏览量

    8004
  • AT32
    +关注

    关注

    1

    文章

    113

    浏览量

    2088

原文标题:AT32讲堂046 | 雅特力AT32 MCU USB设备库的架构和使用方法

文章出处:【微信号:AT32 MCU 雅特力科技,微信公众号:AT32 MCU 雅特力科技】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    AT32系列MCU上Flash模拟EEPRO的应用原理和使用方法

    AN0002—AT32 MCU如何使用片上Flash来实现EEPROM功能当前诸多嵌入式应用场景都需要用到 EEPROM 作为非易失性的数据存储设备。出于客户低成本的考虑,AT32
    发表于 11-26 07:15

    AT32 MCU USB主机库应用说明

    AT32 MCU USB Host Library Application Note主要描述AT32F4xx 系列USB 主机库的架构
    发表于 10-25 07:02

    AT32 MCU USB设备应用说明

    AT32 MCU USB Device Library Application Note主要描述AT32F4xx 系列USB 设备
    发表于 10-25 07:07

    携高效能AT32 MCU“芯”动亮相ICCAD 2020

    高峰论坛,获得了业界人士、广大客户及众多媒体的广泛关注。 (供图,下同) 在同期举办的IP 与 IC 设计专题论坛上,
    的头像 发表于 12-16 17:12 2056次阅读

    携高性能AT32 MCU精彩亮相全球MCU生态发展大会

    威廉希尔官方网站 、边缘AI、新兴应用和生态发展等热门议题。 业务处长陈佳延在大会发表了题为“
    的头像 发表于 08-30 10:04 4513次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>携高性能<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相全球<b class='flag-5'>MCU</b>生态发展大会

    如何使用AT32 MCU主机库快速开发USB相关应用

    这部分主要介绍AT32 USB主机库的结构和使用方法AT32 USB支持全速和低速,不支持
    的头像 发表于 01-14 10:56 1954次阅读
    如何使用<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>主机库快速开发<b class='flag-5'>USB</b>相关应用

    AT32 SPI

    AT32 SPI 科技AT32F415系
    发表于 03-30 10:44 491次阅读

    携高性能AT32 MCU精彩亮相D Forum 2021 微控制器论坛

    AT32高效能MCU平台–持续布局多元化应用市场”的主题演讲。产品与行销处长杜立博先生在演讲中首先介绍了公司近几年来取得的成绩,
    的头像 发表于 02-24 09:33 718次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>携高性能<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相D Forum 2021 微控制器论坛

    携高性能AT32 MCU精彩亮相全球MCU生态发展大会

    威廉希尔官方网站 、边缘AI、新兴应用和生态发展等热门议题。业务处长陈佳延在大会发表了题为“AT3
    的头像 发表于 02-24 09:31 562次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>携高性能<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相全球<b class='flag-5'>MCU</b>生态发展大会

    AT32讲堂046 | AT32 MCU USB设备架构使用方法

    AT32USB设备协议这部分主要介绍AT32USB设备的结构和
    的头像 发表于 02-22 11:23 6106次阅读
    <b class='flag-5'>AT32</b>讲堂046 | <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> <b class='flag-5'>USB</b><b class='flag-5'>设备</b><b class='flag-5'>库</b>的<b class='flag-5'>架构</b>和<b class='flag-5'>使用方法</b>

    展台首日速递,AT32 MCU精彩亮相

    8月23日,elexcon2023深圳国际电子展在深圳会展中心(福田)正式拉开帷幕!携AT32MCU精彩亮相,电机控制、工业控制、消费&商务、电力&电源、智能家电及汽车电子等
    的头像 发表于 08-24 08:17 638次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b>展台首日速递,<b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>精彩亮相

    如何使用AT32 MCU定时器进行PWM输入测试

    如何使用AT32 MCU定时器进行PWM输入测试
    的头像 发表于 10-27 14:20 2731次阅读
    如何使用<b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>定时器进行PWM输入测试

    AT32 MCU Printf的功能使用方法

    AT32 MCU Printf的功能使用方法
    的头像 发表于 10-27 09:27 1122次阅读
    <b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b> Printf的功能<b class='flag-5'>使用方法</b>

    AT32 MCU实现高效电机驱动控制与应用

    发展。受邀出席此次会议,产品市场总监林金海发表了题为“AT32
    的头像 发表于 11-17 08:15 829次阅读
    <b class='flag-5'>雅</b><b class='flag-5'>特</b><b class='flag-5'>力</b><b class='flag-5'>AT32</b> <b class='flag-5'>MCU</b>实现高效电机驱动控制与应用

    AT32 MCU与SEGGER携手合作,开发量产事半功倍

    近日,与SEGGER共同宣布J-Link仿真调试器与Flasher在线烧录器全面支持AT32 MCU产品,SEGGER工具链的加持使
    的头像 发表于 02-23 10:27 398次阅读