OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5191|回复: 11

HAL库与标准库 PB14,PB15,USB口的配置,及两个USB初始化配置

[复制链接]

13

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2017-10-17
在线时间
119 小时
发表于 2022-8-11 10:44:00 | 显示全部楼层 |阅读模式
本帖最后由 冯必兴 于 2022-8-25 09:22 编辑

硬件描述:使用的是STM32F429IGT6 的MCU
软件描述:使用的是HAL库

直接在原子哥所提供的f429参考例程进行修改即可。


//USB OTG 底层IO初始化
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
     GPIO_InitTypeDef  GPIO_InitStruct;
    __HAL_RCC_GPIOB_CLK_ENABLE();                   //使能GPIOB时钟
    __HAL_RCC_USB_OTG_HS_CLK_ENABLE();              //使能OTG HS时钟

        //配置PB14 15
    GPIO_InitStruct.Pin=GPIO_PIN_14|GPIO_PIN_15;    //PB14 PB15
    GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;           //复用
    GPIO_InitStruct.Pull=GPIO_NOPULL;               //无上下拉
    GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;          //高速
    GPIO_InitStruct.Alternate=GPIO_AF12_OTG_HS_FS;     //复用为OTG_HS_FS
    HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);         //初始化
//GPIO_AF_OTG_FS改成GPIO_AF_OTG_HS_FS
    PCF8574_WriteBit(USB_PWR_IO,1);                 //开启USB HOST电源供电C
}

//USB OTG 中断设置,开启USB FS中断
//pdev:USB OTG内核结构体指针
void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{         
    HAL_NVIC_SetPriority(OTG_HS_IRQn,0,3);          //抢占优先级0,子优先级3
    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);                //使能OTG USB FS中断
}



还有中断要改的不要忘记:

//USB OTG 中断服务函数
//处理所有USB中断
void OTG_HS_IRQHandler(void)
{
          USBD_OTG_ISR_Handler(&USB_OTG_dev);
}


硬件描述:使用的是STM32F429IGT6 的MCU
软件描述:使用的是标准库
void USB_FS_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev)
{
        
//        GPIO_InitTypeDef  GPIO_InitStructure;

//  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE);//使能GPIOA时钟
//  RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE);//使能USB OTG时钟        钟
//  //GPIOA11,A12设置
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;//PA11/12复用功能输出        
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化        
//        
//        GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_OTG_FS);//PA11,AF10(USB)
//        GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_OTG_FS);//PA12,AF10(USB)
/************************标准库*****************************/        

                GPIO_InitTypeDef GPIO_InitStructure;
        
        //开启按键GPIO口的时钟

                RCC_USB_FS_GPIO_CLK_ENABLE();                                                                                                                                   //使能GPIOA时钟
                RCC_USB_OTG_FS_CLK_ENABLE();                                                                                                                                                      //使能OTG FS时钟
                GPIO_InitStructure.GPIO_Pin = USB_FS_DM_GPIO_PIN | USB_FS_DP_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                                                                                                                                                //复用
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                                                                                                                        //推挽输出        
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;                                                                               //无上下拉
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                                                                                                  //50Mhz

                GPIO_Init(USB_FS_GPIO_PORT, &GPIO_InitStructure);                                                                                                                //初始化
               
                //复用为OTG FS
    GPIO_PinAFConfig(USB_FS_GPIO_PORT,USB_FS_AF_DM_GPIO_PIN ,GPIO_AF_OTG_FS);
    GPIO_PinAFConfig(USB_FS_GPIO_PORT,USB_FS_AF_DP_GPIO_PIN,GPIO_AF_OTG_FS);
        
        
/************************HAL库初始化*****************************/               
        //配置PA11 12
//    __HAL_RCC_USB_FS_GPIO_CLK_ENABLE();                                                           //使能GPIOA时钟
//    __HAL_RCC_USB_OTG_FS_CLK_ENABLE();                                                                              //使能OTG FS时钟
//    GPIO_InitStruct.Pin=USB_FS_DM_GPIO_PIN | USB_FS_DP_GPIO_PIN;    //PA11 12
//    GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;                                                                           //复用
//    GPIO_InitStruct.Pull=GPIO_NOPULL;                                                                               //无上下拉
//    GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;                                                                          //高速
//    GPIO_InitStruct.Alternate=GPIO_AF10_OTG_FS;                                                                     //复用为OTG FS
//    HAL_GPIO_Init(USB_FS_GPIO_PORT, &GPIO_InitStruct);                                 //初始化
                                       
}

//配置USB_HS 底层IO初始化
//pdev:USB OTG内核结构体指针
void USB_HS_OTG_BSP_Init(USB_DEV_OTG_CORE_HANDLE *pdev)
{
//        GPIO_InitTypeDef  GPIO_InitStructure;

//  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOA时钟
//  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS, ENABLE);//使能USB OTG时钟        钟
//  //GPIOA11,A12设置
//  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14 | GPIO_Pin_15;//PA11/12复用功能输出        
//  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用功能
//  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
//  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
//  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
//  GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化        
//        
//        GPIO_PinAFConfig(GPIOB,GPIO_PinSource14,GPIO_AF_OTG_HS_FS);//PA11,AF10(USB)
//        GPIO_PinAFConfig(GPIOB,GPIO_PinSource15,GPIO_AF_OTG_HS_FS);//PA12,AF10(USB)

/************************标准库*****************************/
                GPIO_InitTypeDef GPIO_InitStructure;
        
        //开启按键GPIO口的时钟

                RCC_USB_HS_GPIO_CLK_ENABLE();                                                                                                                                   //使能GPIOA时钟
                RCC_USB_OTG_HS_CLK_ENABLE();                                                                                                                                                      //使能OTG FS时钟
                GPIO_InitStructure.GPIO_Pin = USB_HS_DM_GPIO_PIN | USB_HS_DP_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;                                                                                                                                                //复用
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;                                                                                                                        //推挽输出        
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;                                                                               //无上下拉
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;                                                                                                  //高速

                GPIO_Init(USB_HS_GPIO_PORT, &GPIO_InitStructure);                                                                                                                //初始化
               
                //复用为OTG FS
    GPIO_PinAFConfig(USB_HS_GPIO_PORT,USB_HS_AF_DM_GPIO_PIN ,GPIO_AF_OTG_HS_FS);
    GPIO_PinAFConfig(USB_HS_GPIO_PORT,USB_HS_AF_DP_GPIO_PIN,GPIO_AF_OTG_HS_FS);

        
/************************HAL库初始化*****************************/        
//     GPIO_InitTypeDef  GPIO_InitStruct;
//    __HAL_RCC_USB_HS_GPIO_CLK_ENABLE();                                                           //使能GPIOB时钟
//    __HAL_RCC_USB_OTG_HS_CLK_ENABLE();                                                                              //使能OTG HS时钟

//    GPIO_InitStruct.Pin=USB_HS_DM_GPIO_PIN | USB_HS_DP_GPIO_PIN;    //PB14 PB15
//    GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;                                                                                   //复用
//    GPIO_InitStruct.Pull=GPIO_NOPULL;                                                                               //无上下拉
//    GPIO_InitStruct.Speed=GPIO_SPEED_HIGH;                                                                          //高速
//    GPIO_InitStruct.Alternate=GPIO_AF12_OTG_HS_FS;                                                             //复用为OTG_HS_FS
//    HAL_GPIO_Init(USB_HS_GPIO_PORT, &GPIO_InitStruct);                                 //初始化
//          USB_HS_OTG_IO_RESET();
}

/**
  * @brief  USB_HS_OTG_IO_RESET
  *         //用于USB热插拔处理,目的是切换模式的时候自动更新驱动扫描
  * @param  当USB D+ 的电平从低到高这一个过程会使pc端自动重新跟新驱动
                                                上面由于配置的是GPIO_MODE_AF_PP模式无法实现对IO口电平的控制
                                                故此重新配置一次初始化
  * @retval 无
  */

void USB_HS_OTG_IO_RESET()
{
/************************标准库*****************************/
                GPIO_InitTypeDef GPIO_InitStructure;

                //开启按键GPIO口的时钟
                RCC_USB_HS_GPIO_CLK_ENABLE();

                //初始化引脚
                GPIO_InitStructure.GPIO_Pin= USB_HS_DP_GPIO_PIN;
                GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
                GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
                GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
                GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;        
                GPIO_Init(USB_HS_GPIO_PORT, &GPIO_InitStructure);



                GPIO_WriteBit(USB_HS_GPIO_PORT, USB_HS_DP_GPIO_PIN,Bit_RESET);
                delay_ms(20);
                GPIO_WriteBit(USB_HS_GPIO_PORT, USB_HS_DP_GPIO_PIN,Bit_SET);
                delay_ms(20);
        
        
        
/************************HAL库初始化*****************************/
//                GPIO_InitTypeDef GPIO_Initure;
//                __HAL_RCC_USB_HS_GPIO_CLK_ENABLE();           //开启GPIOB时钟

//                GPIO_Initure.Pin=USB_HS_DP_GPIO_PIN;                                         
//                GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP;                          //推挽输出
//                GPIO_Initure.Pull=GPIO_PULLUP;                                  //上拉
//                GPIO_Initure.Speed=GPIO_SPEED_HIGH;                             //高速
//                HAL_GPIO_Init(USB_HS_GPIO_PORT,&GPIO_Initure);

//                HAL_GPIO_WritePin(USB_HS_GPIO_PORT,USB_HS_DM_GPIO_PIN,GPIO_PIN_RESET);        //  
//                delay_ms(20);

//                HAL_GPIO_WritePin(USB_HS_GPIO_PORT,USB_HS_DP_GPIO_PIN,GPIO_PIN_SET);        //  
//                delay_ms(20);
}
//USB_FS OTG 中断设置,开启USB FS中断
//pdev:USB OTG内核结构体指针
void USB_FS_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev)
{
        NVIC_InitTypeDef   NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn;                                            //FS改成HS
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x02;//子优先级3
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
        
  NVIC_Init(&NVIC_InitStructure);//配置
        
/************************HAL库*****************************/
//    HAL_NVIC_SetPriority(OTG_FS_IRQn,0,3);          //抢占优先级0,子优先级3
//    HAL_NVIC_EnableIRQ(OTG_FS_IRQn);                //使能OTG USB FS中断  
}

//USB_HS OTG 中断设置,开启USB FS中断
//pdev:USB OTG内核结构体指针
void USB_HS_OTG_BSP_EnableInterrupt(USB_DEV_OTG_CORE_HANDLE *pdev)
{         
        
        NVIC_InitTypeDef   NVIC_InitStructure;
  NVIC_InitStructure.NVIC_IRQChannel = OTG_HS_IRQn;                                            //FS改成HS
  NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0x00;//抢占优先级0
  NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0x03;//子优先级3
  NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;//使能通道
        
  NVIC_Init(&NVIC_InitStructure);//配置        
        
/************************HAL库*****************************/
//    HAL_NVIC_SetPriority(OTG_HS_IRQn,0,2);          //抢占优先级0,子优先级3
//    HAL_NVIC_EnableIRQ(OTG_HS_IRQn);                //使能OTG USB FS中断
}




  
头文件定义
/******************HAL库***********************/
//#define        __HAL_RCC_USB_FS_GPIO_CLK_ENABLE()                __HAL_RCC_GPIOA_CLK_ENABLE();
//#define USB_FS_GPIO_PORT                            GPIOA               
//#define USB_FS_DM_GPIO_PIN                GPIO_PIN_11                        //USB_FS_D-
//#define USB_FS_DP_GPIO_PIN                GPIO_PIN_12                        //USB_FS_D+        

/*****************标准库***********************/
#define RCC_USB_FS_GPIO_CLK_ENABLE()         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA, ENABLE)   //使能GPIOA时钟
#define RCC_USB_OTG_FS_CLK_ENABLE()         RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE)//使能USB HS OTG时钟  
#define USB_FS_GPIO_PORT                                            GPIOA               
#define USB_FS_DM_GPIO_PIN                                                GPIO_Pin_11                                                        //USB_FS_D-
#define USB_FS_DP_GPIO_PIN                                                GPIO_Pin_12                                                        //USB_FS_D+        
#define USB_FS_AF_DM_GPIO_PIN                                        GPIO_PinSource11                                 //USB_FS_D- 引脚的复用配置
#define USB_FS_AF_DP_GPIO_PIN                                        GPIO_PinSource12                                //USB_FS_D+        引脚的复用配置




/******************HAL库***********************/
//#define        __HAL_RCC_USB_HS_GPIO_CLK_ENABLE()                __HAL_RCC_GPIOB_CLK_ENABLE();
//#define USB_HS_GPIO_PORT                            GPIOB               
//#define USB_HS_DM_GPIO_PIN                GPIO_PIN_14                        //USB_HS_D-
//#define USB_HS_DP_GPIO_PIN                GPIO_PIN_15                        //USB_HS_D+        

/*****************标准库***********************/
#define RCC_USB_HS_GPIO_CLK_ENABLE()         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE)   //使能GPIOB时钟
#define RCC_USB_OTG_HS_CLK_ENABLE()         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_OTG_HS, ENABLE)//使能USB HS OTG时钟   
#define USB_HS_GPIO_PORT                                            GPIOB        
#define USB_HS_DM_GPIO_PIN                                                GPIO_Pin_14                                                 //USB_HS_D-
#define USB_HS_DP_GPIO_PIN                                                GPIO_Pin_15                                                        //USB_HS_D+        
#define USB_HS_AF_DM_GPIO_PIN                                        GPIO_PinSource14                                 //USB_HS_D- 引脚的复用配置
#define USB_HS_AF_DP_GPIO_PIN                                        GPIO_PinSource15                                //USB_HS_D+        引脚的复用配置



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-10-17 13:40:28 | 显示全部楼层
兄弟,请问下,这个程序可以对4G或者5G模块发AT指令通讯吗?
回复 支持 反对

使用道具 举报

13

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2017-10-17
在线时间
119 小时
 楼主| 发表于 2023-10-20 11:01:01 | 显示全部楼层
yangwang1025 发表于 2023-10-17 13:40
兄弟,请问下,这个程序可以对4G或者5G模块发AT指令通讯吗?

首先确认模块是否是USB通讯的,然后你还要配置一个驱动,这里我只是提到驱动里面主要注意事项
回复 支持 反对

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-10-20 11:59:19 | 显示全部楼层
冯必兴 发表于 2023-10-20 11:01
首先确认模块是否是USB通讯的,然后你还要配置一个驱动,这里我只是提到驱动里面主要注意事项

可以发个你配置过的驱动,一个完整的源码我看下吗?万分感谢!
回复 支持 反对

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-10-20 12:00:37 | 显示全部楼层
冯必兴 发表于 2023-10-20 11:01
首先确认模块是否是USB通讯的,然后你还要配置一个驱动,这里我只是提到驱动里面主要注意事项

我确定了4G模块是USB通讯的,然后我是用的TYPE-C的线,一端接5G模块,USB这端接F407开发板的USB_HOST端
回复 支持 反对

使用道具 举报

13

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2017-10-17
在线时间
119 小时
 楼主| 发表于 2023-10-23 16:26:11 | 显示全部楼层
yangwang1025 发表于 2023-10-20 12:00
我确定了4G模块是USB通讯的,然后我是用的TYPE-C的线,一端接5G模块,USB这端接F407开发板的USB_HOST端

那你是要做host收发是吗?然后无法发送?
回复 支持 反对

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-10-23 17:19:10 | 显示全部楼层
冯必兴 发表于 2023-10-23 16:26
那你是要做host收发是吗?然后无法发送?

是的,做host收发,无法发送,所以想请教下你发一个完整的代码参考下
回复 支持 反对

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-10-23 17:26:43 | 显示全部楼层
yangwang1025 发表于 2023-10-23 17:19
是的,做host收发,无法发送,所以想请教下你发一个完整的代码参考下

您要是不介意的话,能不能加个微信,我的微信号是:417137323
回复 支持 反对

使用道具 举报

13

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2017-10-17
在线时间
119 小时
 楼主| 发表于 2023-10-24 14:18:25 | 显示全部楼层
yangwang1025 发表于 2023-10-23 17:26
您要是不介意的话,能不能加个微信,我的微信号是:417137323

发送函数:
usbd_hid_core.c 文件 一下这个文件
uint8_t USBD_HID_SendReport(USB_DEV_OTG_CORE_HANDLE*  pdev,
                            uint8_t* report,
                            uint16_t len)
{
    if(pdev->dev.device_status == USB_OTG_CONFIGURED)
    {
        DCD_EP_Tx(pdev, HID_IN_EP, report, len);
    }
    return USBD_OK;
}

usb_dev_core.h
typedef struct USB_DEV_OTG_handle
{
  USB_DEV_OTG_CORE_CFGS    cfg;
  USB_DEV_OTG_CORE_REGS    regs;
#ifdef USE_DEVICE_MODE
  DCD_DEV_DEV     dev;
#endif
#ifdef USE_HOST_MODE
  HCD_DEV_DEV     host;
#endif
#ifdef USE_OTG_MODE
  OTG_DEV     otg;
#endif
}
USB_DEV_OTG_CORE_HANDLE , *PUSB_DEV_OTG_CORE_HANDLE;



调用方法:
USBD_HID_SendReport(&USB_DEV_OTG_Core, HID_Data.MY_HID_buff, 16);


USB做为主机接收数据函数:
    USBH_InterruptSendData(pdev, report, len, HID_Machine.hc_num_out);

回复 支持 反对

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-10-24 16:26:55 | 显示全部楼层
冯必兴 发表于 2023-10-24 14:18
发送函数:
usbd_hid_core.c 文件 一下这个文件
uint8_t USBD_HID_SendReport(USB_DEV_OTG_CORE_HANDLE ...

可以发个完整的代码波,然后我再根据你这个改!
回复 支持 反对

使用道具 举报

13

主题

49

帖子

0

精华

高级会员

Rank: 4

积分
550
金钱
550
注册时间
2017-10-17
在线时间
119 小时
 楼主| 发表于 2023-10-25 11:42:01 | 显示全部楼层
yangwang1025 发表于 2023-10-24 16:26
可以发个完整的代码波,然后我再根据你这个改!

我这发不出去的,都加密的
回复 支持 反对

使用道具 举报

13

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
263
金钱
263
注册时间
2023-10-17
在线时间
49 小时
发表于 2023-10-25 14:04:39 | 显示全部楼层
冯必兴 发表于 2023-10-25 11:42
我这发不出去的,都加密的

好的,那我自己琢磨以下,有不懂的再请教你!谢谢
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-4-7 12:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表