打印
[STM8]

用stm8s输出占空比为50%的方波,相关寄存器的计算问题

[复制链接]
4858|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
奔牛滚滚|  楼主 | 2013-1-14 10:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 奔牛滚滚 于 2013-1-14 13:09 编辑

使用stm8s的ch1输出方波,晶振为4Mhz,希望计数器的计数频率为1Mhz,产生方波的频率为100khz,占空比为50%,
如果使用向上计数模式,预分频寄存器  TIM1->PSCR = ? ,  预装载寄存器 TIM1->ARR = ? ,比较输出寄存器 TIM1->CCR1 = ?
如果使用中央对齐模式,预分频寄存器  TIM1->PSCR = ? ,  预装载寄存器 TIM1->ARR = ? ,比较输出寄存器 TIM1->CCR1 = ?

我计算的结果和实际输出差了几倍,很奇怪,于是改成下面的值
TIM1->PSCRH = 0 ;
  TIM1->PSCRL = 7 ;  /* 计数器频率 = 输入频率/(PSCR+1),这里等于7显然不对 */
  TIM1->ARRH = 0 ;
  TIM1->ARRL = 19 ;   /* 向上计数模式,产生100khz方波,这里应该是20还是19,怎么不是9 ?  */
TIM1->CCR1H = 0 ;
  TIM1->CCR1L = 10 ;
TIM1->CR1 =  TIM1_CR1_ARPE | TIM1_CR1_CEN;

启动外部的晶振代码如下:
  CLK->SWR = CLK_SOURCE_HSE ;
  CLK->SWCR |= CLK_SWCR_SWEN;
  CLK->CKDIVR = 1; //2分频



沙发
uet_cache| | 2013-1-14 12:14 | 只看该作者
你们的晶振是4M,要产生1MHZ,应该是4分频才对啊,PSCRL=3!吧  1MHZ计数频率,方波频率是100KHZ,那周期应该是10撒,ARRL=10, 占空比为50%,自然CCR1=5喽。。

使用特权

评论回复
板凳
奔牛滚滚|  楼主 | 2013-1-14 13:08 | 只看该作者
uet_cache 发表于 2013-1-14 12:14
你们的晶振是4M,要产生1MHZ,应该是4分频才对啊,PSCRL=3!吧  1MHZ计数频率,方波频率是100KHZ,那周期应该 ...

我原来也是这么设置的,不过输出的频率不对,大约是200Khz.奇怪了.
即使外部晶振没有启动成功,默认使用内部的2Mhz的RC振荡器,那频率也应该是更低才对啊.

启动外部的晶振代码如下:
  CLK->SWR = CLK_SOURCE_HSE ;
  CLK->SWCR |= CLK_SWCR_SWEN;
  CLK->CKDIVR = 1; //2分频

使用特权

评论回复
地板
触觉的爱| | 2013-1-14 18:19 | 只看该作者
频率刚好差一倍,要么是时钟频率搞错了,要么是分频系数搞错

使用特权

评论回复
5
uet_cache| | 2013-1-14 18:27 | 只看该作者
你看下你的4M是否是正确的

使用特权

评论回复
6
奔牛滚滚|  楼主 | 2013-1-14 21:21 | 只看该作者
uet_cache 发表于 2013-1-14 18:27
你看下你的4M是否是正确的

从晶振的表面刻字来看是正确的,如果连晶振都买到假货那就没办法了.貌似这几年买的晶振都是对的

使用特权

评论回复
7
Rtukou| | 2013-12-9 17:27 | 只看该作者
为什么不用固件库

使用特权

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

本版积分规则

384

主题

1461

帖子

6

粉丝