OpenEdv-开源电子网

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

ALIENTEK 战舰STM32开发板 实验11 触摸按键实验遇到的问题

[复制链接]

16

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2013-5-12
在线时间
0 小时
发表于 2013-5-12 12:19:40 | 显示全部楼层 |阅读模式

ALIENTEK 战舰STM32开发板 实验11 触摸按键实验

Tpad.c文件中:

//得到定时器捕获值

//如果超时,则直接返回定时器的计数值.

u16 TPAD_Get_Val(void)

{                            

       TPAD_Reset();

       while(TIM_GetITStatus(TIM5, TIM_IT_CC2) != RESET)//等待溢出

       {

if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)return TIM_GetCounter(TIM5);//超时了,直接返回CNT的值

       }    

       return TIM_GetCapture2(TIM5);      

}

上面红色这句代码不太明白,程序原来的意思是死循环等待直到捕获到上升沿,中断标志置位后或超时退出,函数返回捕获值,可我看上面这行代码!= RESET似乎是标志位 置位 时死循环,未置位时退出呀,哪位大侠能指导下,感谢!

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

使用道具 举报

16

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-13 16:29:57 | 显示全部楼层
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-13 17:18:35 | 显示全部楼层
回复【楼主位】50330102:
---------------------------------
这部分代码有误,是==才对。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-13 22:46:02 | 显示全部楼层
原子大哥!可是改成!=SET 后程序反倒不正常了,有点搞不懂了,呵呵!
这两天学了OLED和TFTLCD又遇到了点问题,我在网上查了没有关于这个问题的帖子,所以还想向原子大哥请教。
第1个问题是在oled.c中
//画点 
//x:0~127
//y:0~63
//t:1 填充 0,清空    
void OLED_DrawPoint(u8 x,u8 y,u8 t)
{
u8 pos,bx,temp=0;
if(x>127||y>63)return;//超出范围了.
pos=7-y/8;   
bx=y%8;
temp=1<<(7-bx);   //取模时高位是前
if(t)OLED_GRAM[x][pos]|=temp;
else OLED_GRAM[x][pos]&=~temp;     
}
我觉得是不是应该pos=y/8?比如想显示第(0,0),按原程序的话应该显示的是数组的第7个字节而不是第0个字节,我没有OLED模块,所以这个问题没法用硬件验证了。

第二个问题是    第十八章,TFT LCD显示实验
Lcd.h中
typedef struct
{
u16 LCD_REG;
u16 LCD_RAM;
} LCD_TypeDef;

结构体成员变量为16位,占用两个字节,LCD_REG的地址使LCD数据命令区分线A10为低电平,而LCD_RAM地址应为LCD_REG的地址偏移2字节,怎么是1字节使A10为高电平?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165536
金钱
165536
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-13 23:58:56 | 显示全部楼层
回复【4楼】50330102:
---------------------------------
关于!=的问题,我让我同事看看吧.

1,OLED部分,没问题的.改成你那样就反而错了.
2,这里是16位宽,所以每2个字节,地址才加1
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

16

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-14 00:29:17 | 显示全部楼层
LCD我没看视频,看了视频后搞懂了
回复 支持 反对

使用道具 举报

230

主题

1950

帖子

10

精华

论坛元老

Rank: 8Rank: 8

积分
4562
金钱
4562
注册时间
2010-12-14
在线时间
32 小时
发表于 2013-5-14 11:47:27 | 显示全部楼层
修改为:u16 TPAD_Get_Val(void)
{    
TPAD_Reset();
while(TIM_GetFlagStatus(TIM5, TIM_IT_CC2) == RESET)//等待溢出
{
if(TIM_GetCounter(TIM5)>TPAD_ARR_MAX_VAL-500)return TIM_GetCounter(TIM5);//超时了,直接返回CNT的值
};
return TIM_GetCapture2(TIM5);   
}
我是开源电子网?网站管理员,对网站有任何问题,请与我联系!QQ:389063473Email:389063473@qq.com
回复 支持 反对

使用道具 举报

16

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-15 20:32:56 | 显示全部楼层
明白了
回复 支持 反对

使用道具 举报

16

主题

35

帖子

0

精华

初级会员

Rank: 2

积分
119
金钱
119
注册时间
2013-5-12
在线时间
0 小时
 楼主| 发表于 2013-5-16 08:58:48 | 显示全部楼层
因为TIM5的捕获中断没开
回复 支持 反对

使用道具 举报

7

主题

45

帖子

0

精华

初级会员

Rank: 2

积分
93
金钱
93
注册时间
2014-2-19
在线时间
0 小时
发表于 2014-2-21 22:38:40 | 显示全部楼层
回复【7楼】Admin:
---------------------------------
改为==RESET之后反而实验不成功了。。
一代龙影-KPL
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-9 05:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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