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

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

3天内不再提示

基于极海APM32F103的USB键盘与虚拟串口例程

Geehy极海半导体 来源:21ic论坛极海半导体专区 2025-08-16 09:20 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

《APM32芯得》系列内容为用户使用APM32系列产品的经验总结,均转载自21ic论坛极海半导体专区,全文未作任何修改,未经原文作者授权禁止转载。

最近在编写DMA_ADC例程的过程中出现了一个中断配置的问题,在ADC采集过程中,结合手册进行ADC连续转换模式配置采集,手册上给出需要进行中断配置的信息,但是真实情况不需要进行中断配置也可以进行ADC连续转换采集,因此,我没过滤掉ADC采集中开启中断配置的信息,开启了ADC中断采集,因此这次以APM32F411官方例程中的DMA_ADC例程,复刻了此次出现的问题。

APM32F103具有USB全速接口,可以做USB从机的多种功能。USB协议中为了提供对多样设备的支持,定义了许多外部设备子类,常见的包括:

人机交互类设备HID(Human Interface Device)

通信类设备CDC(Communicate Device Class)

大容量存储设备MSC(Mass Storage Class)

视频类设备UVC(USB Video Class)

音频类设备UAC(USB Audio Class)

HID (Human Interface Device)是一种用于连接人机交互设备的USB设备类别。它定义了一组通用的协议和规范,用于支持键盘、鼠标、游戏控制器等各种输入设备的连接和交互。

CDC(Communication Device Class)是USB组织定义的一类专门给各种通信设备(电信通信设备和中速网络通讯设备)使用的USB子类,常用于虚拟串口。

USB大容量存储设备类(The USB mass storage device class)是一种计算机和移动设备之间的传输协议,它允许一个通用串行总线(USB)设备来访问主机的计算设备,使两者之间进行文件传输,常用于存储器读写和模拟U盘。

SDK中提供的例程就有虚拟串口CDC、鼠标HID、模拟U盘MSC的功能。

除了这些USB做单项功能的,USB还可以配置复合设备,能同时集成了多个不同类型的外设,可以实现多个功能的同时使用

接下来就尝试在极海SDK中增加HID KeyBoard+CDC 虚拟串口的复合设备配置,修改就基于极海APM32F10x_SDK_V1.8中已有的USB_CDC_VirtualCOMPort例程,就不用重新配置虚拟串口部分了。

实现要对USB的描述符进行修改,能让电脑识别出来是个什么设备。

1、USB设备描述符

重点是bDeviceClass改成0xEF,告诉电脑这是个复合设备。

const uint8_t g_usbDeviceDescriptor[USB_DEVICE_DESCRIPTOR_SIZE] =

{

0x12, /*bLength:长度,设备描述符的长度为18字节*/

USBD_DESC_DEVICE, /*bDescriptorType*/

0x00,0x02, /*bcdUSB = 2.00 */

0xEF, /*bDeviceClass*/

0x02, /*bDeviceSubClass*/

0x01, /*bDeviceProtocol*/

0x40, /*bMaxPacketSize40---------------------------*/

0x83,0x05, /*idVendor (0x0583)*/

0x50,0x57, /*idProduct = 0x5750*/

0x00, /*bcdDevice rel. 2.00*/

0x02,

1, /*Index of string descriptor describing

manufacturer */

2, /*Index of string descriptor describing

product*/

3, /*Index of string descriptor describing the

device serial number */

0x01 /*bNumConfigurations*/

};

2、USB配置描述符

这里配置USB的配置描述符、接口描述符和端点描述符。

HID键盘使用两个端点,端点4(IN)和端点4(OUT)

VCP虚拟串口使用三个端点,端点1(IN)、端点1(OUT)和端点2(IN)

const uint8_t g_usbConfigDescriptor[USB_CONFIG_DESCRIPTOR_SIZE] =

{

0x09, /* bLength: Configuration Descriptor size */

USBD_DESC_CONFIGURATION, /* bDescriptorType: Configuration */

USB_CONFIG_DESCRIPTOR_SIZE,

/* wTotalLength: Bytes returned */

0x00,

0x03, /* bNumInterfaces: 1 interface */

0x01, /* bConfigurationValue: Configuration value */

0x00, /* iConfiguration: Index of string descriptor describing

the configuration*/

0xC0, /* bmAttributes: Self powered */

0x32, /* MaxPower 100 mA: this current is used for detecting Vbus */

/*************************************功能1 HID键盘**************************************/

/*IAD描述符*/

0x08, //bLength:IAD描述符大小

0x0B, //bDescriptorType:IAD描述符类型

0x00, //bFirstInterface:功能1 HID键盘的第一个接口描述符是在总的配置描述符中的第几个从0开始数

0x01, //bInferfaceCount:功能1 HID键盘有1个接口描述符

0x03, //bFunctionClass:同单HID功能时,设备符中的bDeviceClass

0x00, //bFunctionSubClass:同单HID功能时,设备符中的bDeviceSubClass

0x01, //bFunctionProtocol:同单HID功能时,设备符中的bDeviceProtocol

0x00, //iFunction:字符串描述中关于此设备的索引(个人理解是一个字符串描述符中有比如0~5是功能1的字符串,

//6~10是功能2的字符串,如果是功能2的话,此值为6)

/************** Descriptor of Custom HID interface ****************/

/* 09 */

0x09, /* bLength: Interface Descriptor size */

USBD_DESC_INTERFACE,/* bDescriptorType: Interface descriptor type */

0x00, /* bInterfaceNumber: Number of Interface */

0x00, /* bAlternateSetting: Alternate setting */

0x02, /* bNumEndpoints */

0x03, /* bInterfaceClass: HID */

0x01, /* bInterfaceSubClass : 1=BOOT, 0=no boot */

0x01, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */

0, /* iInterface: Index of string descriptor */

/******************** Descriptor of Custom HID HID ********************/

/* 18 */

0x09, /* bLength: HID Descriptor size */

0x21, /* bDescriptorType: HID */

0x10, /* bcdHID: HID Class Spec release number */

0x01,

0x00, /* bCountryCode: Hardware target country */

0x01, /* bNumDescriptors: Number of HID class descriptors to follow */

0x22, /* bDescriptorType */

KEYBOARD_SIZ_REPORT_DESC,

//KEYBOARD_SIZ_REPORT_DESC,/* wItemLength: Total length of Report descriptor */

0x00,

/******************** Descriptor of Custom HID endpoints ******************/

/* 27 */

0x07, /* bLength: Endpoint Descriptor size */

USBD_DESC_ENDPOINT, /* bDescriptorType: */

0x84, /* bEndpointAddress: Endpoint Address (IN) */

0x03, /* bmAttributes: Interrupt endpoint */

0x08, /* wMaxPacketSize: 8 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (32 ms) */

/* 34 */

0x07, /* bLength: Endpoint Descriptor size */

USBD_DESC_ENDPOINT, /* bDescriptorType: */

/* Endpoint descriptor type */

0x04, /* bEndpointAddress: */

/* Endpoint Address (OUT) */

0x03, /* bmAttributes: Interrupt endpoint */

0x01, /* wMaxPacketSize: 2 Bytes max */

0x00,

0x20, /* bInterval: Polling Interval (20 ms) */

/* 41 */

/********************************功能2 VCP虚拟串口*****************************/

/*IAD描述符*/

/* Interface Association Descriptor(IAD Descriptor) */

0x08, /* bLength */

0x0B, /* bDescriptorType*/

0x01, /* bFirstInterface*/

0x02, /* bInterfaceCount*/

0x02, /* bFunctionClass --CDC*/

0x02, /* bFunctionSubClass*/

0x01, /* bFunctionProtocoll*/

0x00, /* iFunction */

/**VCP虚拟串口**/

/*Interface Descriptor接口描述符*/

0x09, /* bLength: Interface Descriptor size */

USBD_DESC_INTERFACE, /* bDescriptorType: Interface */

/* Interface descriptor type */

0x01, /* bInterfaceNumber: Number of Interface */ //<接口 1>

0x00, /* bAlternateSetting: Alternate setting */

0x01, /* bNumEndpoints: One endpoints used 该接口非0端点数*/

0x02, /* bInterfaceClass: Communication Interface Class */

0x02, /* bInterfaceSubClass: Abstract Control Model */

0x01, /* bInterfaceProtocol: Common AT commands */

0x00, /* iInterface: */

/*Header Functional Descriptor类描述符*/

0x05, /* bLength: Endpoint Descriptor size */

0x24, /* bDescriptorType: CS_INTERFACE */

0x00, /* bDescriptorSubtype: Header Func Desc */

0x10, /* bcdCDC: spec release number */

0x01,

/*Call Management Functional Descriptor*/

0x05, /* bFunctionLength */

0x24, /* bDescriptorType: CS_INTERFACE */

0x01, /* bDescriptorSubtype: Call Management Func Desc */

0x00, /* bmCapabilities: D0+D1 */

0x01, /* bDataInterface: 1 */

/*ACM Functional Descriptor*/

0x04, /* bFunctionLength */

0x24, /* bDescriptorType: CS_INTERFACE */

0x02, /* bDescriptorSubtype: Abstract Control Management desc */

0x02, /* bmCapabilities */

/*Union Functional Descriptor*/

0x05, /* bFunctionLength */

0x24, /* bDescriptorType: CS_INTERFACE */

0x06, /* bDescriptorSubtype: Union func desc */

0x00, /* bMasterInterface: Communication class interface */

0x01, /* bSlaveInterface0: Data Class Interface */

/*Endpoint 2 Descriptor端点描述符*/

0x07, /* bLength: Endpoint Descriptor size */

USBD_DESC_ENDPOINT, /* bDescriptorType: Endpoint */

0x82, /* bEndpointAddress: (IN2) */

0x03, /* bmAttributes: Interrupt */

VIRTUAL_COM_PORT_INT_SIZE, /* wMaxPacketSize: */

0x00,

0xFF, /* bInterval: */

/*Data class interface descriptor类描述符*/

0x09, /* bLength: Endpoint Descriptor size */

USBD_DESC_INTERFACE, /* bDescriptorType: */

0x02, /* bInterfaceNumber: Number of Interface */

0x00, /* bAlternateSetting: Alternate setting */

0x02, /* bNumEndpoints: Two endpoints used */

0x0A, /* bInterfaceClass: CDC */

0x00, /* bInterfaceSubClass: */

0x00, /* bInterfaceProtocol: */

0x00, /* iInterface: */

/*Endpoint 3 Descriptor端点描述符*/

0x07, /* bLength: Endpoint Descriptor size */

USBD_DESC_ENDPOINT, /* bDescriptorType: Endpoint */

0x01, /* bEndpointAddress: (OUT1) */

0x02, /* bmAttributes: Bulk */

VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */

0x00,

0x00, /* bInterval: ignore for Bulk transfer */

/*Endpoint 1 Descriptor 端点描述符*/

0x07, /* bLength: Endpoint Descriptor size */

USBD_DESC_ENDPOINT, /* bDescriptorType: Endpoint */

0x81, /* bEndpointAddress: (IN1) */

0x02, /* bmAttributes: Bulk */

VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */

0x00,

0x00 /* bInterval */

};

3、USB HID报告描述符

const uint8_t s_hidKeyboardReportDescriptor[HID_REPORT_DESCRIPTOR_SIZE] =

{

/*short Item D7~D4:bTag;D3~D2:bType;D1~D0:bSize

**bTag ---主条目 1000:输入(Input) 1001:输出(Output) 1011:特性(Feature) 1010:集合(Collection) 1100:关集合(End Collection)

** 全局条目 0000:用途页(Usage Page) 0001:逻辑最小值(Logical Minimum) 0010:逻辑最大值(Logical Maximum) 0011:物理最小值(Physical Minimum)

** 0100:物理最大值(Physical Maximum) 0101:单元指数(Unit Exponet) 0110:单元(Unit) 0111:数据域大小(Report Size)

** 1000:报告ID(Report ID) 1001:数据域数量(Report Count) 1010:压栈(Push) 1011:出栈(Pop) 1100~1111:保留(Reserved)

** 局部条目 0000:用途(Usage) 0001:用途最小值(Usage Minimum) 0010:用途最大值(Usage Maximum) 0011:标识符索引(Designator Index)

** 0100:标识符最小值(Designator Minimum) 0101:标识符最大值(Designator Maximum) 0111:字符串索引(String Index) 1000:字符串最小值(String Minimum)

** 1001:字符串最大值(String Maximum) 1010:分隔符(Delimiter) 其他:保留(Reserved)

**bType---00:主条目(main) 01:全局条目(globle) 10:局部条目(local) 11:保留(reserved)

**bSize---00:0字节 01:1字节 10:2字节 11:4字节*/

//0x05:0000 01 01 这是个全局条目,用途页选择为普通桌面页

0x05, 0x01, // USAGE_PAGE (Generic Desktop)

//0x09:0000 10 01 这是个全局条目,用途选择为键盘

0x09, 0x06, // USAGE (Keyboard)

//0xa1:1010 00 01 这是个主条目,选择为应用集合,

0xa1, 0x01, // COLLECTION (Application)

//0x05:0000 01 11 这是个全局条目,用途页选择为键盘/按键

0x05, 0x07, // USAGE_PAGE (Keyboard/Keypad)

//0x19:0001 10 01 这是个局部条目,用途的最小值为0xe0,对应键盘上的左ctrl键

0x19, 0xe0, // USAGE_MINIMUM (Keyboard LeftControl)

//0x29:0010 10 01 这是个局部条目,用途的最大值为0xe7,对应键盘上的有GUI(WIN)键

0x29, 0xe7, // USAGE_MAXIMUM (Keyboard Right GUI)

//0x15:0001 01 01 这是个全局条目,说明数据的逻辑值最小值为0

0x15, 0x00, // LOGICAL_MINIMUM (0)

//0x25:0010 01 01 这是个全局条目,说明数据的逻辑值最大值为1

0x25, 0x01, // LOGICAL_MAXIMUM (1)

//0x95:1001 01 01 这是个全局条目,数据域的数量为8个

0x95, 0x08, // REPORT_COUNT (8)

//0x75:0111 01 01 这是个全局条目,每个数据域的长度为1位

0x75, 0x01, // REPORT_SIZE (1)

//0x81:1000 00 01 这是个主条目,有8*1bit数据域作为输入,属性为:Data,Var,Abs

0x81, 0x02, // INPUT (Data,Var,Abs)

//0x95:1001 01 01 这是个全局条目,数据域的数量为1个

0x95, 0x01, // REPORT_COUNT (1)

//0x75:0111 01 01 这是个全局条目,每个数据域的长度为8位

0x75, 0x08, // REPORT_SIZE (8)

//0x81:1000 00 01 这是个主条目,有1*8bit数据域作为输入,属性为:Cnst,Var,Abs

0x81, 0x03, // INPUT (Cnst,Var,Abs)

//0x95:1001 01 01 这是个全局条目,数据域的数量为6个

0x95, 0x06, // REPORT_COUNT (6)

//0x75:0111 01 01 这是个全局条目,每个数据域的长度为8位

0x75, 0x08, // REPORT_SIZE (8)

//0x25:0010 01 01 这是个全局条目,逻辑最大值为255

0x25, 0xFF, // LOGICAL_MAXIMUM (255)

//0x19:0001 10 01 这是个局部条目,用途的最小值为0

0x19, 0x00, // USAGE_MINIMUM (Reserved (no event indicated))

//0x29:0010 10 01 这是个局部条目,用途的最大值为0x65

0x29, 0x65, // USAGE_MAXIMUM (Keyboard Application)

//0x81:1000 00 01 这是个主条目,有6*8bit的数据域作为输入,属相为属性为:Data,Var,Abs

0x81, 0x00, // INPUT (Data,Ary,Abs)

//0x25:0010 01 01 这是个全局条目,逻辑的最大值为1

0x25, 0x01, // LOGICAL_MAXIMUM (1)

//0x95:1001 01 01 这是个全局条目,数据域的数量为2

0x95, 0x02, // REPORT_COUNT (2)

//0x75:0111 01 01 这是个全局条目,每个数据域的长度为1位

0x75, 0x01, // REPORT_SIZE (1)

//0x05:0000 01 01 这是个全局条目,用途页选择为LED

0x05, 0x08, // USAGE_PAGE (LEDs)

//0x19:0001 10 01 这是个局部条目,用途的最小值为0x01,对应键盘上的Num Lock

0x19, 0x01, // USAGE_MINIMUM (Num Lock)

//0x29:0010 10 01 这是个局部条目,用途的最大值为0x02,对应键盘上的Caps Lock

0x29, 0x02, // USAGE_MAXIMUM (Caps Lock)

//0x91:1001 00 01 这是个主条目,有2*1bit的数据域作为输出,属性为:Data,Var,Abs

0x91, 0x02, // OUTPUT (Data,Var,Abs)

//0x95:1001 01 01 这是个全局条目,数据域的数量为1个

0x95, 0x01, // REPORT_COUNT (1)

//0x75:0111 01 01 这是个全局条目,每个数据域的长度为6bit,正好与前面的2bit组成1字节

0x75, 0x06, // REPORT_SIZE (6)

//0x91:1001 00 01 这是个主条目,有1*6bit数据域最为输出,属性为:Cnst,Var,Abs

0x91, 0x03, // OUTPUT (Cnst,Var,Abs)

0xc0 // END_COLLECTION

};

4、修改端点缓存地址

在 usb_config.h中,调整每个USB端点分配的地址。

#define ENDP0_RXADDR (0x40)

#define ENDP0_TXADDR (0x80)

#define ENDP1_TXADDR (0xC0)

#define ENDP1_RXADDR (0x0F0)

#define ENDP2_TXADDR (0x110)

#define ENDP4_RXADDR (0x150)

#define ENDP4_TXADDR (0x190)

这时候就完成基本的配置,可以让电脑识别到键盘和虚拟串口的设备,但不能正常使用。

接下来就是代码初始化部分的修改。

基于本来虚拟串口的初始化增加HID配置

void CDC_Init(void)

{

USBD_InitParam_T usbParam;

USBD_InitParamStructInit(&usbParam);

usbParam.classReqHandler = USBD_ClassHandler;

usbParam.stdReqExceptionHandler = KeyBoard_ReportDescriptor;//增加HID配置

usbParam.resetHandler = VCP_Reset;

usbParam.inEpHandler = USBD_VCP_InEpCallback;

usbParam.outEpHandler = USBD_VCP_OutEpCallback;

usbParam.pDeviceDesc = (USBD_Descriptor_T *)&g_deviceDescriptor;

usbParam.pConfigurationDesc = (USBD_Descriptor_T *)&g_configDescriptor;

usbParam.pStringDesc = (USBD_Descriptor_T *)g_stringDescriptor;

usbParam.pStdReqCallback = &stdReqCallback;

USBD_Init(&usbParam);

}

void KeyBoard_ReportDescriptor(USBD_DevReqData_T *reqData)

{

uint8_t len;

if((reqData->byte.bRequest == USBD_GET_DESCRIPTOR) &&

(reqData->byte.bmRequestType.bit.recipient == USBD_RECIPIENT_INTERFACE) &&

(reqData->byte.bmRequestType.bit.type == USBD_REQ_TYPE_STANDARD))

{

if(reqData->byte.wValue[1] == 0x21)

{

len = USB_MIN(reqData->byte.wLength[0], 9);

USBD_CtrlInData((uint8_t *)&g_configDescriptor.pDesc[0x12], len);

}

else if(reqData->byte.wValue[1] == 0x22)

{

len = USB_MIN(reqData->byte.wLength[0], g_ReportDescriptor.size);

USBD_CtrlInData((uint8_t *)g_ReportDescriptor.pDesc, len);

}

}

else

{

USBD_SetEPTxRxStatus(USBD_EP_0, USBD_EP_STATUS_STALL, USBD_EP_STATUS_STALL);

}

}

到此配置部分基本完成,接下来到main中增加段测试代码,验证USB配置是否正确。

配置虚拟串口一直打印dataBuf[5]= {0xaa,0xbb,0xcc,0xdd,0xff};

HID键盘根据键值表输出数字1

void Delay(uint32_t i)

{

while(i--);

}

unsigned char dataBuf[5]= {0xaa,0xbb,0xcc,0xdd,0xff};

uint8_t Keyboad_Buf[8]={0,0,0x1E,0,0,0,0,0};

int main(void)

{

CDC_Init();

while(1)

{

USBD_TxData(USBD_EP_1, dataBuf, 5);

USBD_TxData(USBD_EP_4, Keyboad_Buf, 8);

Delay(0xFFFFFF);

}

}

cefa0432-765b-11f0-a18e-92fbcf53809c.png

烧录代码到开发板,接上USB线到电脑,可以看到Bushound能看到配置的复合设备。

cf12170c-765b-11f0-a18e-92fbcf53809c.png

使用串口助手能看到虚拟串口能正确打印我们的数据,键盘也正常在发送数字1,证明代码配置没问题,两个功能使用一个USB接口实现了。SDK的虚拟串口也有做接收回传的功能,可以直接使用。

到此键盘+虚拟串口的例程就简单修改完成了。

注:文章作者在原帖中提供了例程文件,有需要请至原文21ic论坛下载

原文地址:https://bbs.21ic.com/icview-3321226-1-1.html

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

    关注

    60

    文章

    8264

    浏览量

    274840
  • adc
    adc
    +关注

    关注

    99

    文章

    6750

    浏览量

    550080
  • 键盘
    +关注

    关注

    4

    文章

    867

    浏览量

    40940
  • 虚拟串口
    +关注

    关注

    3

    文章

    64

    浏览量

    14263

原文标题:APM32芯得 EP.62 | 基于APM32F103的USB键盘与虚拟串口复合设备配置详解

文章出处:【微信号:geehysemi,微信公众号:Geehy极海半导体】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    新品发布丨半导体推出工业级标准型APM32S103系列MCU

    半导体最新宣布推出,基于32位Arm Cortex-M3内核的 工业级标准型 APM32S103系列MCU 。该系列新品作为APM32F103系列迭代产品,增加产线资源,完善供应链
    的头像 发表于 12-16 18:24 2629次阅读

    APMEMIC/APM32F103系列

    我公司是APEXMIC正规代理商,主要负责推广APEXMIC的32位MCU,APM32F103系列,可以无缝兼容 STM32F103C8T6,103CBT6, 103RBT6, 103
    发表于 11-14 17:14

    关于APM32F1与Sxx32F1的兼容性问题

    APM32F103市基于Cortex M3 内核的微控制器,它与Sxx32F103兼容,同时优化了性能参数,增加了新的功能,可以完全取代Sxx32F103中容量芯片,同时增加功能,提升性能。 l管脚
    发表于 01-07 16:29

    国产品牌完美替代STM32F103系列产品简介

    品牌:上海航芯内核:M33,兼容M4指令料号:ACM32F303CBT8替代型号:意法STM32F103以及兼容F103的所有国产型号(如
    发表于 01-25 11:57

    STM32F103 USB虚拟串口驱动例程该怎样去移植呢

    STM32F103 USB虚拟串口驱动例程该怎样去移植呢?有哪些移植步骤?
    发表于 11-09 07:02

    APM32F103微控制器与Sxx32F103芯片有哪些不同点呢

    APM32F103是什么?APM32F103微控制器与Sxx32F103芯片有哪些不同点呢?
    发表于 02-23 06:02

    基于APM32F103开发板无法点亮灯是何原因

    APM32F103VBMIN开发板,采用基于芯片新建工程,STLINK下载,点灯都不能点亮用keil直接用官方例程,不带rtthread的例程
    发表于 08-24 14:17

    艾派克APM32F103系列MCU,助力产品性能优势更大化!

    艾派克APM32F103系列32位通用MCU,自去年12月发布以来,已通过客户多次测试使用,获得了良好的市场反馈。目前,该系列芯片已成功应用于消费类电子、工业控制、智能仪表以及物联网产品等领域。现在,小编就来为大家更详细的介绍下,艾派克APM32F103的性能优势吧!
    发表于 04-26 08:49 1.2w次阅读

    stm32f103&gd32的usb虚拟串口,打印类printer组合设备

    stm32f103&gd32的usb虚拟串口+打印类printer组合设备@TOCstm32f103&gd32的
    发表于 12-02 16:06 57次下载
    stm32<b class='flag-5'>f103</b>&gd32的<b class='flag-5'>usb</b><b class='flag-5'>虚拟</b><b class='flag-5'>串口</b>,打印类printer组合设备

    国产M3替代STM32F103XX

    硬件+软件兼容:(1)中科芯cks32f103XX官网没有资料(国企的通病),很草荡,只有代理商那边有开发板和资料(2)GD32F103兆易,资料全,用量多,价格在国产中算高,ST的80%(3)APM32F103珠海爱派克(后改
    发表于 12-02 18:21 11次下载
    国产M3替代STM32<b class='flag-5'>F103</b>XX

    APM32F103RCT7通过AEC-Q100车规认证

    APM32F103RCT7 MCU芯片经过广电计量等第三方权威机构检测,顺利通过AEC-Q100车规认证。
    发表于 02-07 10:38 2834次阅读
    <b class='flag-5'>极</b><b class='flag-5'>海</b><b class='flag-5'>APM32F103</b>RCT7通过AEC-Q100车规认证

    APM32F103编程手册

    APM32F103编程手册
    发表于 11-09 21:03 18次下载
    <b class='flag-5'>APM32F103</b>编程手册

    APM32F103VCT6S_USB_MAC电脑无法识别USB设备

    APM32F103VCT6S_USB_MAC电脑无法识别USB设备
    发表于 11-09 21:04 0次下载
    <b class='flag-5'>APM32F103VCT6S_USB</b>_MAC电脑无法识别<b class='flag-5'>USB</b>设备

    喜报频传!APM32工业级/车规级MCU产品接连荣获三项大奖

    半导体喜报频传接连荣获三项大奖。半导体“工业级高安全MCU APM32F415”、 “工业级主流型MCU
    发表于 11-21 15:17 860次阅读

    半导体推出工业级标准型APM32S103系列MCU

    APM32S103增强芯片标准性能,可在硬件管脚和软件上覆盖APM32F103系列产品,运算主频可达到96MHz,工作电压范围2.0V~3.6V,工作温度范围可覆盖-40℃~+105℃,满足商用级、工业级环境温度的标准要求。
    的头像 发表于 12-13 15:43 1618次阅读