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時,建議採用或運算