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