之前用過keil學(xué)習(xí)過8051單片機,用avrstudio學(xué)過atmega16單片機,用IAR學(xué)習(xí)過ZigBee系列芯片CC2430,cc2530.最近公司要用到stm32,之前沒有接觸過arm,覺得他挺復(fù)雜的,尤其是固件庫函數(shù),看上去挺復(fù)雜的,但實際上有過之前的基礎(chǔ),入門很快,利用固件庫編程比自己寫代碼要快好多。頭一次發(fā)現(xiàn),看來學(xué)了那么東西看來還是有些用的,有了之前的基礎(chǔ),后面就越學(xué)越簡單了。從原理圖設(shè)計,到PCB制作,到代碼的編寫,最近兩個月確實學(xué)到了許多。后面把我在調(diào)試板子時自己的調(diào)試程序貼出來,給大家分享。
#include"stm32f10x_it.h"
#include "stm32f10x_conf.h"
voidRCC_Configuration(void); //時鐘配置
GPIO_InitTypeDef GPIO_InitStructure;
int main(void)
{
int i;
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA|
RCC_APB2Periph_GPIOE, ENABLE); //使能各部分時鐘
GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11|GPIO_Pin_15;
GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
GPIO_Init(GPIOA,&GPIO_InitStructure);
while (1)
{
GPIO_SetBits(GPIOA,GPIO_Pin_11) ;
GPIO_SetBits(GPIOA,GPIO_Pin_15) ;
for(i=0;i<1000000;i++);
GPIO_ResetBits(GPIOA,GPIO_Pin_11);
GPIO_ResetBits(GPIOA,GPIO_Pin_15);
for(i=0;i<1000000;i++);
}
}
void RCC_Configuration(void)
{
SystemInit();
}
注,arm在給引腳初始化時,一定要先定義時鐘,否則定義無效,這一點要特別注意。
RCC_APB2PeriphClockCmd()函數(shù)在stm32f10x_rcc.c中定義,因此文件組中一定要記得添加改文件,否則會出現(xiàn)函數(shù)維定義的情況
還有條件編譯的設(shè)置,USE_STDPERIPH_DRIVER,STM32F10X_MD,這兩個函數(shù)一定要定義,否則也會出現(xiàn)錯誤
還有,頭文件路徑也要設(shè)置,否則系統(tǒng)將從默認安裝目錄下尋找相應(yīng)的頭文件,往往會出現(xiàn)重復(fù)定義的錯誤,或者定義有沖突。還有添加頭文件路徑時,對應(yīng)的文件一定要全部填加到,不要漏掉。
|