历史上的今天
今天是:2025年02月13日(星期四)
2019年02月13日 | STM8L15x系列单片机判断指定I/O引脚电平
2019-02-13 来源:eefocus
/**
* @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.
* This parameter can be one of the following values:
* @arg GPIO_Pin_0: Pin 0
* @arg GPIO_Pin_1: Pin 1
* @arg GPIO_Pin_2: Pin 2
* @arg GPIO_Pin_3: Pin 3
* @arg GPIO_Pin_4: Pin 4
* @arg GPIO_Pin_5: Pin 5
* @arg GPIO_Pin_6: Pin 6
* @arg GPIO_Pin_7: Pin 7
* @retval BitStatus : GPIO input pin status.
*/
BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
return ((BitStatus)(GPIOx->IDR & (uint8_t)GPIO_Pin));
}
以上是ST文件读取指定IO口电平原型。
如果你使用类似
if(GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) == SET)
{
.....
}
这样的判断代码,你会发现永远的不到你想要的。原因是BitStatus是个enum类型,其实enum从某个层面上说它是与int类型相似。所以你用BitStatus test = GPIO_ReadInputPin(GPIO_ReadInputPin(GPIOC,GPIO_PIN_7) ;你会发现,test值是个8位的数,而非类似BOOL的0或1.
所以你可以考虑将代码修改为
BitStatus GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, GPIO_Pin_TypeDef GPIO_Pin)
{
return ((GPIOx->IDR & (uint8_t)GPIO_Pin) ? SET : RESET);
}
史海拾趣
|
前面一直用直接读写寄存器的方法编程,需要经常翻lm3s8962.h来查询宏名称,非常不方便,而且代码不易维护,下面我们学习用TI提供的driverlib来写程序。这个driverlib不仅可以用在8962上,也可以用在其他流明系列ARM上。驱动库的代码全部存放在Stell ...… 查看全部问答> |
|
求助!万利199学习板,插入SD卡后,调试时can\'t halt the core,不插入SD卡则能正常调试调试环境 MDK3.5 调试工具 自带的ST_LINK II … 查看全部问答> |
|
usbasp下载器给AT89S52最小系统供电-无法进入编程模式 我在面包板上搭建了个AT89S52的最小系统,如下图,画线的表示实际导线的连接(REST电路没有标出来)。 USBASP编程器(驱动安装正常)接上后点progisp1.7智峰下载软件上的RD按钮(Read)出现错误 “进入编程模式失败.....” 同样的这块芯片和这个u ...… 查看全部问答> |




