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

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个回答
七哥 回答时间: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

查看全部评分

琦子 回答时间: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里需求的是布尔量,而你是一个数字量,当然报错 ...

那应该怎么写
琦子 回答时间:2018-4-4 15:26:57
主要是你需要先说清楚到底想要干嘛,我们才能帮你达到
Angel_YY_ST 回答时间:2018-4-4 15:28:46
提示: 作者被禁止或删除 内容自动屏蔽
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) ...

这样写也不对呀
琦子 回答时间: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

查看全部评分

wenyangzeng 回答时间:2018-4-4 16:46:48
本帖最后由 wenyangzeng 于 2018-4-4 16:51 编辑

GPIO_Pin_Set(GPIOD,PIN8,x)  的写法只是固件库适用,HAL库不能用,况且这里是写不是读。

F7X系列只能用HAL库:
写:HAL_GPIO_WritePin(GPIOD, GPIO_PIN_8,GPIO_PIN_SET)
读:HAL_GPIO_ReadPin(GPIOD,GPIO_PIN_8 )

评分

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

查看全部评分

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版