你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

查看: 6213|回复: 0

请教关于STM32 USB IAP问题

[复制链接]

1

主题

0

回帖

0

蝴蝶豆

新手上路

最后登录
1970-1-1
发表于 2009-9-27 17:21:04 | 显示全部楼层 |阅读模式
为实现通过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),希望自己的大虾能指导下,万分感激。
回复

使用道具 举报

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版