This commit is contained in:
刘正航
2026-04-16 16:55:01 +08:00
commit 609eb878d1
624 changed files with 214375 additions and 0 deletions

View File

@@ -0,0 +1,257 @@
/*
*********************************************************************************************************
*
* 【安富莱】STM32-V4 开发板-开发环境说明
*
* 最后更新日期2015-08-30
*
* 推荐将编辑器的缩进参数和TAB设置为4 来阅读本文件
*
*********************************************************************************************************
*/
【1】CPU内部资源
CPU型号 : STM32F103ZET6 / LQFP-144 / ARM 32-bit Cortex-M3
主频 : 72MHz
内部Flash容量 : 512KB
内部SRAM容量 : 64KB
定时器 : 11个
UART : 5个
SPI : 3个 (2个可复用为I2S)
I2C : 2个
ADC : 3个独立的12位ADC
DAC : 2路独立12位DAC
CAN : 1个 CAN 2.0B
SDIO : 1个
USB : USB2.0全速(从)无需外部PHY。
【2】FSMC存储器地址分配
CPU内部 FLASH 【0x0800 0000 - 0x080F FFFF】,容量512K(0x80000)字节
CPU内部 SRAM1 【0x2000 0000 - 0x2000 FFFF】,容量64K(0x10000)字节
外部 NOR Flash 【0x6400 0000 - 0x64FF FFFF】,容量16M(0x1000000)字节
外部 SRAM 【0x6800 0000 - 0x681F FFFF】,容量1M(0x100000)字节
DM9000A芯片地址【0x6C10 0000, 0x6C10 0008】, 仅占用2个端口地址
TFT LCD地址 【0x6C00 0000, 0x6C00 0002】, 仅占用2个端口地址
OLED地址 【0x6C20 0000, 0x6C20 0002】, 仅占用2个端口地址
外部 NAND Flash【0x7000 0000】, 容量128M(0xC800000)字节
【3】I2C总线外设地址分配
序号 器件 地址
1 串行EEPROM AT24C128 0xA0
2 音频CODEC芯片WM8978 0x34
3 FM收音机Si4704 0x22
4 陀螺仪 MPU-6050 0xD0
5 光照度传感器 BH1750FVI 0x46
6 大气压 BMP180 0xEE
7 磁力计HMC5883L 0x3C 【外置的模块,选配】
【4】开发工具
【仿真器】 --- 非标配,单独选购
虽然STM32支持串口ISP下载程序但是不支持在线调试。使用串口下载开发效率极低因此强烈推荐购买一个仿真器提高开发效率。
- ST-LINK V2 仿真器: ST公司开发的仿真器可以下载程序和调试跟踪程序。支持STM8和STM32。一般用来开发STM8S。如果开发
STM32的话 还是建议购买J-Link仿真器
- J-LINK V8,V9仿真器 : Segger公司开发的仿真器可以下载程序和调试跟踪程序。支持所有ARM系列。
【USB转RS232串口线】--- 开发板配送
- 现在大多数PC机都没有硬件串口了。但是对于单片机串口还是很有用的。安富莱的很多例程都需要通过串口打印调试信息。
- 开发板配送了一根HL-340型号的USB转RS232线。支持WIN XP, WIN7 WIN8 系统。
【开发软件】
- 编译环境 IAR EWARMv6 和 KEIL 的 MDK uV4。请按需选择如都不熟悉推荐使用KEIL MDK (uV4)。
- SecureCRT : 一个优秀的功能强大的超级终端工具,主要用来显示开发板从串口打印出来的信息
- UltraEdit : 一个优秀的源代码编辑工具
- SourceInsight : 一个优秀的源代码浏览工具
【5】编译和调试方法
说明:安富莱的例程均提供 KEIL 和 IAR两种工程每个工程中设置了2个Target一个是在Flash巡行的一个是在CpuRAM运行的。请按需要选择。
如果需要不修改Flash中的程序调试新的例程可以选择在CPU RAM运行。
>>>> 有些程序比如出厂测试程序体积很大无法在有限的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 参数。
【备注3】为了提高编译效率。我们缺省关闭了工程设置 Output - Browse Information。因此无法使用鼠标右键查找函数定义。
如果你需要这个功能,请打开这个选项开关。
【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公司与多家不同的芯片和软件供应商一起紧密合作定义的提供了内核与外设、实时操作系统和中间设备之间的通用接口。
│ ├─STM32F10x_StdPeriph_Driver : STM32F10X系列MCU的标准固件库源代码
│ └─STM32_USB-FS-Device_Driver : USB Device Library
├─User : 这里存放用户自己编写的源代码
│ ├─bsp : 板级支持包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()函数的文件
- stm32f1xx_it.c : 集中存放中断服务程序 【除了几个异常中断外我们建议其他的ISR放到各自的模块中】
- stm32f10x_assert.c : 存放断言函数 (一般无需更改)
- bsp.c : 底层硬件驱动程序的主程序(包含硬件初始化入口函数)
- 清除目标文件(用于打包备份).bat : 执行这个程序会删除OBJ,LIST文件方便对源代码进行压缩打包。
【9】C编译器中的预定义宏 (在工程设置中更改)
USE_STDPERIPH_DRIVER - 增加这个符号表示使用ST公司的标准外设库
VECT_TAB_SRAM - 增加这个符号表示中断向量表定位在CPU内部RAM 针对在CPU内部RAM运行的工程才需要添加
【10】调整堆和栈的容量
对于KEIL MDK, 设置堆和栈的大小是通过修改启动文件start_stm32f10x_hd.s 文件实现的,比如:
Stack_Size EQU 0x00008000
Heap_Size EQU 0x00000400
对于IAR EWARM, 直接在工程设置中进行修改即可
- 菜单 project -> options -> 选择Linker -> Config页 -> 点Edit按钮 -> 切换到CSTACK/HEAP
比如:
CSTACK = 0x8000
HEAP = 0x400
【11】输出目标文件
在 project 下面,有编译好的 hex 文件,用户可以用仿真器直接下载 output(flash).hex 到CPU内部flash
\Project\output(mdk).hex - 采用KEIL MDK编译好的文件定位在CPU 内部Flash
\Project\output(iar).hex - 采用IAR编译好的文件定位在CPU 内部Flash
\Project\MDK-ARM(uV4)\Flash\List\output.map - 这是编译链接文件,文本格式,可以查看每个函数、变量的地址和空间分配情况。
【附录1】 STM32-V4开发板 GPIO分配表
按GPIO次序排列, 一共140个GPIO。GPIOA GPIOH 每组16根GPIOI 只有12根。
PA0/WKUP WKUP按钮 -- K1按键
PA1/DM9000AE_INT 以太网芯片DM9000AE中断
PA2/USART2_TX 串口2发送
PA3/USART2_RX 串口2接收可外接GPRS模块
PA4/DAC_OU DAC1输出
PA5/SPI1_SCK SPI总线时钟/DAC2输出
PA6/SPI1_MISO SPI总线MISO
PA7/SPI1_MOSI SPI总线MOSI
PA8/IR_TX 蜂鸣器
PA9/USART1_TX 串口1发送RS232
PA10/USART1_RX 串口1接收RS232
PA11/USBDM 全速(12Mbps)USB接口数据线D-
PA12/USBDP 全速(12Mbps)USB接口数据线D+
PA13/JTMS-SWDIO SWD调试接口数据线
PA14/JTCK-SWCLK SWD调试接口时钟线
PA15/ESP8266_GPIO2 串口WIFI模块控制IO
PB0/IR_RX 红外遥控接收管
PB1/LCD_PWM LCD背光控制对于RA8875屏无用背光由RA8875控制
PB2-BOOT1/RS485_TXEN RS485发送使能
PB3/NRF24L01_CE NRF24L01使能
PB4/TRST/GPRS_TERM_ON 串口WIFI电源管理/GPRS模块开机信号
PB5/TP_BUSY/VS1053_DREQ 触摸屏BUSY/VS1053B的是否接收数据请求
PB6/I2C1_SCL I2C1串行时钟控制
PB7/I2C1_SDA I2C1串行数据控制
PB8/CANRX CAN接收
PB9/CANTX CAN发送
PB10/USART3_TX 串口3发送接RS485收发芯片
PB11/USART3_RX 串口3接收接RS485收发芯片
PB12/I2S2_WS I2S数字音频接口声道选择信号
PB13/I2S2_CK I2S数字音频接口时钟信号
PB14/USB_PULLUPENBLE USB上拉使能
PB15/I2S2_SD WM8978录音
PC0/ADC123_IN10 ADC输入 - 接示波器通道1
PC1/ADC123_IN11 ADC输入 - 接示波器通道2
PC2/ ADC123_IN12/GPRS_RESET ADC输入/ESP8266外部硬件复位
PC3/ ADC123_IN13/NRF24L01_CSN ADC输入/NRF24L01片选信号选择
PC4/ ADC12_IN14 可调电阻ADC测试
PC5/ TP_INT 触摸笔中断RA8875中断
PC6/I2S2_MCK I2S数字音频接口时钟源
PC7/ SD_INSERT SD卡插入检测
PC8/SDIO_D0 SDIO数据线D0
PC9/SDIO_D1 SDIO数据线D1
PC10/SDIO_D2 SDIO数据线D2
PC11/SDIO_D3 SDIO数据线D3
PC12/SDIO_CK SDIO时钟
PC13/TAMPER K1按键/侵入测试/PS/2时钟控制
PC14-OSC32_IN 32768Hz时钟输入
PC15-OSC32_OUT 32768Hz时钟输出
PD0/ FSMC_D2 FSMC数据总线D2
PD1/FSMC_D3 FSMC数据总线D3
PD2/SDIO_CMD SDIO命令
PD3/JOY_D 摇杆下键
PD4/FSMC_NOE FSMC控制总线读信号N表示低有效OE = Output Enable
PD5/FSMC_NWE FSMC控制总线写信号N表示低有效WE = Write Enable
PD6/FSMC_NWAIT FSMC总线等待信号
PD7/FSMC_NCE2 FSMC片选NCE2
PD8/FSMC_D13 FSMC数据总线D13
PD9/FSMC_D14 FSMC数据总线D14
PD10/FSMC_D15 FSMC数据总线D15
PD11/FSMC_A16 FSMC地址总线A16
PD12/FSMC_A17 FSMC地址总线A17
PD13/FSMC_A18 FSMC地址总线A18
PD14/FSMC_D0 FSMC数据总线D0
PD15/FSMC_D1 FSMC数据总线D1
PE0/FSMC_NBL0 FSMC字节选择信号用于SRAM
PE1/FSMC_NBL1 FSMC字节选择信号用于SRAM
PE2/CH376T_INT CH376T芯片的中断信号
PE3/FSMC_A19 FSMC地址总线A19
PE4/FSMC_A20 FSMC地址总线A20
PE5/FSMC_A21 FSMC地址总线A21
PE6/FSMC_A22 FSMC地址总线A22
PE7/FSMC_D4 FSMC数据总线D4
PE8/FSMC_D5 FSMC数据总线D5
PE9/FSMC_D6 FSMC数据总线D6
PE10/FSMC_D7 FSMC数据总线D7
PE11/FSMC_D8 FSMC数据总线D8
PE12/FSMC_D9 FSMC数据总线D9
PE13/FSMC_D10 FSMC数据总线D10
PE14/FSMC_D11 FSMC数据总线D11
PE15/FSMC_D12 FSMC数据总线D12
PF0/FSMC_A0 FSMC地址总线A0
PF1/FSMC_A1 FSMC地址总线A1
PF2/FSMC_A2 FSMC地址总线A2
PF3/FSMC_A3 FSMC地址总线A3
PF4/FSMC_A4 FSMC地址总线A4
PF5/FSMC_A5 FSMC地址总线A5
PF6/MPU-6050_INT/NRF24L01_IRQ SPI插座 (NRF24L01 / MPU-6050的中断)
PF7/ESP8266_GPIO0/LED2 ESP8266工作选择状态/LED2复用
PF8/VS1053B_XDCS/LED3 VS1053B数据片选/LED3复用
PF9/VS1053B_XCS/LED4 VS1053B片选输入信号/LED4复用
PF10/CH376T_SCS CH376T SPI片选
PF11/SF_CS/LED1 控制串行Flash片选/LED1复用
PF12/FSMC_A6 FSMC地址总线A6
PF13/FSMC_A7 FSMC地址总线A7
PF14/FSMC_A8 FSMC地址总线A8
PF15/FSMC_A9 FSMC地址总线A
PG0/FSMC_A10 FSMC地址总线A10
PG1/FSMC_A11 FSMC地址总线A11
PG2/FSMC_A12 FSMC地址总线A12
PG3/FSMC_A13 FSMC地址总线A13
PG4/FSMC_A14 FSMC地址总线A14
PG5/FSMC_A15 FSMC地址总线A15
PG6/FSMC_INT2 NAND Flash忙信号
PG7/JOY_OK 摇杆OK键
PG8/PS/2_DATA/DS18B20_DQ PS/2接口/DS18B20数据线
PG9/FSMC_NE2 FSMC总线片选NE2
PG10/FSMC_NE3 FSMC总线片选NE3
PG11/TP_NCS 3.5寸屏触摸芯片的片选或RA8875屏SPI接口的片选
PG12/FSMC_NE4 FSMC总线片选NE4
PG13/JOY_R 摇杆右键
PG14/JOY_L 摇杆左键
PG15/JOY_U 摇杆上键