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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版