你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F7li 判断IO口状态?

[复制链接]
Rareyee 提问时间:2018-4-4 15:15 /
#define BUSY(x)        GPIO_Pin_Set(GPIOD,PIN8,x)
while(BUSY == 1);  这样写为什么会报错 未定义

原子的案例里这样也不能写
   u8 GPIO_Pin_Get(GPIO_TypeDef* GPIOD,u16 pin8)
        {
            if(GPIOD->IDR&pin8)return 1;
                else return 0;

收藏 评论11 发布时间:2018-4-4 15:15

举报

11个回答
toofree 回答时间:2018-4-6 23:51:08

宏定义相当于替换,你看看 while(GPIO_Pin_Set(GPIOD,PIN8) == 1) 是个什么?
GPIO_Pin_Set()一般是没有返回值的viod类型, 不知道你的函数定义里面是什么样的。标准库函数中,读是“void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)”,写是“uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)”
傲游截图20180406234611.jpg

傲游截图20180406234644.jpg

至于下面一条说 “原子的案例里这样也不能写”,那得看报什么错?本身这个函数这样写是没有语法问题的。


评分

参与人数 1蝴蝶豆 +4 收起 理由
zero99 + 4

查看全部评分

bargagebaobei 回答时间:2018-4-4 15:25:31
GPIO_Pin_Set(GPIOD,PIN8,x)是设置 不是获取。
if里需求的是布尔量,而你是一个数字量,当然报错

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Rareyee 回答时间:2018-4-4 15:26:06
bargagebaobei 发表于 2018-4-4 15:25
GPIO_Pin_Set(GPIOD,PIN8,x)是设置 不是获取。
if里需求的是布尔量,而你是一个数字量,当然报错 ...

那应该怎么写
bargagebaobei 回答时间:2018-4-4 15:26:57
主要是你需要先说清楚到底想要干嘛,我们才能帮你达到
Angel_YY 回答时间:2018-4-4 15:28:46
while(BUSY == 1);
你这个BUSY编译器不认识啊,如果是调用GPIO_Pin_Set(GPIOD,PIN8,x),必须
while(BUSY(2) == 1);
这样编译器才认识BUSY是个啥东西。
函数再调用的时候不能只写函数名称,要写括号和参数的,你这里都没有,编译器怎能知道是要掉用什么,所以只能报错了。

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

Rareyee 回答时间:2018-4-4 15:37:28
bargagebaobei 发表于 2018-4-4 15:26
主要是你需要先说清楚到底想要干嘛,我们才能帮你达到

就是判断BUSY 是否高电位
Rareyee 回答时间:2018-4-4 15:37:47
Angel_YY 发表于 2018-4-4 15:28
while(BUSY == 1);
你这个BUSY编译器不认识啊,如果是调用GPIO_Pin_Set(GPIOD,PIN8,x),必须
while(BUSY(2) ...

这样写也不对呀
bargagebaobei 回答时间:2018-4-4 15:42:18
我只是说一个大概啊 从名字上来说GPIO_Pin_Get(GPIOD,PIN8),这样的名字是获取状态,当然如果这个函数返回的是1或者0那么就可以放在while里循环了。
if(GPIOD->IDR&pin8)关于这个 我认为应该写成 if((GPIOD->IDR&pin8)==0x100)这样 就行了。仅代表个人意见
无薪税绵 回答时间:2018-4-4 15:56:28
本帖最后由 无薪税绵 于 2018-4-4 15:58 编辑

建议,使用HAL库吧,方便。
用法:
if(HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_8)==0)
{
     ;
}
else
{
   ;
}

如果想用宏的话,可以这样:
#define BUSY HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_8)


关于详细的 STM32使用HAL库操作GPIO ,请参考:
http://www.cnblogs.com/feipeng8848/p/7248898.html

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

wudianjun2001 回答时间:2018-4-4 16:35:31
这个函数是写,你要找到读的函数才行

评分

参与人数 1蝴蝶豆 +1 收起 理由
zero99 + 1

查看全部评分

12下一页
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版