神舟IV學(xué)習(xí)筆記(一)設(shè)置IAR開發(fā)環(huán)境與流水燈
小弟剛剛拿到神舟的板子,那是相對的激動。好大的液晶屏幕,好多資料哦,好強大啊~~。
首先需要準備的是《STM32F10xxx參考數(shù)據(jù)》,我看的是2010年1月10日的版本,不知道今年有沒有更新中文用戶手冊。STM32F107xx微控制器是互聯(lián)性產(chǎn)品,有些部分不一樣。STM32的開發(fā)環(huán)境有三種,Keil MDK /IAR EWARM/RIDE三種開發(fā)環(huán)境,個人感覺IAR比較好點,主要是用破解版的比較穩(wěn)定。
第一步選擇器件,根據(jù)芯片的不同選擇不同,如圖1所示
第二步:設(shè)置路徑文件,其中$PROJ_DIR$表示的是當前路徑,$PROJ_DIR$..表示的當前路徑的上面一級。Defined symbols表示的是宏定義:USE_STDPERIPH_DRIVER使用庫函數(shù)
STM32F10X_CL互聯(lián)性器件
第三步是設(shè)置文件輸出的格式,常用的是HEX輸出,也能設(shè)置BIN格式的輸出
第四步是設(shè)置鏈接文件:也就是告訴編譯器,器件的RAM和ROM的起始范圍與大小。
下面我先做下第一個實驗—流水燈實驗。我喜歡把每個功能做成兩個文件,一個是C文件(源代碼),一個是H文件(頭文件)。下次需要這個功能的時候,只需要把這兩個文件拷貝到工程當中,簡單方便。下面是我寫的代碼:
LED.C
#include "led.h"
void LED_Configuration(void)
{
GPIO_InitTypeDefGPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); //打開時鐘
GPIO_InitStructure.GPIO_Pin =LED1 | LED2|LED3|LED4;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_Init(GPIOD, &GPIO_InitStructure);
}
LED.H
#ifndef __LED_H
#define __LED_H
#include "stm32f10x_conf.h"
#define LED1GPIO_Pin_2
#define LED2GPIO_Pin_3
#define LED3GPIO_Pin_4
#define LED4GPIO_Pin_7
#define LED1_ON()GPIOD->BRR = LED1
#define LED2_ON()GPIOD->BRR = LED2
#define LED3_ON()GPIOD->BRR = LED3
#define LED4_ON()GPIOD->BRR = LED4
#define LED1_OFF()GPIOD->BSRR = LED1
#define LED2_OFF()GPIOD->BSRR = LED2
#define LED3_OFF()GPIOD->BSRR = LED3
#define LED4_OFF()GPIOD->BSRR = LED4
void LED_Configuration(void);
#endif
MAIN.C
void delay(unsigned int num)
{
while(num--);
}
int main(void)
{
/* Setup STM32 system (clock, PLL and Flash configuration) */
SystemInit();
LED_Configuration();
/* Add your application code here
*/
/* Infinite loop */
while (1)
{
LED1_ON();
delay(1000000);
LED1_OFF();
LED2_ON();
delay(1000000);
LED2_OFF();
LED3_ON();
delay(1000000);
LED3_OFF();
LED4_ON();
delay(1000000);
LED4_OFF();
}
}
最后是添加文件,附近有我設(shè)置的IAR的模板,大家可以參考下。這樣的話就生成的一個模板工程。下次需要寫程序的時候,只需要復(fù)制這個模板,而沒有必要做上面重復(fù)的設(shè)置啦。關(guān)于啟動文件的選擇:V3.1.2版本的庫提供了四個啟動文件,分別對應(yīng)不同型號芯片。
startup_stm32f10x_ld.s對應(yīng)的是低密度芯片,ld是Low-density的縮寫,比如STM32F101xx and STM32F103xx系列中FLASH在16K到32K范圍內(nèi)。
startup_stm32f10x_md.s對應(yīng)的是中等密度芯片,ld是Medium-density的縮寫,比如STM32F101xx and STM32F103xx系列中FLASH在32K到128K范圍內(nèi)。
startup_stm32f10x_hd.s對應(yīng)的是高密度芯片,ld是High-density的縮寫,比如STM32F101xx and STM32F103xx系列中FLASH在256K到512K范圍內(nèi)。
startup_stm32f10x_cl.s對應(yīng)的是互聯(lián)型芯片,ld是Connectivity-line的縮寫,比如STM32F105xx and STM32F107xx系列的芯片。
神舟IV學(xué)習(xí)板采用的是STM32F107VCT6芯片,對應(yīng)的是互聯(lián)型,使用需要選擇的啟動文件是startup_stm32f10x_cl.s。