本篇博文最后修改时间:2016年11月18日,02:54。
一、简介
本文修正STM8L的库函数GPIO_WriteBit的Bug。
二、实验平台
编译软件:IAR for STM8 1.42.2
硬件平台:stm8l101f3p6开发板
仿真器:ST-LINK
库函数版本:STM8L_STMTouch_Lib_V1.1.0
三、版权声明
博主:甜甜的大香瓜
声明:喝水不忘挖井人,转载请注明出处。
原文地址:http://blog.csdn.NET/feilusia
联系方式:897503845@qq.com
香瓜BLE之CC2541群:127442605
香瓜BLE之CC2640群:557278427
香瓜单片机之STM8/STM32群:164311667
甜甜的大香瓜的小店(淘宝店):https://shop217632629.taobao.com/?spm=2013.1.1000126.d21.hd2o8i
四、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口能被正常拉高拉低了。
因此,实验成功。