STM32F10x GPIO -3

在 STM32F10x GPIO -1中我曾貼上一張圖(如下圖)來說明灌電和拉電流的差異。而在STM32中如何利用GPIO的功能來點亮一個LED呢‧?


PB0 在電路上的設計如下圖一。

                                                                        圖一
PB1在電路上的設計如下圖二。

                                                                               圖二

其實這兩種電路在GPIO的初始化都是一樣的,如下列所示:
•RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIO_LED, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9;
•  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
•  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

•  GPIO_Init(GPIOF, &GPIO_InitStructure);

而這兩在程式上的應用就有所差異了,

在PB0 這種有外在 Vcc提供電壓的電路,要點亮LED要用 GPIO_ResetBits,

/* Turn on LED. */
GPIO_ResetBits(GPIO_LED, GPIO_Pin_6); Set Low

/* Turn off  LED */
GPIO_SetBits(GPIO_LED, GPIO_Pin_6); Set High
這種電路適合一開始就打算點亮LED的設計,而這往往不是我們想要的設計,因為在使用電池的手持裝置是耗電的,除非是打算讓LED的亮度十分明亮,否則不是很建設使用。


在PB0 這種沒有外在 Vcc提供電壓的電路,要點亮LED要用 GPIO_SetBits,
/* Turn on LED */
GPIO_SetBits(GPIO_LED, GPIO_Pin_6); Set High

/* Turn off LED */
GPIO_ResetBits(GPIO_LED, GPIO_Pin_6); Set Low

這種電路適合一有特定時機點亮LED的設計,這種電路是比較不耗電的,但相對的LED的亮度不會很明亮。

其實點亮一個LED也可以用 通用開漏輸出模式  GPIO_Mode_Out_OD來設計,如果你要使用高電位(PB1模式)點亮發光二極體,就需要把引腳設置為推輓輸出,以增大電流輸出能力,如果你設置為開漏輸出,發光二極體肯定是點不亮了。但是如果你使用低電位(PB0模式)點亮發光二極體,那麼設置為開漏和推輓輸出都可以正常點亮發光二極體。

這些說明可能會比較抽象,需要配合實際電路及程式的設定才可深入理解。

留言

這個網誌中的熱門文章

STM32 I2C-EEPROM 的讀寫

如何提高STM32 ADC的精度

ADC的校正方法