×
嵌入式 > 技术百科 > 详情

STM8L之修正库函数GPIO_WriteBit的Bug

发布时间:2021-04-19 发布时间:
|

简介


本文修正STM8L的库函数GPIO_WriteBit的Bug。


实验平台


编译软件:IAR for STM8 1.42.2


硬件平台:stm8l101f3p6开发板


仿真器:ST-LINK


库函数版本:STM8L_STMTouch_Lib_V1.1.0


BUG现象

通过GPIO_WriteBit函数无法控制IO的电平。


实验步骤

1、替换GPIO_WriteBit函数(在stm8l10x_gpio.c中)

//******************************************************************************        

//name:             GPIO_WriteBit        

//introduce:        GPIO控制位的函数     

//parameter:        GPIOx: 端口(x = A to D)  

//                  GPIO_Pin: GPIO_Pin_0~GPIO_Pin_7 

//                  GPIO_BitVal: SET or RESET                      

//return:           none      

//author:           甜甜的大香瓜             

//email:            897503845@qq.com         

//QQ group          香瓜单片机之STM8/STM32(164311667)                      

//changetime:       2016.11.18       

//******************************************************************************  

void GPIO_WriteBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin, BitAction GPIO_BitVal)

{

  /* Check the parameters */

  assert_param(IS_GPIO_PIN(GPIO_Pin));

  assert_param(IS_STATE_VALUE(GPIO_BitVal));

 

  if (GPIO_BitVal != RESET)

  {

    //SetBit(GPIOx->ODR, GPIO_Pin);//BUG语句,GPIO_Pin是按位来定义的,却被SetBit以字节来操作。

    GPIOx->ODR |= GPIO_Pin;    

  }

  else

  {

    //ClrBit(GPIOx->ODR, GPIO_Pin);//BUG语句,GPIO_Pin是按位来定义的,却被SetBit以字节来操作。

    GPIOx->ODR &= (uint8_t)(~GPIO_Pin);    

  }

}

实验结果

将函数修正后,IO口能被正常拉高拉低了。

因此,实验成功。

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
洪荒之力+无比专注=国内首款机器人离线编程软件