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

STM32F030 API 功能 基于CUBE库工程移植失败

[复制链接]
luscu 提问时间:2016-11-23 16:04 /
悬赏10ST金币已解决
我在做  STM32F030 API 功能的时候,基于官网的例子可以移植成功,看到LED闪了。然后将APP工程修改到我自己基于CUBE库做的实际工程中发现 在跑到HAL_Init();就跑飞了   官网的例子系统初始化的时候只使能了外设时钟, 并没有其他操作。后面就直接操作IO口了 非常简单!

/* USER CODE BEGIN 1 */
    uint32_t i = 0;
    for(i = 0; i < 48; i++)
  {
    VectorTable = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }
    /* Enable the SYSCFG peripheral clock*/
    RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE);
  /* Remap SRAM at 0x00000000 */
  SYSCFG_MemoryRemapConfig(SYSCFG_MemoryRemap_SRAM);
  /* USER CODE END 1 */

  /* MCU Configuration----------------------------------------------------------*/

  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init(); //到这里就会跑飞

  /* Configure the system clock */
  SystemClock_Config();

最佳答案

查看完整内容

用CubeMX NUCLEO-F042做了个项目测试了下,没有什么,主要是就是设置IRAM1的起始地址为:0x200000C0
收藏 2 评论24 发布时间:2016-11-23 16:04

举报

24个回答
党国特派员 回答时间:2016-11-23 16:04:51
用CubeMX NUCLEO-F042做了个项目测试了下,没有什么,主要是就是设置IRAM1的起始地址为:0x200000C0
QQ图片20161123205409.png

评分

参与人数 1ST金币 +5 收起 理由
zero99 + 5

查看全部评分

luscu 回答时间:2016-11-23 16:08:12
只在我自己的工程中增加了定义:
/* Private variables ---------------------------------------------------------*/
#define APPLICATION_ADDRESS     (uint32_t)0x08003000

/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
static __IO uint32_t TimingDelay;

#if   (defined ( __CC_ARM ))
  __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));
#elif (defined (__ICCARM__))
#pragma location = 0x20000000
  __no_init __IO uint32_t VectorTable[48];
#elif defined   (  __GNUC__  )
  __IO uint32_t VectorTable[48] __attribute__((section(".RAMVectorTable")));
#elif defined ( __TASKING__ )
  __IO uint32_t VectorTable[48] __at(0x20000000);
#endif

  for(i = 0; i < 48; i++)
  {
    VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }
同时修改IAP存放在内置FLASH的0x8000000的起始位置0x8003000

任风吹吹 回答时间:2016-11-23 16:18:02
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE);
换成:
__HAL_RCC_SYSCFG_CLK_ENABLE();
试试.

另外参考这篇文章: http://blog.csdn.net/flydream0/article/details/52808191
luscu 回答时间:2016-11-23 17:01:21
非常感谢你的回复,那个文章也写得很详细,这个文章之前我一直找都没找到,真太感谢你了。只是我在实际试验中还是不行,还没跑到VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));这个语句,在SystemClock_Config就已经挂了 调试每次都是跑到这个位置: 0x080000E6 E7FE      B        0x080000E6]  ; @0x080000E8   很可惜@              我还在继续调整中,非常感谢你的回复。
luscu 回答时间:2016-11-23 17:09:24
在说一点,改为:
  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();

  /* Configure the system clock */
  SystemClock_Config();

        for(i = 0; i < 48; i++)
  {
    VectorTable = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }

  /* Enable the SYSCFG peripheral clock*/
  __HAL_RCC_SYSCFG_CLK_ENABLE();
  /* Remap SRAM at 0x00000000 */
  __HAL_SYSCFG_REMAPMEMORY_SRAM();

后,MCU没有烧录BOOT程序单独烧录这个应用程序是可以自己运行的,加了BOOT程序再更新应用程序进去后就不运行了 ,是否需要我上传源代码一起看看?
党国特派员 回答时间:2016-11-23 17:16:45
上传源码看看,有时候片断不能看出问题所在。
任风吹吹 回答时间:2016-11-23 17:25:05
感觉跟你的IAP程序有关,由没有调用__set_MSP(),看看你的跳转语句?

另外工程配置需要注意下,参考:http://blog.csdn.net/flydream0/article/details/52058601
luscu 回答时间:2016-11-23 17:32:02
上传API和应用源代码,谢谢大家一起讨论!

API-1.rar

下载

3.35 MB, 下载次数: 6, 下载积分: ST金币 -1

STM32F0xx_IAP.rar

下载

768.75 KB, 下载次数: 8, 下载积分: ST金币 -1

任风吹吹 回答时间:2016-11-23 18:01:35
看了下,应该是SystemInit()函数问题,从IAP跳转到APP后第一件事情就是需要立即重置VectorTable,你的SystemInit()并没有做这事,于是产生的系统中断还是使用IAP中的向量,结果....

解决方法:使用官方默认的system_stm32f0xx.c文件,并不需要去修改systemint()函数。

你再试下。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

123下一页
关于 意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
13245底部标题123相同标题
12底部标题123相同标题
33333底部标题123相同序号
3435底部标题-无链接
关注我们
st-img 微信公众号
st-img 手机版