欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: stm32求助,while為何不能循環? [打印本頁]

作者: xzf586    時間: 2017-11-4 09:57
標題: stm32求助,while為何不能循環?
最近看看stm32,感覺麻煩多了,時鐘配置與端口配置,還是不得其法,下面是參考的一段主程序,

個人認為應該是PA.2  PA.3閃爍的,結果調試看IO口,一直是PA.3=1 PA.2=0,似乎while只運行一次就停止了,不知道為什么原因,新手,請大神指教!

  1. /* 頭文件    ------------------------------------------------------------------*/

  2. #include "stm32f10x_lib.h"
  3. #define delay(n)    while((n)--)

  4. void RCC_Configuration(void);      //RCC(Reset and Clock Control group)復位與時鐘控制寄存器組,七個組員,
  5. void GPIO_Configuration(void);     //端口配置

  6. int main(void)
  7. {   
  8.           vu32 n=2000000;          /* 設置延時參數 2000000=0.25s */
  9.           RCC_Configuration();        /* 設置系統時鐘 */                        
  10.           GPIO_Configuration();    /* 設置GPIO端口 */
  11.                  
  12.         while(1)
  13.      {
  14.           GPIO_SetBits(GPIOA , GPIO_Pin_2);            // PA.2輸出高電平
  15.           GPIO_ResetBits(GPIOA , GPIO_Pin_3);             // PA.3輸出低電平         
  16.           delay(n);
  17.          
  18.           GPIO_ResetBits(GPIOA , GPIO_Pin_2);          // PA.2輸出低電平
  19.           GPIO_SetBits(GPIOA , GPIO_Pin_3);                     // PA.3輸出高電平
  20.           delay(n);
  21.      }
  22. }

  23. /*******************************************************************************
  24. * 函數名        : RCC_Configuration
  25. * 函數描述  : 設置系統各部分時鐘
  26. * 過程      :1
  27. *******************************************************************************/

  28. void RCC_Configuration(void)
  29. {
  30.       
  31.         ErrorStatus HSEStartUpStatus;                     /* 定義枚舉類型變量HSEStartUpStatus,檢測外部高速時鐘HSE啟動狀況*/
  32.          
  33.           RCC_DeInit();                                     /* 復位系統時鐘設置*/
  34.       
  35.           RCC_HSEConfig(RCC_HSE_ON);                        /* 開啟HSE*/         
  36.           HSEStartUpStatus = RCC_WaitForHSEStartUp();       /* 等待HSE起振并穩定*/
  37.       
  38.       
  39.           if(HSEStartUpStatus == SUCCESS)                   /* 判斷HSE起是否振成功,是則進入if()內部 */
  40.           {         
  41.           RCC_HCLKConfig(RCC_SYSCLK_Div1);             /* 選擇HCLK(AHB)時鐘源 為SYSCLK 1分頻 */   
  42.           RCC_PCLK2Config(RCC_HCLK_Div1);                 /* 選擇PCLK2(APB2)時鐘源---為HCLK(AHB)1分頻 */   
  43.           RCC_PCLK1Config(RCC_HCLK_Div2);                 /* 選擇PCLK1(APB1)時鐘源---為HCLK(AHB)2分頻 */

  44.          
  45.           FLASH_SetLatency(FLASH_Latency_2);                     /* 設置FLASH延時周期數為2 */           
  46.           FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);  /* 使能FLASH預取緩存 */

  47.          
  48.           RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);   /* 選擇鎖相環(PLL)時鐘源---為HSE1分頻,倍頻數為9,則PLL輸出頻率為 8MHz * 9 = 72MHz */           
  49.           RCC_PLLCmd(ENABLE);                                    /* 使能PLL */   
  50.           while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);        /* 等待PLL輸出穩定 */   
  51.           RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);             /* 選擇SYSCLK時鐘源為PLL */        
  52.           while(RCC_GetSYSCLKSource() != 0x08);                  /* 等待PLL成為SYSCLK時鐘源 */
  53.           }
  54.    
  55.           RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA , ENABLE);/* 打開APB2總線上的GPIOA時鐘*/
  56. }


  57. /*******************************************************************************
  58. * 函數名                  : GPIO_Configuration
  59. * 函數描述            : 設置各GPIO端口功能
  60. * 輸入參數      : 無
  61. * 輸出結果      : 無
  62. * 返回值        : 無
  63. *******************************************************************************/

  64. void GPIO_Configuration(void)
  65. {
  66.           GPIO_InitTypeDef GPIO_InitStructure;

  67.           /* 設置PA2,PA3口為推挽輸出,最大翻轉頻率為50MHz*/
  68.           GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
  69.           GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  70.           GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
  71.      
  72.           GPIO_Init(GPIOA , &GPIO_InitStructure);   
  73. }
復制代碼



作者: xzf586    時間: 2017-11-4 10:01
有些注釋語句是自己加的,可能顯得很不專業
作者: 橘氣    時間: 2017-11-4 11:15
你debug一下就知道問題處在那里了
作者: zyftank    時間: 2023-1-20 13:55
我也遇到這個問題了,我覺得你這個程序燈應該是點不亮的,GPIO_Configuration函數加段代碼: RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOC , ENABLE);就可以點亮燈,但是兩個燈沒有進行閃爍,而是一直亮的。
作者: 君工創    時間: 2023-1-20 15:20
延時太短,閃了你也看不到。
作者: adject    時間: 2023-1-20 20:29
操作stm32 的外設必須先使能外設的時鐘
作者: zyftank    時間: 2023-1-21 08:30
這個問題的原因終于找到了,while(1)這個死循環里,n這個變量在delay后已經變了,不再是第一次賦值的值了,所以每次delay后再進行一次賦值,或者直接進行define進行定義常量。
作者: Hephaestus    時間: 2023-1-23 11:16
n每次使用都要重新賦值,這是簡單的語法問題。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1