简介
本文修正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口能被正常拉高拉低了。
因此,实验成功。
上一篇:STM8L之timer2定时中断
下一篇:STM8L之红外发射(定时器中断产生38K信号)
推荐阅读最新更新时间:2024-11-08 10:19
设计资源 培训 开发板 精华推荐
- LTC3622HDE-23/5 2.5V/5V Vout 应用的典型应用电路,fSW = 1MHz 同步降压稳压器
- SPC5-L9177A-K01,用于 SPC572L MCU 和 L9177A 驱动器的小型发动机 EFI(电子燃油喷射)参考设计
- 高速无线DAP调试器
- ADR431B 2.5 Vout 超低噪声 XFET 电压基准的典型应用,具有灌电流和拉电流能力
- 使用 Infineon Technologies AG 的 IRU1205-33 的参考设计
- AL3157高效1X/2X电荷泵LED驱动器的典型应用,适用于小屏幕背光和手电筒
- 【航顺训练营】CNC控制板调试板
- LT6658AHMSE-2.5 单电源精密数据采集电路典型应用电路
- OP184FSZ-REEL 3V 单电源、50Hz 至 60Hz 有源陷波滤波器和假接地的典型应用
- 用于编程欠压锁定的 LT3066EMSE-5 线性稳压器的典型应用电路