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时,建议采用或运算

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