|
如果有想要的朋友可以私信我 這個只能上傳這么大的東西
/*
*********************************************************************************************************
*
* 【安富萊】STM32-V4 開發(fā)板-開發(fā)環(huán)境說明
*
* 最后更新日期:2015-08-30
*
* 推薦將編輯器的縮進參數(shù)和TAB設(shè)置為4 來閱讀本文件
*
*********************************************************************************************************
*/
【1】CPU內(nèi)部資源
CPU型號 : STM32F103ZET6 / LQFP-144 / ARM 32-bit Cortex-M3
主頻 : 72MHz
內(nèi)部Flash容量 : 512KB
內(nèi)部SRAM容量 : 64KB
定時器 : 11個
UART : 5個
SPI : 3個 (2個可復(fù)用為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內(nèi)部 FLASH 【0x0800 0000 - 0x080F FFFF】,容量512K(0x80000)字節(jié)
CPU內(nèi)部 SRAM1 【0x2000 0000 - 0x2000 FFFF】,容量64K(0x10000)字節(jié)
外部 NOR Flash 【0x6400 0000 - 0x64FF FFFF】,容量16M(0x1000000)字節(jié)
外部 SRAM 【0x6800 0000 - 0x681F FFFF】,容量1M(0x100000)字節(jié)
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)字節(jié)
【3】I2C總線外設(shè)地址分配
序號 器件 地址
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】開發(fā)工具
【仿真器】 --- 非標(biāo)配,單獨選購
雖然STM32支持串口ISP下載程序,但是不支持在線調(diào)試。使用串口下載,開發(fā)效率極低,因此強烈推薦購買一個仿真器,提高開發(fā)效率。
- ST-LINK V2 仿真器: ST公司開發(fā)的仿真器,可以下載程序和調(diào)試跟蹤程序。支持STM8和STM32。一般用來開發(fā)STM8S。如果開發(fā)
STM32的話, 還是建議購買J-Link仿真器
- J-LINK V8,V9仿真器 : Segger公司開發(fā)的仿真器,可以下載程序和調(diào)試跟蹤程序。支持所有ARM系列。
【USB轉(zhuǎn)RS232串口線】--- 開發(fā)板配送
- 現(xiàn)在大多數(shù)PC機都沒有硬件串口了。但是對于單片機串口還是很有用的。安富萊的很多例程都需要通過串口打印調(diào)試信息。
- 開發(fā)板配送了一根HL-340型號的USB轉(zhuǎn)RS232線。支持WIN XP, WIN7, WIN8 系統(tǒng)。
【開發(fā)軟件】
- 編譯環(huán)境 IAR EWARMv6 和 KEIL 的 MDK uV4。請按需選擇,如都不熟悉,推薦使用KEIL MDK (uV4)。
- SecureCRT : 一個優(yōu)秀的功能強大的超級終端工具,主要用來顯示開發(fā)板從串口打印出來的信息
- UltraEdit : 一個優(yōu)秀的源代碼編輯工具
- SourceInsight : 一個優(yōu)秀的源代碼瀏覽工具
【5】編譯和調(diào)試方法
說明:安富萊的例程均提供 KEIL 和 IAR兩種工程,每個工程中設(shè)置了2個Target,一個是在Flash巡行的,一個是在CpuRAM運行的。請按需要選擇。
如果需要不修改Flash中的程序調(diào)試新的例程,可以選擇在CPU RAM運行。
>>>> 有些程序(比如出廠測試程序)體積很大,無法在有限的RAM空間執(zhí)行。
【Keil MDK】V4.54
- 執(zhí)行菜單 Project -> Open project 打開 \Project\MDK-ARM(uV4)\project.uvproj (這是工程文件)
- 執(zhí)行菜單 Project -> Rebuild all target files 重新編譯所有的文件:
- 執(zhí)行菜單 Debug->Start/Stop Debug Session (Ctrl+F5) 啟動調(diào)試:
【備注1】選擇在CPU RAM運行時,不能使用Load按鈕下載程序,請直接Start Debug即可。因為Load按鈕是專門用于下載到Flash的。
【備注2】對于Keil MDK,為了避免中文字符串告警,需要在C/C++編譯選項中增加 --diag_suppress=870 參數(shù)。
【備注3】為了提高編譯效率。我們?nèi)笔£P(guān)閉了工程設(shè)置 Output - Browse Information。因此無法使用鼠標(biāo)右鍵查找函數(shù)定義。
如果你需要這個功能,請打開這個選項開關(guān)。
【IAR EWARM】V6.30
- 執(zhí)行菜單 File -> Open Workspace (打開工程文件: Project\EWARMv6\Project.www)
- 執(zhí)行菜單 Project -> Rebuild All (重新編譯整個工程)
- 執(zhí)行菜單 Project -> Download and Debug(Ctrl+D) (裝載程序并啟動調(diào)試)
【6】例程文件夾說明
├─Libraries : 存放第3方提供的庫或其源代碼,這些代碼一般是成熟的并經(jīng)過驗證的代碼。
│ ├─CMSIS : CMSIS是ARM公司與多家不同的芯片和軟件供應(yīng)商一起緊密合作定義的,提供了內(nèi)核與外設(shè)、實時操作系統(tǒng)和中間設(shè)備之間的通用接口。
│ ├─STM32F10x_StdPeriph_Driver : STM32F10X系列MCU的標(biāo)準(zhǔn)固件庫源代碼
│ └─STM32_USB-FS-Device_Driver : USB Device Library
│
├─User : 這里存放用戶自己編寫的源代碼
│ ├─bsp : 板級支持包(Board Surport Packet),也就是硬件底層驅(qū)動程序. 該層介于固件庫和應(yīng)用程序之間。
│ └─fonts : 存放點陣字庫常量數(shù)組
│
└─project : 這里存放各類開發(fā)工具的工程文件,編譯過程中的臨時文件和最終HEX文件都放在此文件夾
├─MDK-ARM(uV4) : KEIL公司MDK uVision 4工程文件夾
└─EWARMv6 : IAR公司的EWARM 工程文件夾
【7】工程中源代碼分組說明
└─Flash : Target名稱,F(xiàn)lash 或 CpuRAM
├─USER : 存放 main.c 以及用戶用用程序
├─BSP : 板級支持包(Board Support Packet),存放硬件底層驅(qū)動文件
├─CMSIS : 僅存放CMSISI接口文件 system_stm32f4xx.c
├─StdPeriph_Drivers: 存放STM328S系列MCU的固件庫源代碼
├─MDK-ARM : 啟動文件(匯編源程序),對于IAR是 EWARMv6
└─Doc : 存放一些文檔,僅限txt文件
【8】公共源代碼文件說明
- main.c : 用戶主程序,存放main()函數(shù)的文件
- stm32f1xx_it.c : 集中存放中斷服務(wù)程序 【除了幾個異常中斷外,我們建議其他的ISR放到各自的模塊中】
- stm32f10x_assert.c : 存放斷言函數(shù) (一般無需更改)
- bsp.c : 底層硬件驅(qū)動程序的主程序(包含硬件初始化入口函數(shù))
- 清除目標(biāo)文件(用于打包備份).bat : 執(zhí)行這個程序會刪除OBJ,LIST文件,方便對源代碼進行壓縮打包。
【9】C編譯器中的預(yù)定義宏 (在工程設(shè)置中更改)
USE_STDPERIPH_DRIVER - 增加這個符號表示使用ST公司的標(biāo)準(zhǔn)外設(shè)庫
VECT_TAB_SRAM - 增加這個符號表示中斷向量表定位在CPU內(nèi)部RAM (針對在CPU內(nèi)部RAM運行的工程才需要添加)
【10】調(diào)整堆和棧的容量
對于KEIL MDK, 設(shè)置堆和棧的大小是通過修改啟動文件start_stm32f10x_hd.s 文件實現(xiàn)的,比如:
Stack_Size EQU 0x00008000
Heap_Size EQU 0x00000400
對于IAR EWARM, 直接在工程設(shè)置中進行修改即可
- 菜單 project -> options -> 選擇Linker -> Config頁 -> 點Edit按鈕 -> 切換到CSTACK/HEAP
比如:
CSTACK = 0x8000
HEAP = 0x400
【11】輸出目標(biāo)文件
在 project 下面,有編譯好的 hex 文件,用戶可以用仿真器直接下載 output(flash).hex 到CPU內(nèi)部flash
\Project\output(mdk).hex - 采用KEIL MDK編譯好的文件,定位在CPU 內(nèi)部Flash
\Project\output(iar).hex - 采用IAR編譯好的文件,定位在CPU 內(nèi)部Flash
\Project\MDK-ARM(uV4)\Flash\List\output.map - 這是編譯鏈接文件,文本格式,可以查看每個函數(shù)、變量的地址和空間分配情況。
【附錄1】 STM32-V4開發(fā)板 GPIO分配表
按GPIO次序排列, 一共140個GPIO。GPIOA – GPIOH 每組16根,GPIOI 只有12根。
PA0/WKUP WKUP按鈕 -- K1按鍵
PA1/DM9000AE_INT 以太網(wǎng)芯片DM9000AE中斷
PA2/USART2_TX 串口2發(fā)送
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發(fā)送(RS232)
PA10/USART1_RX 串口1接收(RS232)
PA11/USBDM 全速(12Mbps)USB接口數(shù)據(jù)線D-
PA12/USBDP 全速(12Mbps)USB接口數(shù)據(jù)線D+
PA13/JTMS-SWDIO SWD調(diào)試接口數(shù)據(jù)線
PA14/JTCK-SWCLK SWD調(diào)試接口時鐘線
PA15/ESP8266_GPIO2 串口WIFI模塊控制IO
PB0/IR_RX 紅外遙控接收管
PB1/LCD_PWM LCD背光控制(對于RA8875屏無用,背光由RA8875控制)
PB2-BOOT1/RS485_TXEN RS485發(fā)送使能
PB3/NRF24L01_CE NRF24L01使能
PB4/TRST/GPRS_TERM_ON 串口WIFI電源管理/GPRS模塊開機信號
PB5/TP_BUSY/VS1053_DREQ 觸摸屏BUSY/VS1053B的是否接收數(shù)據(jù)請求
PB6/I2C1_SCL I2C1串行時鐘控制
PB7/I2C1_SDA I2C1串行數(shù)據(jù)控制
PB8/CANRX CAN接收
PB9/CANTX CAN發(fā)送
PB10/USART3_TX 串口3發(fā)送,接RS485收發(fā)芯片
PB11/USART3_RX 串口3接收,接RS485收發(fā)芯片
PB12/I2S2_WS I2S數(shù)字音頻接口聲道選擇信號
PB13/I2S2_CK I2S數(shù)字音頻接口時鐘信號
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外部硬件復(fù)位
PC3/ ADC123_IN13/NRF24L01_CSN ADC輸入/NRF24L01片選信號選擇 )
PC4/ ADC12_IN14 可調(diào)電阻ADC測試
PC5/ TP_INT 觸摸筆中斷(RA8875中斷)
PC6/I2S2_MCK I2S數(shù)字音頻接口時鐘源
PC7/ SD_INSERT SD卡插入檢測
PC8/SDIO_D0 SDIO數(shù)據(jù)線D0
PC9/SDIO_D1 SDIO數(shù)據(jù)線D1
PC10/SDIO_D2 SDIO數(shù)據(jù)線D2
PC11/SDIO_D3 SDIO數(shù)據(jù)線D3
PC12/SDIO_CK SDIO時鐘
PC13/TAMPER K1按鍵/侵入測試/PS/2時鐘控制
PC14-OSC32_IN 32768Hz時鐘輸入
PC15-OSC32_OUT 32768Hz時鐘輸出
PD0/ FSMC_D2 FSMC數(shù)據(jù)總線D2
PD1/FSMC_D3 FSMC數(shù)據(jù)總線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數(shù)據(jù)總線D13
PD9/FSMC_D14 FSMC數(shù)據(jù)總線D14
PD10/FSMC_D15 FSMC數(shù)據(jù)總線D15
PD11/FSMC_A16 FSMC地址總線A16
PD12/FSMC_A17 FSMC地址總線A17
PD13/FSMC_A18 FSMC地址總線A18
PD14/FSMC_D0 FSMC數(shù)據(jù)總線D0
PD15/FSMC_D1 FSMC數(shù)據(jù)總線D1
PE0/FSMC_NBL0 FSMC字節(jié)選擇信號,用于SRAM
PE1/FSMC_NBL1 FSMC字節(jié)選擇信號,用于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數(shù)據(jù)總線D4
PE8/FSMC_D5 FSMC數(shù)據(jù)總線D5
PE9/FSMC_D6 FSMC數(shù)據(jù)總線D6
PE10/FSMC_D7 FSMC數(shù)據(jù)總線D7
PE11/FSMC_D8 FSMC數(shù)據(jù)總線D8
PE12/FSMC_D9 FSMC數(shù)據(jù)總線D9
PE13/FSMC_D10 FSMC數(shù)據(jù)總線D10
PE14/FSMC_D11 FSMC數(shù)據(jù)總線D11
PE15/FSMC_D12 FSMC數(shù)據(jù)總線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工作選擇狀態(tài)/LED2復(fù)用
PF8/VS1053B_XDCS/LED3 VS1053B數(shù)據(jù)片選/LED3復(fù)用
PF9/VS1053B_XCS/LED4 VS1053B片選輸入信號/LED4復(fù)用
PF10/CH376T_SCS CH376T SPI片選
PF11/SF_CS/LED1 控制串行Flash片選/LED1復(fù)用
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數(shù)據(jù)線
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 開發(fā)板-例程功能說明
*
* 例程名稱 : V4-003_串口和PC機通信(串口中斷、FIFO機制)
*
* 推薦將編輯器的縮進參數(shù)和TAB設(shè)置為4 來閱讀本文件
*
*********************************************************************************************************
*/
【1】例程簡介
本例子實現(xiàn)了 printf 函數(shù)打印數(shù)據(jù)到串口1(STM32的USART1)。串口1是開發(fā)板的RS232接口。請使用USB轉(zhuǎn)RS232線
連接到PC機的USB接口,然后在PC機上運行一個串口工具軟件即可觀察到程序輸出的信息。
我們推薦使用 SecureCRT 軟件(內(nèi)含串口超級終端功能)。
使用printf打印到串口,只需要在工程添加兩個函數(shù)即可。
int fputc(int ch, FILE *f) ----- 函數(shù)內(nèi)實現(xiàn)將字符輸出到串口1
int fgetc(FILE *f) ----- 函數(shù)內(nèi)部實現(xiàn)從串口1讀入1個字符
注意只需要在工程中加入這兩個函數(shù)即可,不需要顯性調(diào)用他們,因為C庫會調(diào)用他們的。
采用printf作為一種調(diào)試手段和例程功能演示是非常方便的,因為printf支持強大的數(shù)制轉(zhuǎn)化功能,可以將整數(shù)轉(zhuǎn)換
為多種格式字符串。使用PC機超級終端軟件可以和STM32進行雙向交互。
后面很多例程將使用串口界面來輸出程序運行結(jié)果。這樣做的好處是:無需增加復(fù)雜的顯示程序和漢字庫。通過計算
機的鍵盤傳遞用戶操作指令給STM32。 整個例程只占用一個串口資源完成用戶和STM32之間的信息交互。
printf 是標(biāo)準(zhǔn)c函數(shù),任何c編譯器都支持,只不過支持的程度不同。本例程也使用了 sprintf函數(shù)將格式化后的字符串
放到一個內(nèi)存緩沖區(qū),這個函數(shù)的用法和printf類似。只不過printf是將字符串直接打印輸出到串口。
主程序?qū)崿F(xiàn)功能:
(1) PC機鍵盤輸入1、2、3、4,可以分別控制LED1-LED4。按一下點亮,再按一下熄滅。
(2) PC機串口軟件上會顯示一個計數(shù)值,通過開發(fā)板搖桿的上下左右鍵可以控制在計數(shù)值變化。
源代碼說明:
(1)bsp_uart_fifo.c 是串口驅(qū)動程序的核心文件。該函數(shù)中包含了每個硬件串口的中斷服務(wù)程序。在中斷服務(wù)程序中保存
串口數(shù)據(jù)到全局的緩沖區(qū)。主程序可以通過comSendBuf()函數(shù)發(fā)送數(shù)據(jù). 通過 comGetChar()函數(shù)讀取接收到的數(shù)據(jù)。
(2)串口驅(qū)動支持最多5個串口同時使用,而不會有任何沖突。
(3)串口驅(qū)動支持RS485,在發(fā)送前使能發(fā)送引腳,在發(fā)送完畢后自動拉低發(fā)送使能引腳。
【2】執(zhí)行結(jié)果
使用USB轉(zhuǎn)RS232線,連接開發(fā)板的RS232接口到計算機的USB接口。運行 SecureCRT 軟件。
操作開發(fā)板上的搖桿,可以在PC機串口軟件上觀察到變化的數(shù)字。
在計算機鍵盤上輸入數(shù)字鍵1、2、3、4可以分別控制開發(fā)板上的4個LED指示燈。
下面是串口界面執(zhí)行結(jié)果:
*************************************************************
* 例程名稱 : V4-003_串口和PC機通信(串口中斷、FIFO機制)
* 例程版本 : 1.0
* 發(fā)布日期 : 2015-08-30
* 固件庫版本 : 3.6.1
* CMSIS版本 : 3.01
*
* QQ : 1295744630
* Email : armfly@qq.com
*************************************************************
操作提示:
1. 搖桿控制count計數(shù)值
上鍵 = +1
下鍵 = -1
左鍵 = -10
右鍵 = +10
2. PC上輸入數(shù)字1-4控制開發(fā)板上的LED指示燈
count = -89
【3】修改記錄
2015-08-30 V1.0 首版
|
|