打印
[STM32L1]

STM32L152串口IAP

[复制链接]
2382|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
309976659|  楼主 | 2015-10-13 14:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有哪位大神做过STM32L152的串口IAP吗?最近项目要用到这个,从ST官网下载了STM32L152的IAP例程,用这个IAP可以可以将APP下载成功但是下载完后机器毫无反应。我的APP里有重新设置中断向量表,NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000)。有做过这个芯片IAP的吗?可以分享下你们的经验吗?
沙发
598330983| | 2015-10-13 15:45 | 只看该作者
STM32L1xx上使用USART实现在应用中编程(IAP).pdf (231.63 KB)

给,这个官网给的教程。



使用特权

评论回复
板凳
airwill| | 2015-10-13 16:36 | 只看该作者
NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000) 这是更改中断向量地址的函数. 应该不容易出错. 不过从这里看到你的起始 FLASH 地址 0x8003000.
在写 IAP 下的 APP 代码的时候, 一个不注意的地方, 就是要把 FLASH 的起始地址改为这个地址(0x8003000).

使用特权

评论回复
地板
gejigeji521| | 2015-10-13 17:20 | 只看该作者
en ,那个写的时候,最好前后留点多余的空间。

使用特权

评论回复
5
309976659|  楼主 | 2015-10-13 22:43 | 只看该作者
APP里面FLASH的起始地址已经设为0x8003000了,引导程序把APP写入0x8003000开始的flash也是成功的,但是机器就是运行不起来,不知道为什么,之前做过stm32f103,都没有问题。有谁有stm32l152 iap成功经验?

使用特权

评论回复
6
309976659|  楼主 | 2015-10-14 22:21 | 只看该作者
没有人做过吗??

使用特权

评论回复
7
玛尼玛尼哄| | 2015-10-14 22:31 | 只看该作者
引导程序指定跳转位置了吗?好像app写入的起始地址,需要在引导里,进行指针跳转到。

使用特权

评论回复
8
mintspring| | 2015-10-14 23:01 | 只看该作者
IAP程序需要指定跳转的目的地址吧。

使用特权

评论回复
9
jeckboy| | 2015-10-19 00:10 | 只看该作者
可以给你说下我的做法:boot程序烧写在flash起始空间,只占很小的1k或者2k即可(只占CPU的flash一个最小扇区即可),专门用于检查是否有烧写请求,如果有则先烧写再跳转,没有直接跳转。
应用程序从boot之后空间编译,比如8001000,烧写时起始地址也必须是8001000,注意同时将中断向量偏移地址也设到0x1000,应该就可以了。
当然前提是不跳转时应用程序必须调试正确!

使用特权

评论回复
10
309976659|  楼主 | 2015-11-4 10:50 | 只看该作者
问题有了更进一步的原因,就是我的APP在main函数设置完中断向量后即进入停机模式,现在的问题是无法  正 常唤醒,从IAP跳转至APP是成功的,因为打印正常。而我正常调试时(不使用IAP)是一切正常的。mai函数如下
int main(void)
{
        SystemInit();
  /* Set the Vector Table base location at 0x3000 */
          NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x3000);
    Uart_Init();        //UART通讯的设定
    Delayms(1000);
   Uart_Send("STM32L152 Stylus printer is runing.\r\n");
   Key_GPIO_Init();
   RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR, ENABLE);
  PWR_EnterSTOPMode(PWR_Regulator_LowPower, PWR_STOPEntry_WFI);
   while(1)
   {
   //应用程序
   }
}

void Key_GPIO_Init(void)
{
        GPIO_InitTypeDef GPIO_InitStructure;
        EXTI_InitTypeDef EXTI_InitStructure;
        NVIC_InitTypeDef NVIC_InitStructure;

        /* config the extiline*/
        RCC_AHBPeriphClockCmd(RCC_KEY_POWER_PORT,ENABLE);

        /* config the NVIC*/
        NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;        
        NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
        NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
        NVIC_Init(&NVIC_InitStructure);


        /* EXTI line gpio config */         
        GPIO_InitStructure.GPIO_Pin = KEY_POWER_PIN;                 
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;          // 上拉拉输入
        GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
        GPIO_Init(KEY_POWER_PORT, &GPIO_InitStructure);

        /* Enable SYSCFG clock */
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);


        /* Connect EXTI0 Line to key1 pin */
        SYSCFG_EXTILineConfig(EXTI_PortSourceGPIOA, EXTI_PinSource0);
        /* EXTI line mode config */
        EXTI_InitStructure.EXTI_Line = EXTI_Line0;
        EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;
        EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Falling; //下降沿中断
        EXTI_InitStructure.EXTI_LineCmd = ENABLE;
        EXTI_Init(&EXTI_InitStructure);
}
有没有谁遇到过类似问题啊,真的百思不得其解啊。我做过STM32F103,STM32F072都是这样做的就没问题。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

27

帖子

2

粉丝