为实现通过STM32的USB进行IAP程序下载(由于对CH374比较熟悉,而STM32的USB库比较繁杂,当前未采用STM32自带的USB功能,而是采用STM32 + CH374实现),我将FLASH分为两部分: 0x08000000 --- 0x08002FFF作为IAP程序空间; 0x08003000 --- 0x08010000作为用户应用程序空间; 现在我已经实现了可以将用户程序下载到指定的0x08003000开始的位置,并且比较FLASH中的数据也与编译产生的BIN文件数据一样。 主程序大体如下: int main(void) { u8 count; u8 temp8; RCC_Configuration( ); /* 时钟初始化 */ USART_Configuration( ); /* 串口初始化 */ #ifdef MY_DEBUG_PRINTF printf("start\n"); #endif Mode_Select_Pin_Init( ); /* 初始化模式选择引脚 */ /* 如果PA.0为高电平,则进入用户程序模式;否则进入IAP下载模式 */ if( Mode_Select_Pin_Read( ) != 0x00 ) { printf("Use mode\n"); /* 判断用户程序的起始地址是否为0X8003000 */ if( ( ( *( vu32* )0x8003000 ) & 0x2FFF0000 ) == 0x20000000 ) { /* 将用户代码的复位地址赋值给JumpAddress */ JumpAddress = *( vu32* )( ApplicationAddress + 4 ); Jump_To_Application = ( pFunction )JumpAddress; /* 初始化用户程序的堆栈指针 */ __MSR_MSP( *( vu32* )ApplicationAddress ); /* 把用户代码的堆栈地址写入堆栈指针 */ Jump_To_Application( ); /* 把用户代码的复位地址付给PC指针 */ } } else { printf("IAP mode\n"); /* 进入下载模式,进行程序下载处理 */ ............ } } 现在问题是上电运行后,程序也能进入用户应用程序部分,但运行的不正常,感觉好象直接就没运行。用户应用程序很简单,只是简单的打印输出。如果直接用串口下载工具,下载到0x08000000起始地址能正常打印输出,但通过USB IAP下载到0x08003000就运行不正常, 感觉应该是我编译的应用程序设置不对,也参考网上说的进行设置过,但还是不对。不知道具体需要怎么设置,我用的MDK(KEIL 3.53),希望自己的大虾能指导下,万分感激。 |
stm32 USB的CDC类传输掉数据
STM32F105 USB接收数据不断进入中断,出现“死机”现象
关于STM32CubeMX配置的USB例程电脑无法识别问题
STM32F407 USB-HS-OTG是否不外接PHY可以做虚拟串口?
如何做一个USB从机键盘用stm32f407
用STM32F4 Cube MX生成的USB Device C代码的BUG
USB Device + FatFS + SDIO 模拟U盘意外只读问题
USB Device + FatFS + SDIO 问题
STM32H7配置成USB DEVICE时,连接电脑时不进入中断
STM32F446 USB和串口1 冲突