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

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

查看全部评分

任风吹吹 回答时间:2016-11-23 18:27:55
由于下班了,时间不够,感觉还是欠考虑,不过可以先试下替换实用你那工程下的binary目录下的system....文件试试
liuxy236@tom.co 回答时间:2016-11-23 19:07:11
路过                    
党国特派员 回答时间:2016-11-23 21:24:01
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "main.h"
  3. #include "stm32f0xx_hal.h"
  4. #include "gpio.h"

  5. /* USER CODE BEGIN Includes */

  6. /* USER CODE END Includes */

  7. /* Private variables ---------------------------------------------------------*/

  8. /* USER CODE BEGIN PV */
  9. /* Private variables ---------------------------------------------------------*/
  10. #define APPLICATION_ADDRESS     (uint32_t)0x08003000

  11. __IO uint32_t VectorTable[48] __attribute__((at(0x20000000)));

  12. pFunction Jump_To_Application;
  13. uint32_t JumpAddress;

  14. /* USER CODE END PV */

  15. /* Private function prototypes -----------------------------------------------*/
  16. void SystemClock_Config(void);
  17. void Error_Handler(void);

  18. /* USER CODE BEGIN PFP */
  19. /* Private function prototypes -----------------------------------------------*/

  20. /* USER CODE END PFP */

  21. /* USER CODE BEGIN 0 */

  22. /* USER CODE END 0 */

  23. int main(void)
  24. {

  25.   /* USER CODE BEGIN 1 */
  26.   for(uint8_t i = 0; i < 48; i++)
  27.   {
  28.     VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  29.   }
  30.   /* USER CODE END 1 */

  31.   /* MCU Configuration----------------------------------------------------------*/

  32.   /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  33.   HAL_Init();

  34.   /* Configure the system clock */
  35.   SystemClock_Config();

  36.   /* Initialize all configured peripherals */
  37.   MX_GPIO_Init();

  38.   /* USER CODE BEGIN 2 */
  39.     /* Test if user code is programmed starting from address "APPLICATION_ADDRESS" */
  40.     //if (((*(__IO uint32_t*)APPLICATION_ADDRESS) & 0x2FFE0000 ) == 0x20000000)
  41.     {
  42.       /* Jump to user application */
  43.       JumpAddress = *(__IO uint32_t*) (APPLICATION_ADDRESS + 4);
  44.       Jump_To_Application = (pFunction) JumpAddress;
  45.       
  46.       /* Initialize user application's Stack Pointer */
  47.       __set_MSP(*(__IO uint32_t*) APPLICATION_ADDRESS);
  48.       
  49.       /* Jump to application */
  50.       Jump_To_Application();
  51.     }
  52.   /* USER CODE END 2 */

  53.   /* Infinite loop */
  54.   /* USER CODE BEGIN WHILE */
  55.   while (1)
  56.   {
  57.   /* USER CODE END WHILE */
  58.         HAL_GPIO_TogglePin(LD3_GPIO_Port,LD3_Pin);
  59.         HAL_Delay(100);
  60.   /* USER CODE BEGIN 3 */

  61.   }
  62.   /* USER CODE END 3 */

  63. }
复制代码
peter001 回答时间:2016-11-24 00:25:38
帮顶
zbber 回答时间:2016-11-24 07:28:40
在说一点,改为:
12下一页

所属标签

相似问题

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版