STM32F103學習之四種點燈方式

STM32F103學習之四種點燈方式

在古老的傳說中有一萬種點燈方式,現在咱先學它四種

方法1:SET和RESET方法

 //GPIO_SetBits  對IO口置位,輸出高電平
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
//GPIO_ResetBits 對IO口復位,輸出低電平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);

例如

GPIO_SetBits(GPIOA,GPIO_Pin_1); //PA1口輸出高電平1
GPIO_ResetBitsGPIOA,GPIO_Pin_1); /PA1口輸出高電平0

注:個人不怎麼喜歡用這種方式(* ̄(oo) ̄)

方法2:利用枚舉

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);//第三個參數是一個枚舉
/** 
  * @brief  Bit_SET and Bit_RESET enumeration  
  */

typedef enum
{ Bit_RESET = 0,
  Bit_SET
}BitAction;              

例如

GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)(1)); //PA1口輸出高電平1     

// (BitAction)(0) 對應Bit_RESET,將IO輸出置0
// (BitAction)(1) 對應Bit_SET,將IO輸出置1
//第三個參數可以直接寫Bit_RESET或者Bit_SET,但是不建議

方法3:狀態反轉
和方法2一樣,只是進行了取反
//取反PA1

GPIO_WriteBit(GPIOA,GPIO_Pin_1,(BitAction)(1-GPIO_ReadOutputDataBit(GPIOA,GPIO_Pin_1,))); 

方法4:直接數值操作

void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);

例如

GPIO_Write(GPIOA,0x0001); //GPIOA的第0位寫入1,其餘寫入0
GPIO_Write(GPIOA,0x0000); //GPIOA16位都寫入0

這種方法大大簡化代碼,但是很容易出現失誤,
此外,當我們需要進行對多個IO口分開進行寫0或寫1時,建議採用或運算

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章