这篇博客主要是分析stm32duino的底层文件结构,来分析stm32duino 的实现原理和它的基本框架。
在后面然后介绍把环境移植到keil上,在keil编译和使用arduino的库
首先下载stm32duino的源码:https://github.com/rogerclarkmelbourne/Arduino_STM32/archive/master.zip
使用的工具是Source Insight ,新建工程,添加源码路径之后可以进行分析。
打开工程源码的文件夹后,有四个文件夹,我们主要分析STMF32F1这个文件夹
在drive文件夹下主要为stm32USB设备的驱动,具体内容没有进行详细了解。
tools文件夹下内容为不同系统环境下的下载工具等。
STM32F1文件夹下是stm32duino关于stm32f1系列的工程源码,下面主要分析这个文件夹的内容。
STM32F4文件夹下是stm32duino关于stm32f4系列的工程源码,其结构与STM32F1的相似。
打开stm32F1文件夹,可以看到四个文件夹和两个txt,在Arduino IDE 1.5第三方硬件规范中有对两个文件的说明:
架构配置
必须通过一组配置文件配置每个体系结构:
- platform.txt包含所用CPU架构的定义(编译器,构建过程参数,用于上载的工具等)
- boards.txt包含电路板的定义(电路板名称,构建和上传草图的参数等
Core文件夹为用户可直接调用的接口函数及其实现源码。
library文件夹为提供的基础库,在里面有一些外接硬件的驱动和示例代码。
system文件夹为编译器所需要的的一些文件,其中包括两个文件夹:ibmaple和support.
libmaple文件夹为stm32底层外设的相关头文件。
support文件夹为编译器使用的相关文件:链接脚本(*.ld),make文件,和调试文件(*.gdb)
variants:文件夹为不同芯片对应的启动文件芯片初始化配置。
在generic文件夹中又三个文件夹
board文件夹:其中只有一个文件,board.h 内容是偏上外设资源数目和对应的引脚
ld文件夹下为编译器链接脚本,具体内容没有研究
wirish文件夹下为芯片的启动文件和芯片初始化配置:
boards.cpp为芯片初始化配置,其内容包括时钟初始化,flash初始化,nvic初始化等。
boards_setup.cpp是与芯片相关的初始化的一些文件。
start.s,start_c.c syscalls.c这几个文件具体作用不太清楚,在后面向keil移植的过程中会报错。
接下来是几个在generic中的几个文件:board.cpp、pins_arduino.h、variant.h
board.cpp主要定义了extern const stm32_pin_info PIN_MAP[BOARD_NR_GPIO_PINS] ;这个结构体数组,用于芯片的引脚对应的资源映射
pins_arduino.h为空文件,只有一个头文件包含
variant.h为一些宏定义函数,用于对GPIO的IO组和IO引脚的获取。