打印
[APM32F4]

【APM32F411V Tiny Board测评】USB 接口与使用

[复制链接]
279|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
1 APM32F411V的USB功能
APM32F411V一个重要的功能是USB接口,USB栈固化进了硬件层,通过函数调用就可以简单使用,而且同时支持DEVICE和HOST两种模式。通常支持Device模式的比较多,支持Host的少,这个就非常有用了。
USB协议其实还是比较复杂的,需要实现设备描述符,配置描述符,接口描述符,端点描述符的定义和通讯,然后才能开始数据通讯,在完成通讯后,再提供设备的类,主要是事先定义的音频,键盘,u盘等不同的设备。
其中,以设备描述符为例,需要定义以下参数

使用APM32F411V已经很好定义了,那么重点放在Endpoint的定义就可以快速开始设计和定义。
2 代码开发
主循环初始化USB口之后,就使用死循环不断访问usb的控制
int main(void)
{
    /* Set the Vector Table base address at 0x08000000 */
    NVIC_ConfigVectorTable(NVIC_VECT_TAB_FLASH, 0x0000);

    USART_Config_T usartConfigStruct;

    /* Init USB device */
    USB_DeviceInit();

    printf("USB Device HID Keyboard Application\r\n");

    while (1)
    {
        USB_DevUserApplication();
    }
}

那么USB 模拟键盘的功能如下
void USB_DevUserApplication(void)
{
    static uint8_t userAppState = USER_APP_INIT;
    static uint8_t interval = 0;
    static uint8_t report[8] = { 0 };
    static uint8_t i = 4;
   
    switch (userAppState)
    {
        case USER_APP_INIT:
            interval = USBD_HID_ReadInterval(&gUsbDeviceFS);

            report[0] = 0;
            report[1] = 0;
            report[2] = 0;
            report[3] = 0;
            userAppState = USER_APP_RUN;
            break;

        case USER_APP_RUN:
            if (!APM_PBGetState(BUTTON_KEY1))
            {
                APM_DelayMs(10);
                if (!APM_PBGetState(BUTTON_KEY1))
                {
                    if(i > 29)
                    {
                        i = 4;
                        report[2] = KEYBOARD_ENTER;
                        USBD_HID_TxReport(&gUsbDeviceFS, (uint8_t*)report, 8);
                        APM_DelayMs(20);
                        report[2] = 0;
                        USBD_HID_TxReport(&gUsbDeviceFS, (uint8_t*)report, 8);
                        APM_DelayMs(20);
                    }
                    
                    report[2] = i;
                    USBD_HID_TxReport(&gUsbDeviceFS, (uint8_t*)report, 8);
                    
                    APM_DelayMs(20);
                    
                    report[2] = 0;
                    USBD_HID_TxReport(&gUsbDeviceFS, (uint8_t*)report, 8);
                    
                    i++;
                    
                    while(!APM_PBGetState(BUTTON_KEY1));
                }
            }

            APM_DelayMs(interval);
            break;
    }
}
这个代码直接定义了Class,然后侦听Key1的按键操作,不断增加1,这样就是从a-z的ASCII码,输出到Host就可以作为键盘使用。
上述代码编译并下载到MCU,
3 功能模拟
3.1 连接再USB口

按下按键1就可以不断实现模拟的键盘输入

3.2 增加USART输入功能,可以用调试口读取调试信息,这里输出功能说明,连接串口如下


4 小结
APM32F411V功能全面,开发友好,开发环境也非常好用,是一个性能价格都很能打的国产芯片,对比竞品形成压力,而且品质提升很多。



使用特权

评论回复
沙发
szt1993| | 2024-5-23 17:02 | 只看该作者
USB 接口与使用非常适合外设接入

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

107

帖子

1

粉丝