基于AT32_Work_Bench和AT32F425C8T7搭建USB设备的Keil工程
以雅特力的图形化代码配置工具AT32_Work_Bench和MCU芯片AT32F425C8T7为例与大家分享一下如何搭建一个USB设备的Keil开发工程。这里的USB设备我们以USB键盘KeyBoard为例因为前段时间正好用AT32F425C8T7这款芯片开发过一款客户定制的USB键盘1.png(171.79 KB, 下载次数: 0)下载附件2026-5-29 16:47 上传打开AT32_Work_Bench软件我使用的版本是V1.2.02搜索MCU选择AT32F425C8T7然后在MCU型号位置双击即可进入下一步接下来就可以开始正式的配置了。一、进行Pin布局和配置在“外设”选项下面勾选“USB_OTGFS1”进行USB外设的相关引脚功能配置选择“设备”模式引脚的具体配置在你操作模式和勾选相关功能后工具已为我们自动配置不需要我们配置对于USB的SOF、VBUS、OE和ID四个功能选项根据自身的项目需要进行配置其详细功能介绍可以去查阅芯片用户手册下面就截图简要说明一下USBFS外设的功能引脚说明ID引脚的主要功能识别为USB设备还是USB主机SOF和OE引脚的主要功能脉冲功能VBUS引脚的主要功能总线供电功能在“中间件”选项下面勾选“USB_DEVICE”进行USB相关的固件库代码配置OTGFS1设备类选择“KeyBorad”下面的FS1设备描述配置会体现在USB设备的描述符数据里面和FS1端点FIFO大小配置体现在USB通信交互数据量里面可以先用默认值后期再根据需要进行代码修改对于USB键盘其中FS1设备描述配置信息主要定义在keyborad_desc.h里面复制/*** [url/u/brief]brief[/url] usb vendor id and product id define*/#define USBD_KEYBOARD_VENDOR_ID 0x2E3C#define USBD_KEYBOARD_PRODUCT_ID 0x6040/*** brief usb string define(vendor, product configuration, interface)*/#define USBD_KEYBOARD_DESC_MANUFACTURER_STRINGArtery#define USBD_KEYBOARD_DESC_PRODUCT_STRINGKeyboard#define USBD_KEYBOARD_DESC_CONFIGURATION_STRINGKeyboard Config#define USBD_KEYBOARD_DESC_INTERFACE_STRINGKeyboard Interface其中FS1端点FIFO大小配置信息主要定义在usb_conf.h里面复制/*** brief usb device mode fifo*//* otg1 device fifo */#define USBD_RX_SIZE 128#define USBD_EP0_TX_SIZE 24#define USBD_EP1_TX_SIZE 20#define USBD_EP2_TX_SIZE 20#define USBD_EP3_TX_SIZE 0#define USBD_EP4_TX_SIZE 0#define USBD_EP5_TX_SIZE 0#define USBD_EP6_TX_SIZE 0#define USBD_EP7_TX_SIZE 0二、进行时钟配置对于USB外设的时钟我们选择精度更高的外部高速时钟HEXT但这里默认是HICK而且为什么不能选择HEXT呢查看HEXT位置的问号原来是需要先在CRM那里配置一下才行那就是再回到步骤一勾选“CRM”高速外部晶振HEXT选择“时钟振荡器”对应的引脚是PF0和PF1就和下面原理图一致的外部8M晶振配置OK以后再回到时钟配置页面这个时候USB外设时钟也自动好了96M主频时钟经过2分频后为48M三、代码预览这个时候当我们直接点击“代码预览”会提示错误需要固件包的支持才行我研究了一下然后走通了点击菜单栏的“固件包管理”按如下方法二选一安装可以从本地导入也可以从网络安装我用了后者点击“网络安装”下载成功后在选中芯片的下面会有固件包名称包括版本号勾选一下然后点击“关闭”即可。如果你是从“本地安装”点击打开直接导入即可我们再点击“代码预览”就可以正常进入页面可以看到头文件、源文件和详细代码四、导入工程代码预览成功后下一步就是要生成代码并把它们导入工程点击代码生成按钮在下面配置页面里面按照自身需求进行配置我使用的是MDK Keil5所以我选择了MDK_V5配置如下图所示成功后会有弹窗提醒然后去工程目录看下大概是下面这样的框架与USB相关的文件夹和文件主要包括下面这些其中两个比较核心的文件说一下keyboard_class.c主要是和键盘设备类相关的代码keyboard_desc.c主要是和键盘描述符相关的代码然后usb应用层初始化主要就是下面这个接口调用其中otg_core_struct_fs1是一个全局结构体使用频繁复制/*fs1 device keyboard*/usbd_init(otg_core_struct_fs1,USB_FULL_SPEED_CORE_ID,USB_OTG1_ID,keyboard_class_handler,keyboard_desc_handler);具体代码就先不展开说了。五、编译工程打开工程文件编译成功工程目录结构如下所示Main主代码如下可以自己再调整一下复制int main(void){/* add user code begin1*//* add user codeend1*//* systemclockconfig. */wk_system_clock_config();/*configperiphclock. */wk_periph_clock_config();/* nvicconfig. */wk_nvic_config();/* timebaseconfig. */wk_timebase_init();/* init accfunction. */wk_acc_init();/* init usb_otgfs1function. */wk_usb_otgfs1_init();/* init usb appfunction. */wk_usb_app_init();/* add user code begin2*//* add user codeend2*/while(1){wk_usb_app_task();/* add user code begin3*//* add user codeend3*/}}接下来我们就可以在这个工程上面开始发挥了无限可能……对于USB主机配置或者其他USB设备类的配置大同小异有一点需要注意“USB_OTGFS1”里面需要选择为“主机”模式然后“USB_HOST”里面才能进行主机类的配置我们可以看到有两种主机类可以配置即CDC和HID说句实在话雅特力的图形化代码配置工具AT32_Work_Bench简单易用确实蛮好的事半功倍的效果而且还免安装对于比较喜欢手撸代码的我来说我都尝试使用了。---------------------作者dffzh链接https://bbs.21ic.com/icview-3518970-1-1.html来源21ic.com此文章已获得原创/原创奖标签著作权归21ic所有任何人未经允许禁止转载。