|
最近看看stm32,感覺麻煩多了,時(shí)鐘配置與端口配置,還是不得其法,下面是參考的一段主程序,
個(gè)人認(rèn)為應(yīng)該是PA.2 PA.3閃爍的,結(jié)果調(diào)試看IO口,一直是PA.3=1 PA.2=0,似乎while只運(yùn)行一次就停止了,不知道為什么原因,新手,請(qǐng)大神指教!
- /* 頭文件 ------------------------------------------------------------------*/
- #include "stm32f10x_lib.h"
- #define delay(n) while((n)--)
- void RCC_Configuration(void); //RCC(Reset and Clock Control group)復(fù)位與時(shí)鐘控制寄存器組,七個(gè)組員,
- void GPIO_Configuration(void); //端口配置
- int main(void)
- {
- vu32 n=2000000; /* 設(shè)置延時(shí)參數(shù) 2000000=0.25s */
- RCC_Configuration(); /* 設(shè)置系統(tǒng)時(shí)鐘 */
- GPIO_Configuration(); /* 設(shè)置GPIO端口 */
-
- while(1)
- {
- GPIO_SetBits(GPIOA , GPIO_Pin_2); // PA.2輸出高電平
- GPIO_ResetBits(GPIOA , GPIO_Pin_3); // PA.3輸出低電平
- delay(n);
-
- GPIO_ResetBits(GPIOA , GPIO_Pin_2); // PA.2輸出低電平
- GPIO_SetBits(GPIOA , GPIO_Pin_3); // PA.3輸出高電平
- delay(n);
- }
- }
- /*******************************************************************************
- * 函數(shù)名 : RCC_Configuration
- * 函數(shù)描述 : 設(shè)置系統(tǒng)各部分時(shí)鐘
- * 過程 :1
- *******************************************************************************/
- void RCC_Configuration(void)
- {
-
- ErrorStatus HSEStartUpStatus; /* 定義枚舉類型變量HSEStartUpStatus,檢測外部高速時(shí)鐘HSE啟動(dòng)狀況*/
-
- RCC_DeInit(); /* 復(fù)位系統(tǒng)時(shí)鐘設(shè)置*/
-
- RCC_HSEConfig(RCC_HSE_ON); /* 開啟HSE*/
- HSEStartUpStatus = RCC_WaitForHSEStartUp(); /* 等待HSE起振并穩(wěn)定*/
-
-
- if(HSEStartUpStatus == SUCCESS) /* 判斷HSE起是否振成功,是則進(jìn)入if()內(nèi)部 */
- {
- RCC_HCLKConfig(RCC_SYSCLK_Div1); /* 選擇HCLK(AHB)時(shí)鐘源 為SYSCLK 1分頻 */
- RCC_PCLK2Config(RCC_HCLK_Div1); /* 選擇PCLK2(APB2)時(shí)鐘源---為HCLK(AHB)1分頻 */
- RCC_PCLK1Config(RCC_HCLK_Div2); /* 選擇PCLK1(APB1)時(shí)鐘源---為HCLK(AHB)2分頻 */
-
- FLASH_SetLatency(FLASH_Latency_2); /* 設(shè)置FLASH延時(shí)周期數(shù)為2 */
- FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable); /* 使能FLASH預(yù)取緩存 */
-
- RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9); /* 選擇鎖相環(huán)(PLL)時(shí)鐘源---為HSE1分頻,倍頻數(shù)為9,則PLL輸出頻率為 8MHz * 9 = 72MHz */
- RCC_PLLCmd(ENABLE); /* 使能PLL */
- while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET); /* 等待PLL輸出穩(wěn)定 */
- RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK); /* 選擇SYSCLK時(shí)鐘源為PLL */
- while(RCC_GetSYSCLKSource() != 0x08); /* 等待PLL成為SYSCLK時(shí)鐘源 */
- }
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);/* 打開APB2總線上的GPIOA時(shí)鐘*/
- }
- /*******************************************************************************
- * 函數(shù)名 : GPIO_Configuration
- * 函數(shù)描述 : 設(shè)置各GPIO端口功能
- * 輸入?yún)?shù) : 無
- * 輸出結(jié)果 : 無
- * 返回值 : 無
- *******************************************************************************/
- void GPIO_Configuration(void)
- {
- GPIO_InitTypeDef GPIO_InitStructure;
- /* 設(shè)置PA2,PA3口為推挽輸出,最大翻轉(zhuǎn)頻率為50MHz*/
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
-
- GPIO_Init(GPIOA , &GPIO_InitStructure);
- }
復(fù)制代碼
|
|