历史上的今天
今天是:2025年04月10日(星期四)
2019年04月10日 | STM8L库函数修正--GPIO_ReadInputDataBit
2019-04-10 来源:eefocus
使用的库:STM8L15x_StdPeriph_Driver
库函数:GPIO_ReadInputDataBit
函数原型:
BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
}
作用:读取GPIO脚的电平,被读取的IO口为低电平时返回RESET,高电平返回SET。
SET\RESET的定义:
typedef enum {RESET = 0, SET = !RESET} BitStatus,;
GPIO_ReadInputDataBit()函数的返回值是将(GPIOx->IDR & (uint8_t)GPIO_Pin)强制转换为BitStatus变量,按理说值只能是0或者1,而实际上高电平脚位可能是0x10,0x20,0x40,0x80这些值。
当(GPIOx->IDR & (uint8_t)GPIO_Pin)的结果是0或1以外的值时,函数的结果表达式的值超出了枚举范围,无法在枚举定义的元素值里找到对应的数据。再检查是否等于SET就会出错。
修改后:
BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
if( (GPIOx->IDR & (uint8_t)GPIO_Pin) ==0)
{return RESET;}
else
{return SET;}
}
上一篇:I2C协议---I2C时序图解析
史海拾趣
|
DDK6001安装不了,总是提示 Remove: EULA,好像是说有有不需要的一个组件已经安装,必须把它先卸载了,但是按提示操作了无数次,还是装不了,是怎么回事呢,谢谢… 查看全部问答> |
|
最近调试流接口驱动程序出了些问题,麻烦论坛里的牛牛们指教,问题描述如下: 三星2440平台,wince5.0,调试ADC的流接口驱动程序,我只为了测试所以很多功能都简化了,就是往寄存器里写一次,直接读回,用了virtualalloc和virtualcopy函数映射地址 ...… 查看全部问答> |
|
WinCE中OPENFILENAME,GetOpenFileName的使用 我在VS2005下OS Design,SDK,使用GetOpenFile出错,不知道在WinCE下到底能不能用它们?如果能,怎么用?我这样用行吗? 但出错! OPENFILENAMEEX ofn; ...… 查看全部问答> |
|
由于 SAR ADC 的功耗随着每一代新器件的推出而不断降低,放大器成了功耗敏感型应用的制约因素。那么我们如何才能进一步降低功耗?在寻找可能的解决方案之前,让我们先考虑一下 ADC 功耗降低的原因。下图 1 直接显示了我们 12 位、4MS ...… 查看全部问答> |
|
板子的整个编译下载过程都熟悉了,工程也建好了,开始熟悉程序了,打算先从gpio开始熟悉 R7F0C809内置RL78-S1内核,这还第一次接触,不知道与我们通用的ARM的有何区别 首先吧,编译一个空的主函数看看效果 瑞萨比较让人纠结的一点就是为啥编译一 ...… 查看全部问答> |




