用arduino对stm32编程(二)

       经过上一篇搭建好自己的硬件平台后就开始准备愉快的编程了,但是想用它开发产品还是得弄清楚它上电运行的所有流程。直接开始吧,在keil中用startup_stm32xx.s文件开始初始化,最后调用main函数。在arduino中能找到STM32\tools\CMSIS\5.5.1\Device\ARM\ARMCM3\Source\GCC\startup_ARMCM3.S和startup_ARMCM3.c两个文件,用哪个初始化还是没搞清楚,它们最后都会调用_start函数,在startup_ARMCM3.c中能够找到如下定义

extern void _start     (void) __attribute__((noreturn)); /* PreeMain (C library entry point) */

也就是直接调用premain函数。

在STM32\hardware\stm32\1.6.1\cores\arduino\main.cpp中有premain和main两个函数

__attribute__((constructor(101))) void premain()
{

  // Required by FreeRTOS, see http://www.freertos.org/RTOS-Cortex-M3-M4.html
#ifdef NVIC_PRIORITYGROUP_4
  HAL_NVIC_SetPriorityGrouping(NVIC_PRIORITYGROUP_4);
#endif
#if (__CORTEX_M == 0x07U)
  // Defined in CMSIS core_cm7.h
#ifndef I_CACHE_DISABLED
  SCB_EnableICache();
#endif
#ifndef D_CACHE_DISABLED
  SCB_EnableDCache();
#endif
#endif

  init();                                                   (调用hal库进行初始化外设、系统时钟、USBcdc)
}

int main(void)
{
  initVariant();                                          (空)

  setup();                                                    (应用程序setup调用接口)

  for (;;) {                                   
#if defined(CORE_CALLBACK)
    CoreCallback();
#endif
    loop();                                                      (应用程序loop调用接口)
    if (serialEventRun) {                                 (如果有串口事件,进行串口处理,可见默认的串口处理是个循环扫描处理方法)
      serialEventRun();
    }
  }

  return 0;
}
到此为止我们就可以放心的用hal库函数进行编程了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值