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

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

[复制链接]
luscu 提问时间:2016-11-23 16:04 /
阅读主题, 点击返回1楼
收藏 2 评论24 发布时间:2016-11-23 16:04
24个回答
高二毛 回答时间:2016-11-24 08:26:56
关注一下。。。。
luscu 回答时间:2016-11-24 08:36:59
任风吹吹 发表于 2016-11-23 18:01
看了下,应该是SystemInit()函数问题,从IAP跳转到APP后第一件事情就是需要立即重置VectorTable,你的Syste ...

谢谢,我改为从IAP跳转到APP后第一件事情就是需要立即重置VectorTabl:
int main(void)
{

  /* USER CODE BEGIN 1 */
        uint32_t i = 0;
        for(i = 0; i < 48; i++)
  {
    VectorTable = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }
  /* 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();
这样也是不行。
luscu 回答时间:2016-11-24 08:37:55
任风吹吹 发表于 2016-11-23 18:27
由于下班了,时间不够,感觉还是欠考虑,不过可以先试下替换实用你那工程下的binary目录下的system....文件 ...

当时我也匆匆下班了 ,天气冷了早点回家!
luscu 回答时间:2016-11-24 08:52:16
党国特派员 发表于 2016-11-23 21:23
用CubeMX NUCLEO-F042做了个项目测试了下,没有什么,主要是就是设置IRAM1的起始地址为:0x200000C0
...

非常感谢你的关注!   这个地方我也留意到了 我的APP工程的 flash的起始地址改为:0x8003000, IRAM1的起始地址也是改为:0x200000C0。(API工程是flash的起始地址改为:0x8000000, IRAM1的起始地址也是改为:0x20000000) 还是不行。.请问是否方便把你做成功的工程发过来一起探讨,API工程和APP工程,谢谢
!谢谢!
chaplin1999-262 回答时间:2016-11-24 09:16:06
QQ截图20161124091507.jpg 设置下就好了,我f0 产品一直这么用的

评分

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

查看全部评分

luscu 回答时间:2016-11-24 09:52:25
任风吹吹 发表于 2016-11-23 16:18
RCC_APB2PeriphResetCmd(RCC_APB2Periph_SYSCFG, ENABLE);
换成:
__HAL_RCC_SYSCFG_CLK_ENABLE();

你说的:从IAP跳转到APP后第一件事情就是需要立即重置VectorTable   这个是对的!试验成功。
但是这个文章并不是立即重置VectorTable ,我按照博客的顺序试验不成功! 按照分析是你说的对!
我改为:
int main(void)
{

  /* USER CODE BEGIN 1 */
        uint32_t i = 0;
        for(i = 0; i < 48; i++)
  {
    VectorTable = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }
        __HAL_RCC_SYSCFG_CLK_ENABLE();
  /* Remap SRAM at 0x00000000 */
  __HAL_SYSCFG_REMAPMEMORY_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();
luscu 回答时间:2016-11-24 10:00:14
问题已经解决。总结如下:
1、API工程只需修改目标器件即可。其他基本不需要修改。
2、APP工程的 flash的起始地址改为:0x8003000, IRAM1的起始地址也是改为:0x200000C0。
注意:从IAP跳转到APP后第一件事情就是需要立即重置VectorTable,具体参考如下:
int main(void)
{

  /* USER CODE BEGIN 1 */
        uint32_t i = 0;
        for(i = 0; i < 48; i++)
  {
    VectorTable[i] = *(__IO uint32_t*)(APPLICATION_ADDRESS + (i<<2));
  }
        __HAL_RCC_SYSCFG_CLK_ENABLE();
  /* Remap SRAM at 0x00000000 */
  __HAL_SYSCFG_REMAPMEMORY_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();
谢谢大家!
任风吹吹 回答时间:2016-11-24 10:15:16
luscu 发表于 2016-11-24 10:00
问题已经解决。总结如下:
1、API工程只需修改目标器件即可。其他基本不需要修改。
2、APP工程的 flash的 ...

楼主,STM32程序的启动并不是一开始就进入main函数的,而是SystemInit,你看下S文件:
; Reset handler routine
Reset_Handler    PROC
                 EXPORT  Reset_Handler                 [WEAK]
        IMPORT  __main
        IMPORT  SystemInit  
                 LDR     R0, =SystemInit
                 BLX     R0
                 LDR     R0, =__main
                 BX      R0
                 ENDP
luscu 回答时间:2016-11-24 11:46:06
任风吹吹 发表于 2016-11-24 10:15
楼主,STM32程序的启动并不是一开始就进入main函数的,而是SystemInit,你看下S文件:
; Reset handler rou ...

SystemInit()函数我是使用CUBEMX生产的,没有修改,那按这个分析,开机启动先进入SystemInit(),在入main前这个时候如果出现中断,产生的系统中断还是使用IAP中的向量 就会异常。现在我实际调试 进入SystemInit()一直到进入main没遇到中断,所以就没问题!我说的对吧?
谢谢你细心分析!
xhzheng 回答时间:2016-11-24 13:15:56
学习了;
12

所属标签

相似问题

官网相关资源

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