嵌入式STM32實例之LED燈閃爍控制以及相關注意事項


在本實例中,主要是為了實現LED燈的閃爍。首先分析LED的驅動方式,本實驗中使用的是OpenM3V,內置8個LED均采用灌流方式驅動(低電平亮)。如果想要實現其閃爍,則需要給相應端口持續不斷的高低交替電平。

在軟件結構設計中,加入使用LED8,則需要在PD7口不斷的輸出高電平和低電平。首先需要初始化系統時鍾,然后再開始配置PD7作為輸出使用,打開外設時鍾最后控制PD7輸出持續的高低輪流。

開始 -> 配置系統時鍾 -> 配置PD7作為輸出在打開PD外設時鍾 -> 置位PD7,熄滅LED8 -> 延時程序 -> 清PD7,點亮LED8 -> 延時 -> 置位PD7,以此開始循環閃爍。

以下給出具體的代碼(代碼運行在KEIL5上)。

在軟件代碼編寫中需要實現LED的閃爍其實是很簡單的,只需要輪流的置低、置高控制LED8的I/O口線就好。

#include<stm32f10x_lib.h> //包含頭文件,使用庫函數必須要加入該頭文件

int main(void)

{

RCC_Configuration();//配置系統時鍾,設置系統時鍾為72MHz

NVIC_Configuration();//配置中斷

//使能A,B,C,D,E外設時鍾,如果用到那個外設,必須打開其外設時鍾

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|

  RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|

  RCC_APB2Periph_GPIOE,ENABLE);

    GPIO_InitSrtucture.GPIO_Pin = GPIO_ALL;//選中所有的引腳0~15;

GPIO_InitSrtucture.GPIO_Mode = GPIO_AIN;//配置成模擬輸入;

GPIO_Init(GPIOA, &GPIO_InitStructure);//把A端口全部引腳配置成模擬輸入

GPIO_Init(GPIOB, &GPIO_InitStructure);//把B端口全部引腳配置成模擬輸入

GPIO_Init(GPIOC, &GPIO_InitStructure);//把C端口全部引腳配置成模擬輸入

GPIO_Init(GPIOD, &GPIO_InitStructure);//把D端口全部引腳配置成模擬輸入

GPIO_Init(GPIOE, &GPIO_InitStructure);//把E端口全部引腳配置成模擬輸入

  //使能A,B,C,D,E外設時鍾,關閉A,B,C,D,E外設

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|

  RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOD|

  RCC_APB2Periph_GPIOE,DISABLE);

  //配置LED所在的外設的6,7,8,9引腳為輸出

    GPIO_InitSrtucture.GPIO_Pin = GPIO_Pin6|GPIO_Pin7|GPIO_Pin8|GPIO_Pin9;

GPIO_InitSrtucture.GPIO_Mode = GPIO_Mode_Out_PP;//配置為輸出

GPIO_InitSrtucture.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIO_LED,&GPIO_InitSrtucture);

While(1)  //為了產生循環

{

}

}

 

以下是完整的程序(其中以頭文件方式包含以上程序)

#include<stm32f10x_lib.h>

Void Delay(void)

{

unsigned long k;

For(k=0;k<0xffff8;k++);

}

int main()

{

RCC_Configuration();//配置系統時鍾,設置系統時鍾為72MHz

NVIC_Configuration();//配置中斷

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);//打開外設D的時鍾

//配置LED所在的外設的7引腳為輸出

GPIO_InitSrtucture.GPIO_Pin = GPIO_Pin_7;

GPIO_InitSrtucture.GPIO_Mode = GPIO_Mode_Out_PP;// I/Od的方向

GPIO_InitSrtucture.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_Init(GPIOD,&GPIO_InitStructure);//初始化外設D的7端口

While(1)

{

GPIO_SetBits(GPIOD,GPIO_Pin_7);//置位PD7,滅LED8

Delay();                      //延時

GPIO_Resetbits(GPIOD,GPIO_Pin_7);//清PD7,點亮LED8

Delay(); //延時

}

}

 

以上就是完整的程序,但是在使用外設的時候,以下幾點非常重要。

1.FWLAB文件組中加入該外設的庫文件

2.在頭文件stm32f10x_conf.h中,打開對應外設的宏定義

3.根據系統對該功能的需求,初始化該功能外設

4.打開該外設的時鍾

5.在NVIC_Configuration()函數中配置嵌套向量中斷  

在介紹如何使用I/O外設:

1.需要向FWLAB文件組中加入時鍾(RCC),中斷(NVIC),flash,系統(LIB)和GPIO相關的庫文件,這樣有關I/O口的庫文件也加入了;

2.頭文件中的外設定義是否打開(是否有宏定義);

3.首先需要使用GPIO_Init(GPIOD,&GPIO_InitStructure)函數來初始化端口D,設置端口7為輸出;

4.調用RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE)函數打開外設D的時鍾;由於沒有使用中斷,所以沒有配置中斷優先級,加入說有中斷則需要配置中斷優先級。

創客學院全新視頻:www.makeru.com.cn

嵌入式學習交流群:561213221


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM