欧美极品高清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只運行一次就停止了,不知道為什么原因,新手,請大神指教!
/* 頭文件 ------------------------------------------------------------------*/
#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);
}
復制代碼
作者:
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