/*
*********************************************************************************************************
*
*	                          【安富莱】STM32-V5 开发板-开发环境说明
*
*	最后更新日期：2013-06-20
*
*	推荐将编辑器的缩进参数和TAB设置为4 来阅读本文件
*
*********************************************************************************************************
*/

【1】CPU内部资源
	CPU型号        : STM32F407IGT6 / LQFP-176 / ARM 32-bit Cortex-M4 (带FPU 硬件浮点单元)
	主频           : 168 MHz, 210 DMIPS/1.25 DMIPS/MHz
	内部Flash容量  : 1MB
	内部SRAM容量   : 192K + 4K SRAM
	GPIO 数量      : 140个具备外部中断能力，136个快速IO(60M), 138个5V兼容(意思是GPIO可输入5V电压)
	定时器         : 17个 - 其中12个16-bit和2个32-bit定时器可以到150 MHz
	UART           : 6个 4个USART1,2个UART【10.5 Mbit/s】
	SPI            : 3个 【37.5 Mbits/s】
	I2C            : 3个
	ADC            : 3个独立的12位ADC，最多24路复用输入
	DAC            : 2路独立12位DAC
	CAN            : 2个 CAN 2.0B
	SDIO           : 1个
	CAMERA         : 8 - 14bit 并行摄像头接口，最大速度 67.2M 字节/秒
	Ethernet       : 10/100 Ethernet MAC, 需要外部PHY芯片。
	USB            : USB2.0全速(主、从)无需外部PHY。USB2.0高速模式需要外部PHY芯片。

【2】FSMC存储器地址分配
   	CPU内部 FLASH  【0x0800 0000 - 0x080F FFFF】,容量1M(0x100000)字节
	CPU内部 SRAM1  【0x2000 0000 - 0x2001 FFFF】,容量128K(0x20000)字节
	CPU内部 SRAM2  【0x1000 0000 - 0x1000 FFFF】,容量64K(0x10000)字节

	外部 NOR Flash 【0x6400 0000 - 0x64FF FFFF】,容量16M(0x1000000)字节

	外部 SRAM      【0x6800 0000 - 0x681F FFFF】,容量2M(0x200000)字节
	DM9000A芯片地址【0x6840 0000, 0x6848 0000】, 仅占用2个端口地址

	TFT LCD地址    【0x6C00 0000, 0x6C08 0000】, 仅占用2个端口地址
	外扩AD7606地址 【0x6C40 0000】, 仅占用1个端口地址,只读
	OLED地址       【0x6C20 0000, 0x6C28 0000】, 仅占用2个端口地址

	外部 NAND Flash【0x7000 0000】, 容量128M(0xC800000)字节


【3】I2C总线外设地址分配
  序号	器件                      地址
	1	串行EEPROM  AT24C128 	  0xA0
	2	音频CODEC芯片WM8978	      0x34
	3	AM/FM收音机Si4730         0x22
	4	摄像头OV7670              0x42
	5	磁力计HMC5883L            0x3C
	6	陀螺仪 MPU-6050           0xD0
	7	光照 BH1750FVI            0x46
	8	大气压 BMP085             0xEE

【4】开发工具
    【仿真器】
	虽然STM32F4XX支持串口和USB口ISP下载程序，但是不支持在线调试，因此强烈推荐购买一个仿真器，提高程序开发效率。
	- ST-LINK V2 仿真器: ST公司开发的仿真器，可以下载程序和调试跟踪程序。支持STM8和STM32。
	- J-LINK V8 仿真器 : Segger公司开发的仿真器，可以下载程序和调试跟踪程序。支持所有ARM系列，包括STM8。

    【USB转串口线】
	- 现在大多数PC机都没有硬件串口了。但是对于单片机串口还是很有用的。安富莱的很多例程都需要通过串口打印调试信息。

    【开发软件】
	- 编译环境 IAR EWARMv6 和 KEIL 的 MDK uV4。请按需选择，如都不熟悉，推荐使用KEIL MDK (uV4)。
	- SecureCRT : 一个优秀的功能强大的超级终端工具，主要用来显示开发板从串口打印出来的信息
	- UltraEdit : 一个优秀的源代码编辑工具
	- SourceInsight : 一个优秀的源代码浏览工具

【5】编译和调试方法
  说明：安富莱的例程均提供 KEIL 和 IAR两种工程，每个工程中设置了2个Target，一个是在Flash巡行的，一个是在CpuRAM运行的。请按需要选择。
  如果需要不修改Flash中的程序调试新的例程，可以选择在CPU RAM运行。

	【Keil MDK】V4.54
		- 执行菜单 Project -> Open project                 打开 \Project\MDK-ARM(uV4)\project.uvproj （这是工程文件）
 		- 执行菜单 Project -> Rebuild all target files     重新编译所有的文件:
 		- 执行菜单 Debug->Start/Stop Debug Session (Ctrl+F5)  启动调试:

 		【备注1】选择在CPU RAM运行时，不能使用Load按钮下载程序，请直接Start Debug即可。因为Load按钮是专门用于下载到Flash的。
 		【备注2】对于Keil MDK，为了避免中文字符串告警，需要在C/C++编译选项中增加 --diag_suppress=870 参数。

	【IAR EWARM】V6.30
		- 执行菜单 File -> Open Workspace          (打开工程文件: Project\EWARMv6\Project.www)
 		- 执行菜单 Project -> Rebuild All          (重新编译整个工程)
 		- 执行菜单 Project -> Download and Debug(Ctrl+D)   (装载程序并启动调试)

【6】例程文件夹说明
├─Libraries :  存放第3方提供的库或其源代码，这些代码一般是成熟的并经过验证的代码。
│  ├─CMSIS :  CMSIS是ARM公司与多家不同的芯片和软件供应商一起紧密合作定义的，提供了内核与外设、实时操作系统和中间设备之间的通用接口。
│  ├─STM32F4xx_StdPeriph_Driver : STM32F4XX系列MCU的标准固件库源代码
│  ├─STM32_USB_Device_Library : STM32F105/7xx, STM32F2xx and STM32F4xx USB Device Library
│  └─STM32_USB_OTG_Driver :  STM32F105/7xx, STM32F2xx and STM32F4xx USB OTG Driver
│
├─User      :  这里存放用户自己编写的源代码
│  ├─bsp_stm32f4xx :  板级支持包（Board Surport Packet），也就是硬件底层驱动程序. 该层介于固件库和应用程序之间。
│  └─fonts  :  存放点阵字库常量数组
│
└─project   :  这里存放各类开发工具的工程文件，编译过程中的临时文件和最终HEX文件都放在此文件夹
    ├─MDK-ARM(uV4) : KEIL公司MDK uVision 4工程文件夹
    └─EWARMv6 : IAR公司的EWARM 工程文件夹

【7】工程中源代码分组说明
└─Flash               : Target名称，Flash 或 CpuRAM
   ├─USER             : 存放 main.c 以及用户用用程序
   ├─BSP              : 板级支持包（Board Support Packet）,存放硬件底层驱动文件
   ├─CMSIS            : 仅存放CMSISI接口文件 system_stm32f4xx.c
   ├─StdPeriph_Drivers: 存放STM328S系列MCU的固件库源代码
   ├─MDK-ARM          : 启动文件（汇编源程序）,对于IAR是 EWARMv6
   └─Doc              : 存放一些文档，仅限txt文件

【8】公共源代码文件说明
	- main.c          : 用户主程序，存放main()函数的文件
	- stm32f4xx_it.c  : 集中存放中断服务程序 【除了几个异常中断外，我们建议其他的ISR放到各自的模块中】
	- stm32f10x_assert.c : 存放断言函数   （一般无需更改）
	- bsp.c           : 底层硬件驱动程序的主程序（包含硬件初始化入口函数）

【9】C编译器中的预定义宏 （在工程设置中更改）
	USE_STDPERIPH_DRIVER  - 增加这个符号表示使用ST公司的标准外设库
	VECT_TAB_SRAM         - 增加这个符号表示中断向量表定位在CPU内部RAM （针对在CPU内部RAM运行的工程才需要添加）

【10】BSP源码中的硬件型号宏 （直接修改 bsp.h 文件进行更改）
	在 bsp_stm32f4xx 文件夹下，很多文件用到了开发板型号的宏：
	STM32_X4  - 表示安富莱STM32-X4核心板（功能简单的核心板，便于外接设备）
	STM32_V5  - 表示安富莱STM32-V5开发板（功能强大的开发板）

	因为两种硬件的GPIO定义不同，为了共用一套BSP源码，因此添加这2个宏进行区别。
	用户可以在 bsp.h 文件中define这2个宏来选择硬件类别。
	
【11】调整堆和栈的容量
	对于KEIL MDK, 设置堆和栈的大小是通过修改启动文件start_stm32f4xx.s 文件实现的，比如：
		Stack_Size      EQU     0x00004000
		Heap_Size       EQU     0x00000400

	对于IAR EWARM, 直接在工程设置中进行修改即可
		- 菜单 project -> options -> 选择Linker -> Config页 -> 点Edit按钮 -> 切换到CSTACK/HEAP
		比如：
			CSTACK = 0x800
			HEAP   = 0x400
		

【12】输出目标文件
	在 project 下面，有编译好的 hex 文件，用户可以用仿真器直接下载 output(flash).hex 到CPU内部flash	
	output(flash).hex - 采用KEIL MDK编译好的文件，定位在CPU 内部Flash	
	output(ram).hex   - 采用KEIL MDK编译好的文件，定位在CPU 内部RAM（该文件需要引导程序装载到
	                    CPU内部RAM运行，不能独立运行。

