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

查看: 6171|回复: 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管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版