STM8自學筆記-002續 點亮LED

點亮LED

點亮一個LED燈,應該是大多數單片機教程的第一步。這是最爲基礎的一步,也是最令人興奮的一步,邁出這一小步就是邁入STM8大門的一大步。
  通常,要對LED所在的單片機引腳(Pin)進行模式和電平設置,才能夠點亮LED。先說C51和STM32上點亮LED的大致步驟,再來對比STM8上的步驟。
  熟悉51單片機的童鞋應該很清楚,先用sbit映射一個Pin,然後讓映射量置1來點亮該Pin連接的LED(拉電流驅動,與之相反的叫灌電流驅動)。也就是說,至少需要兩行代碼才能點亮LED。

sbit LED=P1^0;  
LED=1;            //將P1.0口賦值 1,對外輸出高電平

在STM32庫函數開發中,要先開啓引腳Pin_x所在GPIOx的時鐘,再對其初始化(選定輸出引腳號、設置輸出模式、設置引腳速度、應用設置),最後還要設置Pin電平。這樣看來,要寫6行。

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
  
  gpioInitStruct.GPIO_Pin = GPIO_Pin_10; 
  gpioInitStruct.GPIO_Speed = GPIO_Speed_50MHz;
  gpioInitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
  GPIO_Init(GPIOB, &gpioInitStruct);  
  
  GPIO_SetBits(GPIOB, GPIO_Pin_10);

在STM8中,只需要一行代碼就能實現點亮LED。

GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_HIGH_SLOW);

//這句話調用的是stm8s_gpio.c中的GPIO初始化函數GPIO_Init()。
//“GPIOC,GPIO_PIN_3”代表選定了PC3
//“GPIO_MODE_OUT_PP_HIGH_SLOW”表示慢速的推輓輸出,且輸出高電平

上述代碼既完成了初始化,又完成了電平設置。言簡意賅。
  
補充
  如果想要程序下文g改變PC3的電平狀態,有沒有辦法?
  把HIGH改成LOW?!像下面這樣?

GPIO_Init(GPIOC,GPIO_PIN_3,GPIO_MODE_OUT_PP_LOW_SLOW);

//“GPIOC,GPIO_PIN_3”代表選定了PC3
//“GPIO_MODE_OUT_PP_LOW_SLOW”表示慢速的推輓輸出,且輸出低電平

這樣是可行的!但會把一部分寶貴的CPU時間又用在了初始化上!能不能像51或STM32那樣僅操作輸出電平?
  ST官方早就準備了對應的庫函數,而且一下子準備了3個。只要某個端口在前文進行過初始化,這三個函數就能夠發揮作用。

GPIO_WriteHigh(GPIOC,GPIO_PIN_3);			//置位,PC3=1
GPIO_WriteLow(GPIOC,GPIO_PIN_3);			//復位,PC3=0
GPIO_WriteReverse(GPIOC,GPIO_PIN_3);		//取反,PC3 ^=1

//這三個函數直接操作了GPIOx->ODR寄存器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章