打印
[STM8]

求救STM8 频率突变?

[复制链接]
3106|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
RyanHsuing|  楼主 | 2010-12-22 16:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是STM8S208RBT6  编译器 IAR for STM8 v1.20 ,程序大小约20几K  ,使用了近1K的SRAM.  系统设置是照着一个例程设置的。

最近STM8的 频率有时会变。举个例子,大家帮忙分析一下,看看是为什么引起的,怎么解决。

例:
   while(1)
    {
       GPIO_WriteHigh(GPIOD,GPIO_PIN_5);  //PD5置高
       delay100ms(100);   //延时100MS
       GPIO_WriteLow(GPIOD,GPIO_PIN_5);  //PD5置低       delay100ms(100);
   }
正常PD5输出100MS的方波,突变时输出120MS的方波。频率会被放慢20%。


触发条件: 在程序中加一条语句就可能会触发(偶发性的)
解决方法: 再多加几条语句(多为一条,有时要两条)
沙发
香水城| | 2010-12-22 17:18 | 只看该作者
这样的写法就有很大的问题:delay100ms(100);

你不知道编译器是否会做优化,以及怎么优化。

使用特权

评论回复
板凳
jgphu| | 2010-12-22 17:36 | 只看该作者
建议改成中断方式延时。
你这里是不是让CPU等待的延时方法,这样的法,中断函数处理频率和处理内容的多少直接会影响你的这个电平频率的变化。

使用特权

评论回复
地板
jgphu| | 2010-12-22 17:37 | 只看该作者
定时器中断延时

使用特权

评论回复
5
RyanHsuing|  楼主 | 2010-12-23 08:24 | 只看该作者
2# 香水城 是有这种可能 ,但是我再加一条语句就可以了? 这个我想不同

使用特权

评论回复
6
RyanHsuing|  楼主 | 2010-12-23 08:25 | 只看该作者
4# jgphu 一但变化后,它是频率就定死在120MS了,我想不是中断的问题

使用特权

评论回复
7
香水城| | 2010-12-23 13:38 | 只看该作者
2# 香水城 是有这种可能 ,但是我再加一条语句就可以了? 这个我想不同
RyanHsuing 发表于 2010-12-23 08:24


再加一条语句就可以了? “可以了”是什么意思?

我在2楼已经说了“你不知道编译器是否会做优化,以及怎么优化”,所以也不会知道是加一条语句会优化,还是减一条语句会优化。

使用特权

评论回复
8
RyanHsuing|  楼主 | 2010-12-24 08:17 | 只看该作者
7# 香水城    还在还没什么头序,谢谢

使用特权

评论回复
9
zengguangjun| | 2010-12-28 21:13 | 只看该作者
你的程序其它地方也会影响执行,并不一定在你上传的那部分:比如其它地方改变了延迟程序的代码,其它程序中断了延迟程序的运行,等等。综合分析下,不要局限在当前那段代码上。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

219

帖子

1

粉丝