OpenEdv-开源电子网

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

stm32延时bug

[复制链接]

42

主题

173

帖子

0

精华

高级会员

Rank: 4

积分
548
金钱
548
注册时间
2013-6-18
在线时间
59 小时
发表于 2014-9-26 11:58:33 | 显示全部楼层 |阅读模式
5金钱
遇到灵异事件了 stm32的时间延时 总是误差 10倍关系 这是怎么回事啊?
 比如delay_ms(500)实际上延时5000ms左右 ,用示波器测试的。

最佳答案

查看完整内容[请看2#楼]

这个有可能你PLL没成功,或外部晶振没起振。单片机以8M频率运行。就会出现这个现象。72M与8M,相差9倍。
只为摆正你的倒影,我倾倒了整个世界。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-9-26 11:58:34 | 显示全部楼层
这个有可能你PLL没成功,或外部晶振没起振。单片机以8M频率运行。就会出现这个现象。72M与8M,相差9倍。
回复

使用道具 举报

9

主题

1385

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
12090
金钱
12090
注册时间
2013-3-8
在线时间
1285 小时
发表于 2014-9-26 11:58:34 | 显示全部楼层
我以前就出现过这样的情况,是晶振没起振,换了个电容就好了。晶振两边的电容换成了22pf
回复

使用道具 举报

56

主题

1237

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2644
金钱
2644
注册时间
2014-2-13
在线时间
518 小时
发表于 2014-9-26 13:04:16 | 显示全部楼层
设置时钟的问题,还有,这个延时函数跑的时钟是多少?
技术交流,Sell 中颖单片机,欢迎私信骚扰
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-9-26 15:21:32 | 显示全部楼层
回复【3楼】黑夜之狼:
---------------------------------
原子哥的延迟函数是靠查询滴答定时器状态位的方式去获取,此时的CPU是一直运行在while()语句之内,本来延迟2ms,但如果到了1ms的时候来个中断,这个中断耗掉了2ms,那此时的延迟就是3ms了,所以这个延迟函数只有在没有中断的时候才是准的。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-9-26 15:23:28 | 显示全部楼层
回复【4楼】jiaozhu:
---------------------------------
呵呵  服了你了  自己看代码吧!
学无止境
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-9-26 16:06:14 | 显示全部楼层
回复【5楼】jermy_z:
---------------------------------
大神帮忙解释下 ,为啥不是我说的那样,在不使用ucos的时候代码如下:
static u8  fac_us=0;//us延时倍乘数
static u16 fac_ms=0;//ms延时倍乘数

void delay_init()  
{
fac_us=SystemCoreClock/8000000; //为系统时钟的1/8  
fac_ms=(u16)fac_us*1000;//非ucos下,代表每个ms需要的systick时钟数   
}     

//延时nus
//nus为要延时的us数.         
void delay_us(u32 nus)
{
u32 temp;       
SysTick->LOAD=nus*fac_us; //时间加载     
SysTick->VAL=0x00;        //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数  
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器
SysTick->VAL =0X00;       //清空计数器  
}
//延时nms
//注意nms的范围
//SysTick->LOAD为24位寄存器,所以,最大延时为:
//nms<=0xffffff*8*1000/SYSCLK
//SYSCLK单位为Hz,nms单位为ms
//对72M条件下,nms<=1864 
void delay_ms(u16 nms)
{        
u32 temp;    
SysTick->LOAD=(u32)nms*fac_ms;//时间加载(SysTick->LOAD为24bit)
SysTick->VAL =0x00;           //清空计数器
SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk ;          //开始倒数  
do
{
temp=SysTick->CTRL;
}
while(temp&0x01&&!(temp&(1<<16)));//等待时间到达   
SysTick->CTRL&=~SysTick_CTRL_ENABLE_Msk;       //关闭计数器
SysTick->VAL =0X00;       //清空计数器        
}
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-9-26 16:54:31 | 显示全部楼层
回复【7楼】jiaozhu:
---------------------------------
systick本身就是一个中断

你的话不是前后矛盾?
学无止境
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-9-26 19:52:50 | 显示全部楼层
回复【8楼】jermy_z:
---------------------------------
你仔细看看我说的    我贴出代码的时候 我说了是在不用ucos的时候  这时候的滴答定时器的异常请求压根就没打开     我说的这个中断并不包括M3内核的   只是外设


再看看,滴答定时器就没有中断这一说。
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-9-27 10:13:06 | 显示全部楼层
回复【9楼】jiaozhu:
---------------------------------
呵呵  你觉得怎样就怎样
学无止境
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-9-27 11:07:52 | 显示全部楼层
回复【10楼】jermy_z:
---------------------------------
以后好好说话  别搞的自己很牛逼似的
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-9-27 11:18:55 | 显示全部楼层
回复【11楼】jiaozhu:
---------------------------------
对你够客气的了   自己无知就别误导别人
学无止境
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-9-27 11:24:29 | 显示全部楼层
回复【12楼】jermy_z:
---------------------------------
你牛逼 那你给我解释下呗    来论坛是来学习   不是来装逼     我有错误 你可以说   装逼有何用
回复

使用道具 举报

70

主题

6763

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
13138
金钱
13138
注册时间
2012-11-26
在线时间
3814 小时
发表于 2014-9-27 11:50:48 | 显示全部楼层
回复【13楼】jiaozhu:
---------------------------------
呵呵   就你这态度    还是回家找妈妈吧
学无止境
回复

使用道具 举报

69

主题

475

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1334
金钱
1334
注册时间
2013-12-28
在线时间
197 小时
发表于 2014-9-27 12:34:08 | 显示全部楼层
回复【14楼】jermy_z:
---------------------------------
我这是虚心向你这位大神学习啊
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-1 00:21

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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