|
发表于 2013-4-16 10:25:42
|
显示全部楼层
本帖最后由 allwireless 于 2013-4-16 10:26 编辑
fengchi 发表于 2013-4-15 23:19
你遇到过了?
STM8的库有一个地方可以拿出来讨论下:
/**
* @brief Reads the specified GPIO input data pin.
* @param GPIOx : Select the GPIO peripheral number (x = A to I).
* @param GPIO_Pin : Specifies the pin number.
* @retval BitStatus : GPIO input pin status.
*/
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
}
这是STM8最新的库里面,读IO口输出状态的API,正常理解应该是某个IO为高电平时返回1,低电平返回0;但这个函数并不是这样。
比如:读PD3的输入状态:低电平返回0,高电平返回0x08;这样在调用这个函数的时候,还有再做一次比较。
实际使用的时候我把它做了一点修改:
/**
* @brief Reads the specified GPIO input data pin.
* @param GPIOx : Select the GPIO peripheral number (x = A to I).
* @param GPIO_Pin : Specifies the pin number.
* @retval BitStatus : GPIO input pin status.
*/
BitStatus GPIO_ReadInputPin(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
//return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin) );
return ((BitStatus)((GPIOx->IDR & (uint8_t)GPIO_Pin) != 0x00) );
}
STM8L、STM8S的库都是这样。 |
|