完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
@
我在我的应用程序中使用 STM32F469 MCU,我在 FS 的设备模式下使用 USB。 在这里,我无法转到“OTG_FS_IRQHandler”中断处理程序,而且 PC 无法识别虚拟端口。 它在主机模式下运行良好,电路板成功检测到笔式驱动器并将数据写入其中。 如果我在 STM32F217 上使用同一个库,它可以正常工作。 系统时钟配置为 168MHz。 以下是我用过的功能 #define USB_OTG_HS_BASE_ADDR 0x40040000 #define USB_OTG_FS_BASE_ADDR 0x50000000 无效 usbDevInit() { USB_OTG_BSP_disableVBUS(); USBH_Disconnect(&USB_OTG_Core); delay_ms(10); usbStatus = USB_DEV; USBD_Init(&USB_OTG_dev, USB_OTG_FS_CORE_ID, &USR_desc, &USBD_CDC_cb); // USB 设备初始化 delay_ms(20); } void USBD_Init(USB_OTG_CORE_HANDLE *pdev, USB_OTG_CORE_ID_TypeDef coreID, USBD_DEVICE *pDevice, USBD_Class_cb_TypeDef *class_cb) { /* 硬件初始化 */ USB_OTG_BSP_Init(pdev); USBD_DeInit(pdev); /*注册类和用户回调*/ pdev->dev.class_cb = class_cb; pdev->dev.usr_device = pDevice; /* 设置 USB OTG 核心参数 */ DCD_Init(pdev, coreID); /* 启用中断 */ USB_OTG_BSP_EnableInterrupt(pdev); } void USB_OTG_BSP_Init(USB_OTG_CORE_HANDLE *pdev) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd( RCC_AHB1Periph_GPIOA , ENABLE); /* 配置 SOF VBUS ID DM DP 引脚 */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9 |GPIO_Pin_11 |GPIO_Pin_12; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_OType = GPIO_OType_PP; GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_OTG1_FS); GPIO_PinAFConfig(GPIOA,GPIO_PinSource11,GPIO_AF_OTG1_FS); GPIO_PinAFConfig(GPIOA,GPIO_PinSource12,GPIO_AF_OTG1_FS); /* 这用于 ID 行调试 */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG,启用); RCC_AHB2PeriphClockCmd(RCC_AHB2Periph_OTG_FS, ENABLE) ; 如果(usbStatus == USB_HOST) /* 为延时函数初始化定时器 */ USB_OTG_BSP_timeInit(); } USBD_Status USBD_DeInit(USB_OTG_CORE_HANDLE *pdev) { /* 软件初始化 */ USBD_Suspend(pdev); USB_OTG_BSP_DisableInterrupt(pdev); 返回USBD_OK; } void DCD_Init(USB_OTG_CORE_HANDLE *pdev , USB_OTG_CORE_ID_TypeDef 核心ID) { uint32_t我; USB_OTG_EP *ep; USB_OTG_SelectCore (pdev, coreID); pdev->dev.device_status = USB_OTG_DEFAULT; pdev->dev.device_address = 0; /* 初始化 ep 结构 */ for (i = 0; i < pdev->cfg.dev_endpoints ; i++) { ep = &pdev->dev.in_ep; /* 初始化 ep 结构 */ ep->is_in = 1; ep->num = i; ep->tx_fifo_num = i; /* 控制直到 ep 被激活 */ ep->type = EP_TYPE_CTRL; ep->maxpacket = USB_OTG_MAX_EP0_SIZE; ep->xfer_buff = 0; ep->xfer_len = 0; } for (i = 0; i < pdev->cfg.dev_endpoints; i++) { ep = &pdev->dev.out_ep; /* 初始化 ep 结构 */ ep->is_in = 0; ep->num = i; ep->tx_fifo_num = i; /* 控制直到 ep 被激活 */ ep->type = EP_TYPE_CTRL; ep->maxpacket = USB_OTG_MAX_EP0_SIZE; ep->xfer_buff = 0; ep->xfer_len = 0; } USB_OTG_DisableGlobalInt(pdev); /*初始化核心(通用初始化)*/ USB_OTG_CoreInit(pdev); /* 强制设备模式*/ USB_OTG_SetCurrentMode(pdev, DEVICE_MODE); /* 初始化设备 */ USB_OTG_CoreInitDev(pdev); /* 启用 USB 全局中断 */ USB_OTG_EnableGlobalInt(pdev); } void USB_OTG_BSP_EnableInterrupt(USB_OTG_CORE_HANDLE *pdev) { NVIC_InitTypeDef NVIC_InitStructure; NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); NVIC_InitStructure.NVIC_IRQChannel = OTG_FS_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); } 请帮助我解决问题。 |
|
相关推荐
1个回答
|
|
FirmwareProjectsSTM32469I_EVALApplicationsUSB_DeviceCDC_Standalone 下提供的示例,它可能对您有所帮助。
此外,确保您已正确配置中断并启用 NVIC。 |
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2738 浏览 1 评论
3241 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1810 浏览 1 评论
3650 浏览 6 评论
6039 浏览 21 评论
1339浏览 4评论
201浏览 3评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
353浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
444浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
275浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 12:17 , Processed in 1.168067 second(s), Total 78, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号
|