首先在ST官网上下载了STM32的USB开发套件 地址:http://www.st.com/stonline/products/support/micro/files/um0424.zip
由于此开发套件基于ST的官方开发板,与EK-STM32F的电路有所不同。
比较了一下,不同之处在于 1, 官方的开发套件使用PD.09作为USB识别使能线,而EK-STM32F使用PD.08。 2, 官方的开发套件通过PB.09来判断是否进入DFU模式, 而EK-STM32F的按键使用了PD.03和PD.04。 3, EK-STM32F没有接外部SPI Flash, 所以只能更新内部flash。
因此修改代码如下:
void DFU_Button_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; /* Enable GPIOD clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); /* Configure PD.04 as input floating (Key push-button on EK-STM32F) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOD, &GPIO_InitStructure); }
u8 DFU_Button_Read (void) { /* Return the value of PD.04 */ return GPIO_ReadInputDataBit(GPIOD, GPIO_Pin_4); }
void Set_System(void) { GPIO_InitTypeDef GPIO_InitStructure; FLASH_Unlock();
/* RCC system reset(for debug purpose) */ RCC_DeInit();
/* Enable HSE */ RCC_HSEConfig(RCC_HSE_ON);
/* Wait till HSE is ready */ HSEStartUpStatus = RCC_WaitForHSEStartUp();
if(HSEStartUpStatus == SUCCESS) { /* Enable Prefetch Buffer */ FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Flash 2 wait state */ FLASH_SetLatency(FLASH_Latency_2); /* HCLK = SYSCLK */ RCC_HCLKConfig(RCC_SYSCLK_Div1); /* PCLK2 = HCLK */ RCC_PCLK2Config(RCC_HCLK_Div1);
/* PCLK1 = HCLK/2 */ RCC_PCLK1Config(RCC_HCLK_Div2);
/* PLLCLK = 8MHz * 9 = 72 MHz */ RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* Enable PLL */ RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */ while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET) { }
/* Select PLL as system clock source */ RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
/* Wait till PLL is used as system clock source */ while(RCC_GetSYSCLKSource() != 0x08) { } }
/* Enable GPIOD clock */ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); /* PD.08 used as USB pull-up --> EK-STM32F */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(GPIOD, &GPIO_InitStructure); USB_Cable_Config (DISABLE); // SPI_FLASH_Init(); USB_Cable_Config (ENABLE); }
void USB_Cable_Config (FunctionalState NewState) { if (NewState != DISABLE) { GPIO_ResetBits(GPIOD, GPIO_Pin_8); } else { GPIO_SetBits(GPIOD, GPIO_Pin_8); } }
修改后烧入EK-STM32F学习板,果然能识别出一个DFU设备。
/******************************************************************/ 已上传移植到EKSTM32F的USB开发套件 https://bbs.21ic.com/upfiles/img/20081/200818174511397.zip https://bbs.21ic.com/upfiles/img/20081/200818174737153.zip
下载了后要把001.zip改成zip.001, 002.zip改成zip.002
/******************************************************************/ 由于我用的7-zip看上去和大家的winzip不太兼容,所以请按23楼的说明,重新下载。
ZT 23楼如下:
香水城 发表于 2008-1-9 14:02 ST MCU ←返回版面
23楼: 问题找到了,是楼主使用的压缩软件与Windows自带的不兼容
通过与各方沟通,发现不能正确解压缩的原因是,楼主使用的压缩软件与Windows自带的不兼容。我下载并成功解压楼主的文件包,里面有两个目录,我把他们分别做了两个压缩包,因为项目文件中有相联关系,请下载后把他们放到同一个目录下(STM32F10xUSBLib)。
自建一个STM32F10xUSBLib目录 下载https://bbs.21ic.com/upfiles/img/20081/200819135956499.zip文件并解压到STM32F10xUSBLib目录 再下载https://bbs.21ic.com/upfiles/img/20081/20081914129199.zip文件并解压到STM32F10xUSBLib目录
最终目录结构应为: STM32F10xUSBLib FWLib library inc src USBLib demos Device_Firmware_Upgrade 本帖介绍的DFU演示软件 JoyStickMouse Mass_Storage Virtual_COM_Port library inc src
|