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