OpenEdv-开源电子网

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

新手新手,已经入门的就请帮帮顶贴啊

[复制链接]

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-3-28
在线时间
0 小时
发表于 2013-3-29 11:18:03 | 显示全部楼层 |阅读模式
各位大哥大神,我刚接触stm32,最近有个项目程序在我手上,准备改动,现在我连IO口读取都没法理解
主程序main()中输入程序是这样的
//输入刷新,这里输入有很多个,其他我就省略,只列出一两个
void IN_refurbish(void)
{if(T1>Refurbish_time)
{IDATA1= USER_I_DataRead(); TM1=0;TM2=1;
AIW0=USER_ADCRead(0)>>2; //AIW0 传感器1
AIW1=USER_ADCRead(1)>>2; //AIW1 传感器2
}
if(T2>Refurbish_time)
{ IDATA2= USER_I_DataRead(); TM2=0;TM1=1;
}
IDATA=(IDATA1 & IDATA2 )& (IDATA1 |IDATA2);/*MI00上开关 MI01下开关
if(IDATA&0x0001) MI00= 1 ;else MI00= 0; 
if(IDATA&0x0002) MI01= 1 ;else MI01= 0;
}

USER_I_DataRead程序是这样的:
uint16_t USER_I_DataRead(void)
{uint8_t i;uint16_t j=0;for(i=0;i<In;i++)//这里In为定义输入的数量
{ j=j>>1;
if(USER_I_Read((I_TypeDef)i))   j=j|0X0800;
}return j;
}

USER_I_Read程序是这样的:
uint8_t USER_I_Read(I_TypeDef I)
{if(GPIO_ReadInputDataBit(I_PORT[I], I_PIN[I])==0) //读取指定端口的位
return 1; 
else return 0;
}
问题有:
1、这里调用了库函数GPIO_ReadInputDataBit去读取输入,但是库函数中返回的值是bitstatus,是个状态还是输入的值啊?
2、而且USER_I_Read 返回的是1或者0,所以USER_I_DataRead中返回的J的结果怎么会是IO口的输入状态呢?
3、从1和2两个疑问,我不明白IDATA调用USER_I_DataRead去获取IO口的值怎么能得到啊?
4、就算读取到IO口的值,为什么要 j=j|0X0800?
(因为这程序我已经在设备上调试过没问题,就是不明白这里怎么获取输入的值)
我看了好久都没理解,脑子快炸了,求大神帮帮解答,谢谢!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-3-29 12:20:50 | 显示全部楼层
回复【楼主位】gsp:
---------------------------------
拿个仿真器跟踪看一下每一步的结果,执行状态,清理下思路吧。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

头像被屏蔽

52

主题

440

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1237
金钱
1237
注册时间
2013-1-9
在线时间
151 小时
发表于 2013-3-29 14:11:49 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

10

主题

27

帖子

0

精华

初级会员

Rank: 2

积分
87
金钱
87
注册时间
2013-3-28
在线时间
0 小时
 楼主| 发表于 2013-3-29 17:42:03 | 显示全部楼层
看是看了很久啦,就是不理解这里的输入读取问题
回复 支持 反对

使用道具 举报

2

主题

1447

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2258
金钱
2258
注册时间
2010-12-16
在线时间
206 小时
发表于 2013-3-29 22:35:27 | 显示全部楼层
C语言基础不行.

1是typedef和enum.
4是逻辑运算.
技术讨论请发帖 , 需要我回复请点左下的 < 回复 > 让系统通知我 . 本人不通过其他方式返回任何参数.
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-22 06:44

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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