|
如果有想要的朋友可以私信我 这个只能上传这么大的东西
/*
*********************************************************************************************************
*
* 【安富莱】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 摇杆上键
/*
*********************************************************************************************************
*
* 【安富莱】STM32-V4 开发板-例程功能说明
*
* 例程名称 : V4-003_串口和PC机通信(串口中断、FIFO机制)
*
* 推荐将编辑器的缩进参数和TAB设置为4 来阅读本文件
*
*********************************************************************************************************
*/
【1】例程简介
本例子实现了 printf 函数打印数据到串口1(STM32的USART1)。串口1是开发板的RS232接口。请使用USB转RS232线
连接到PC机的USB接口,然后在PC机上运行一个串口工具软件即可观察到程序输出的信息。
我们推荐使用 SecureCRT 软件(内含串口超级终端功能)。
使用printf打印到串口,只需要在工程添加两个函数即可。
int fputc(int ch, FILE *f) ----- 函数内实现将字符输出到串口1
int fgetc(FILE *f) ----- 函数内部实现从串口1读入1个字符
注意只需要在工程中加入这两个函数即可,不需要显性调用他们,因为C库会调用他们的。
采用printf作为一种调试手段和例程功能演示是非常方便的,因为printf支持强大的数制转化功能,可以将整数转换
为多种格式字符串。使用PC机超级终端软件可以和STM32进行双向交互。
后面很多例程将使用串口界面来输出程序运行结果。这样做的好处是:无需增加复杂的显示程序和汉字库。通过计算
机的键盘传递用户操作指令给STM32。 整个例程只占用一个串口资源完成用户和STM32之间的信息交互。
printf 是标准c函数,任何c编译器都支持,只不过支持的程度不同。本例程也使用了 sprintf函数将格式化后的字符串
放到一个内存缓冲区,这个函数的用法和printf类似。只不过printf是将字符串直接打印输出到串口。
主程序实现功能:
(1) PC机键盘输入1、2、3、4,可以分别控制LED1-LED4。按一下点亮,再按一下熄灭。
(2) PC机串口软件上会显示一个计数值,通过开发板摇杆的上下左右键可以控制在计数值变化。
源代码说明:
(1)bsp_uart_fifo.c 是串口驱动程序的核心文件。该函数中包含了每个硬件串口的中断服务程序。在中断服务程序中保存
串口数据到全局的缓冲区。主程序可以通过comSendBuf()函数发送数据. 通过 comGetChar()函数读取接收到的数据。
(2)串口驱动支持最多5个串口同时使用,而不会有任何冲突。
(3)串口驱动支持RS485,在发送前使能发送引脚,在发送完毕后自动拉低发送使能引脚。
【2】执行结果
使用USB转RS232线,连接开发板的RS232接口到计算机的USB接口。运行 SecureCRT 软件。
操作开发板上的摇杆,可以在PC机串口软件上观察到变化的数字。
在计算机键盘上输入数字键1、2、3、4可以分别控制开发板上的4个LED指示灯。
下面是串口界面执行结果:
*************************************************************
* 例程名称 : V4-003_串口和PC机通信(串口中断、FIFO机制)
* 例程版本 : 1.0
* 发布日期 : 2015-08-30
* 固件库版本 : 3.6.1
* CMSIS版本 : 3.01
*
* QQ : 1295744630
* Email : armfly@qq.com
*************************************************************
操作提示:
1. 摇杆控制count计数值
上键 = +1
下键 = -1
左键 = -10
右键 = +10
2. PC上输入数字1-4控制开发板上的LED指示灯
count = -89
【3】修改记录
2015-08-30 V1.0 首版
|
|