OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5060|回复: 10

判断GPIO的输入状态老是出错,是不是太快了?

[复制链接]

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
发表于 2014-9-5 14:37:40 | 显示全部楼层 |阅读模式
5金钱
用一个光耦判断电机的位置,用到GPIO的输入,我用while(GO1)来判断的,理论上电机不到光耦位置程序是一直在while里的,但是实际上老是还不到位置就已经跳出while了,断点检测是GO1已经变成低电平了所以跳出去了。我在while里加个断点,单步运行就不出错,一全速运行就跳出去了;后来再while里加了延时好点了,但有时还是出错跳出去了,难道是判断GPIO的输入状态不能太快吗? 求指教.


#define GO1      GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13)

配置:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC|
                       RCC_APB2Periph_GPIOD|RCC_APB2Periph_GPIOE, ENABLE);

GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_13;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &GPIO_InitStructure);

判断:
while(GO1)
{
   延时;
   
}
//后面处理程序


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
 楼主| 发表于 2014-9-5 14:41:03 | 显示全部楼层
看寄存器的IDR也是正常的,怎么回事呢
回复

使用道具 举报

10

主题

561

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1841
金钱
1841
注册时间
2014-6-27
在线时间
982 小时
发表于 2014-9-5 17:22:31 | 显示全部楼层
while(1)前面的配置只执行一次吧?你不用while(1)来检测也可以啊,做个节拍,周期性的扫描就行了,扫描的时候还能执行其他代码,一般判断不会有什么问题,除非你没配置好。
回复

使用道具 举报

3

主题

2178

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3323
金钱
3323
注册时间
2013-7-19
在线时间
195 小时
发表于 2014-9-5 17:58:37 | 显示全部楼层
你光耦输出的波形会不会有毛刺?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-5 21:14:46 | 显示全部楼层
频繁读貌似会有点奇怪的问题,和你这个类似。
加延时就好。
不知道为什么....
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
51
金钱
51
注册时间
2012-9-21
在线时间
2 小时
发表于 2014-9-6 21:47:28 | 显示全部楼层
建议挂示波器看下电机运行时,对光耦的影响,还有,设置IO口时为输入,还初始化IO口速度干嘛?
回复

使用道具 举报

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
 楼主| 发表于 2014-9-9 11:54:15 | 显示全部楼层
回复【6楼】shanyuze:
---------------------------------
开始是没有的,找不到问题就加上试试了
回复

使用道具 举报

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
 楼主| 发表于 2014-9-9 11:55:00 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
那得大概延时多少?
回复

使用道具 举报

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
 楼主| 发表于 2014-9-9 11:55:24 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
我现在延时20ms 有时还是出问题
回复

使用道具 举报

16

主题

52

帖子

1

精华

中级会员

Rank: 3Rank: 3

积分
309
金钱
309
注册时间
2013-6-22
在线时间
7 小时
 楼主| 发表于 2014-9-9 11:57:48 | 显示全部楼层
回复【3楼】TinyBoy:
---------------------------------
你说的这个方法我考虑过,其实跟while里面加延时是一样的啊,我需要执行的代码都放在while里面了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-9-9 13:10:26 | 显示全部楼层
回复【8楼】贵在坚持:
---------------------------------
我的延时几个us就可以了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-1 15:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表