OpenEdv-开源电子网

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

为什么我写的按键程序,只要按得频率快点LED灯就反应不过来啊

[复制链接]

28

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-6-17
在线时间
0 小时
发表于 2012-8-1 18:29:50 | 显示全部楼层 |阅读模式

后来把SysTick->LOAD|=(u32)nms*fac_ms改成 SysTick->LOAD=(u32)nms*fac_ms  就行了 另外我调试的时候

用查看内存窗口跟踪SysTick->LOAD发现在SysTick->LOAD|=(u32)nms*fac_ms 发现内存值是对的  但是颜色是红色的  如下


然后

用查看内存窗口跟踪SysTick->LOAD发现在SysTick->LOAD=(u32)nms*fac_ms 发现内存值是对的 但是颜色是绿色的 如下


这是为什么呢是不是第一次读不到SysTick->LOAD的值而导致运行速度变慢呢?而第二次不必读SysTick->LOAD的值  而是直接进行赋值呢?


 

 


 

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

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-8-1 19:56:25 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

117

主题

598

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
1698
金钱
1698
注册时间
2012-5-10
在线时间
438 小时
发表于 2012-8-2 09:25:03 | 显示全部楼层
这还用想,肯定是你按键消抖的时间问题
如有技术问题,微信扫头像交流,STM32,JAVA,服务器
回复 支持 反对

使用道具 举报

28

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-6-17
在线时间
0 小时
 楼主| 发表于 2012-8-2 13:47:50 | 显示全部楼层
回复【3楼】xsx127:
---------------------------------我改下试试
回复 支持 反对

使用道具 举报

28

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
207
金钱
207
注册时间
2012-6-17
在线时间
0 小时
 楼主| 发表于 2012-8-2 14:43:11 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我是根据你直接操作寄存器写的  别的都一样接延时这里不同你的是这样的//nms为延时时间
//nms<=(2^24)/us(16777216/9)=1864   
void delay_nms(u16 nms)
{
u32 temp;
SysTick->LOAD=(u32)nms*fac_ms; //加载时间
SysTick->VAL=0X00000000; //清空计数器
SysTick->CTRL|=0X00000001; //开启倒数
do
{
temp=SysTick->CTRL;
}
while(!(temp&(1<<16)));
SysTick->CTRL&=0Xfffffffe; //关闭倒数
SysTick->VAL=0X00000000; //清空计数器  
}    
我的是这样的
//nms为延时时间
//nms<=(2^24)/us(16777216/9)=1864   
void delay_nms(u16 nms)
{
u32 temp;
SysTick->LOAD|=(u32)nms*fac_ms; //加载时间
SysTick->VAL=0X00000000; //清空计数器
SysTick->CTRL|=0X00000001; //开启倒数
do
{
temp=SysTick->CTRL;
}
while(!(temp&(1<<16)));
SysTick->CTRL&=0Xfffffffe; //关闭倒数
SysTick->VAL=0X00000000; //清空计数器  
}    
原子哥  另外问下内存值的颜色是绿色的 跟是红色的有什么不同么?
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2012-8-2 15:50:01 | 显示全部楼层
其实我是想看你的按键扫描程序.
按得快不行,最可能的就是你扫描一次的时间太长.比如你是500ms才扫描一次按键,那么你每秒钟按下的次数超过2次,就无效了.最多是2次.
而如果你50ms扫描一次,每秒钟就可以识别最多20次了.

红色绿色我也不太清楚具体区别,只是看到刚刚修改的内存颜色会变化.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-27 03:06

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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