打印
[其他ST产品]

hdlc定时器问题

[复制链接]
6846|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fl123ly|  楼主 | 2007-6-26 21:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在str71x的hdlc的测试程序中,用timer2为hdlc配置时钟,其中有几处不清楚。请教了。程序如下void clks_init(void)
  {
    RCCU_Div2Config (ENABLE);            //OSC input is divide by 2
    RCCU_PLL1Config(RCCU_PLL1_Mul_12, RCCU_Div_2); //RCLK = 48MHz
    RCCU_RCLKSourceConfig (RCCU_PLL1_Output);
    RCCU_MCLKConfig(RCCU_DEFAULT);          //MCLK=48MHz
    RCCU_PCLKConfig(RCCU_Div_2);          //PCLK2=24MHz APB2 periph
    RCCU_FCLKConfig(RCCU_Div_2);          //PCLK1=24MHz APB1 periph (fast)
    RCCU_PLL2Config(RCCU_PLL2_Mul_12, RCCU_Div_2); //configure PLL2 for HDLC clock

        //setup timer2 (P0.13) for external HDLC clock connected to HCLK
    TIM_ClockSourceConfig (TIM2, TIM_INTERNAL );
    TIM_PrescalerConfig (TIM2,10 ); //24Mhz/77 = 312KHz
    TIM_PWMOModeConfig (TIM2,0x7,TIM_LOW,0x7,TIM_HIGH); //square wave output
    TIM_CounterConfig(TIM2, TIM_START);
  }
我的问题是为什么倒数第三句TIM_PrescalerConfig (TIM2,10 ); //24Mhz/77 = 312KHz
的注释中是对24m分频,应该是48m对么?
在主函数中://***************** Test 2 External clocking, print receive buffer*********************
//External clock (155.8kHz) on PLL2 input HCLK
HDLC_XmitClockSourceConfig(HDLC_HTXCKSource);//写波特率的RCKS
HDLC_XmitBaudrateConfig(0);
HDLC_RecvClockSourceConfig(HDLC_HRXCK);//写预频分因子rcks
HDLC_RecvClockPrescalerConfig(0);//写预分频因子prs
问题是://External clock (155.8kHz) on PLL2 input HCLK这句注释看不懂
还有:RCCU_Div2Config (ENABLE);            //OSC input is divide by 2这句能理解,但是注释里面用osc?对么?osc不是32k?
沙发
ST_ARM| | 2007-6-27 10:37 | 只看该作者

“为什么倒数第三句TIM_PrescalerConfig (TIM2,10 ); //24Mhz/77 = 312KHz
的注释中是对24m分频,应该是48m对么?”
定时器是连接在APB2上的,而APB2的时钟为:
RCCU_PCLKConfig(RCCU_Div_2);          //PCLK2=24MHz APB2 periph
所以应该是24MHz。

“//External clock (155.8kHz) on PLL2 input HCLK这句注释看不懂”
这里指HCLK的时钟是来自PLL2的,而输入PLL2的时钟为155.8kHz

“还有:RCCU_Div2Config (ENABLE);           //OSC input is divide by 2这句能理解,但是注释里面用osc?对么?osc不是32k?”
这里的osc并不是指32k的RTC时钟,它是大写的,只是简称而已,是指系统的外部有源时钟,即CK。

使用特权

评论回复
板凳
fl123ly|  楼主 | 2007-6-27 16:30 | 只看该作者

谢谢了,分析的很好。但是第二个问题还有些疑问。

第二个问题还有些疑问:
“HCLK的时钟是来自PLL2的,而输入PLL2的时钟为155.8kHz ”那么配置timer2是做什么用的呢?提供pll2的155.8的输入时钟么?
     TIM_PWMOModeConfig (TIM2,0x7,TIM_LOW,0x7,TIM_HIGH); //square wave output这里输出的是一个占空比多少的信号阿。我觉得应该是百分之百的对么?周期是0x7。对这个timer2的功能看了几遍,理解不了,你给解释一下吧。
另外,按照“HCLK的时钟是来自PLL2的,而输入PLL2的时钟为155.8kHz ”,那么pll2经过
RCCU_PLL2Config(RCCU_PLL2_Mul_12, RCCU_Div_2); //configure PLL2 for HDLC clock之后,变成了934.8k为hdlc提供时钟,不对吧?
 在TEXT2中有一个这样的解释,跟这个相关,但是不懂。“pll2(HTXCK)是hdlc的时钟源,程序中配置timer2以提供hdlc时钟;发送波特率被设置为HTXCK/1。”
附上text2的一段时钟配置程序://***************** Test 2 External clocking, print receive buffer*********************
//External clock (155.8kHz) on PLL2 input HCLK
HDLC_XmitClockSourceConfig(HDLC_HTXCKSource);//写波特率的RCKS
HDLC_XmitBaudrateConfig(0);    
HDLC_RecvClockSourceConfig(HDLC_HRXCK);//写预频分因子rcks
HDLC_RecvClockPrescalerConfig(0);//写预分频因子prs

HDLC_Xmit_Frame (XmitBuffer, 6);//加载发送缓冲,并开始发送
十分感谢。

使用特权

评论回复
地板
fl123ly|  楼主 | 2007-6-28 15:29 | 只看该作者

路过的达人,指点一下

指点一下

使用特权

评论回复
5
fl123ly|  楼主 | 2007-6-29 09:42 | 只看该作者

希望今天有高手帮忙

自己顶一下

使用特权

评论回复
6
ST_ARM| | 2007-6-29 16:27 | 只看该作者

下周给你详细讲解

使用特权

评论回复
7
fl123ly|  楼主 | 2007-6-29 23:03 | 只看该作者

呵呵,先谢谢了

谢谢!

使用特权

评论回复
8
fl123ly|  楼主 | 2007-7-2 21:59 | 只看该作者

高人给个回答吧

我们不是约定好的么

使用特权

评论回复
9
creeping| | 2007-7-4 00:34 | 只看该作者

别用710的HDLC了,根本就不能用

别用710的HDLC了,根本就不能用
双工都不行,咋用

使用特权

评论回复
10
fl123ly|  楼主 | 2007-7-5 07:10 | 只看该作者

ST_ARM 来了么?期待你的回答

 ST_ARM 来了么?期待你的回答。
 另,回复9楼,我看你上次发的帖子说,好像是最简单的nrz模式下,能用?对么
 我看了好一段时间了,我想把这几个问题,弄清楚了,自己试试,要不换了板子,还要从头看。
 但是我的这几个问题,总是找不到人问。

使用特权

评论回复
11
浪淘沙| | 2007-7-5 10:34 | 只看该作者

HDLC定时器问题

回10楼,这星期没看到ST_ARM,好像出差参加培训去了。

使用特权

评论回复
12
fl123ly|  楼主 | 2007-7-8 09:37 | 只看该作者

请教

ST_ARM 回来了么

使用特权

评论回复
13
creeping| | 2007-7-8 22:27 | 只看该作者

回10楼

我看了看你的问题,他的HDLC.c例程有test1和test2,test1是内部分频作为发送和接收时钟,test2是外部引脚HCLK来的时钟作为发送接收时钟,它的OSC用的是16M,这个在一个.h文件里定义的,我忘了是哪个.h




另外我也非常想问问ST_ARM这个人
这款芯片的HDLC是不是真的用不了,用不了就算了,至少请给一个说法
最好有折中的解决办法,ST的网站上已经全部删除掉HDLC功能的描述,是不是可以理解成ST想慢慢淡化这个芯片的HDLC功能,因为根本就不能用!

使用特权

评论回复
14
ST_ARM| | 2007-7-10 11:44 | 只看该作者

fl123ly的问题解答


Q: “HCLK的时钟是来自PLL2的,而输入PLL2的时钟为155.8kHz ”那么配置timer2是做什么用的呢?提供pll2的155.8的输入时钟么?

A: 配置timer2是通过timer2在P0.13引脚上输出155.8kHz,外部用引线连接到HDLC的HCLK引脚上。

Q:TIM_PWMOModeConfig (TIM2,0x7,TIM_LOW,0x7,TIM_HIGH); //square wave output这里输出的是一个占空比多少的信号阿。我觉得应该是百分之百的对么?周期是0x7。对这个timer2的功能看了几遍,理解不了,你给解释一下吧。

A:你说得对,占空比是百分之百,所以这里需要修改一下。使用TIM_PWMOModeConfig输出一个占空比为百分之五十的方波。具体数值我没有算。

Q:另外,按照“HCLK的时钟是来自PLL2的,而输入PLL2的时钟为155.8kHz ”,那么pll2经过
RCCU_PLL2Config(RCCU_PLL2_Mul_12, RCCU_Div_2); //configure PLL2 for HDLC clock之后,变成了934.8k为hdlc提供时钟,不对吧?

A:hdlc时钟为 155.8kHz×12/2 = 934.8。正确。

Q:在TEXT2中有一个这样的解释,跟这个相关,但是不懂。“pll2(HTXCK)是hdlc的时钟源,程序中配置timer2以提供hdlc时钟;发送波特率被设置为HTXCK/1。”
附上text2的一段时钟配置程序:
//***************** Test 2 External clocking, print receive buffer*********************
//External clock (155.8kHz) on PLL2 input HCLK
HDLC_XmitClockSourceConfig(HDLC_HTXCKSource);//写波特率的RCKS
HDLC_XmitBaudrateConfig(0);    
HDLC_RecvClockSourceConfig(HDLC_HRXCK);//写预频分因子rcks
HDLC_RecvClockPrescalerConfig(0);//写预分频因子prs

HDLC_Xmit_Frame (XmitBuffer, 6);//加载发送缓冲,并开始发送
 
A:Pll2(HTXCK)的输出是hdlc的时钟源是指HDLC这个外设运行所需要的时钟。配置timer2以提供hdlc时钟,是用于产生方波作为PLL2的输入;即timer2的输出是PLL2的输入,而PLL2的输出是HDLC的输入,一脉相连的。

使用特权

评论回复
15
ST_ARM| | 2007-7-10 11:50 | 只看该作者

to creeping

STR71x系列芯片中的HDLC有一些问题,在某些条件下还是能用的,由于它的功能受到限制,我不再建议客户使用这个功能,如果你的HDLC比较简单,加上你使用的HDLC的功能刚好符合某些条件,还是能用的。

使用特权

评论回复
16
fl123ly|  楼主 | 2007-7-11 10:56 | 只看该作者

感谢阿

这么详细,感谢阿。真强。

使用特权

评论回复
17
creeping| | 2007-7-12 01:37 | 只看该作者

RE:

"STR71x系列芯片中的HDLC有一些问题,在某些条件下还是能用的,由于它的功能受到限制,我不再建议客户使用这个功能,如果你的HDLC比较简单,加上你使用的HDLC的功能刚好符合某些条件,还是能用的。"


不能双工模式吧?就是不能同时收、发,这样这个HDLC功能在我看来确实没有用的必要。

ST作为欧洲大厂出了这个严重问题,宣传说有这个功能,而我买器件的时候没有任何说明,我买了100多片的,ST不能做一点补救吗?

使用特权

评论回复
18
fl123ly|  楼主 | 2007-7-12 23:01 | 只看该作者

还有一个问题

    TIM_PrescalerConfig (TIM2,10 ); //24Mhz/77 = 312KHz
    TIM_PWMOModeConfig (TIM2,0x7,TIM_LOW,0x7,TIM_HIGH); //square wave output
    第一句话已经实现了312khz,那么第二句里面用pwm产生了一个周期为0x7的方波,不是重复了么?
    另外,能讲讲0x7这个周期的方波的频率是多少?怎么计算的阿?

使用特权

评论回复
19
ST_ARM| | 2007-7-16 12:06 | 只看该作者

关于定时器

TIM_PrescalerConfig(TIM2,10 ); //24Mhz/77 = 312KHz
这一行代码是说明每1/312000s中计数一次。
TIM_PWMOModeConfig(TIM2,0x7,TIM_LOW,0x7,TIM_HIGH); //square wave output
第二个参数0x7表示电平为TIM_LOW的宽度为7个计数。第四个参数表示脉冲的周期的长度的计数。这说明第四个参数必须大于第二个参数,如果第四个参数必须等于第二个参数,则会产生一个脉宽为第二个参数的方波,即50%的PWM。故PWM的周期为312/2=156Khz
能讲讲0x7这个周期的方波的频率是怎么计算,请看参考手册定时器一节。


另外说明一下:我没有QQ(这个东西要花钱!)、MSN(公司里不允许用),俺也没有时间去用这些东西。

使用特权

评论回复
20
fl123ly|  楼主 | 2007-7-16 23:27 | 只看该作者

谢谢 ST_ARM

使用特权

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

本版积分规则

2

主题

16

帖子

0

粉丝