之前用過keil學習過8051單片機,用avrstudio學過atmega16單片機,用IAR學習過ZigBee系列芯片CC2430,cc2530.最近公司要用到stm32,之前沒有接觸過arm,覺得他挺復雜的,尤其是固件庫函數,看上去挺復雜的,但實際上有過之前的基礎,入門很快,利用固件庫編程比自己寫代碼要快好多。頭一次發現,看來學了那么東西看來還是有些用的,有了之前的基礎,后面就越學越簡單了。從原理圖設計,到PCB制作,到代碼的編寫,最近兩個月確實學到了許多。后面把我在調試板子時自己的調試程序貼出來,給大家分享。
#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()函數在stm32f10x_rcc.c中定義,因此文件組中一定要記得添加改文件,否則會出現函數維定義的情況
還有條件編譯的設置,USE_STDPERIPH_DRIVER,STM32F10X_MD,這兩個函數一定要定義,否則也會出現錯誤
還有,頭文件路徑也要設置,否則系統將從默認安裝目錄下尋找相應的頭文件,往往會出現重復定義的錯誤,或者定義有沖突。還有添加頭文件路徑時,對應的文件一定要全部填加到,不要漏掉。
|