打印
[其他ST产品]

hdlc定时器问题

[复制链接]
981|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fhguo1990|  楼主 | 2015-4-19 15:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在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?

沙发
我思故我在12345| | 2015-4-19 15:32 | 只看该作者

“为什么倒数第三句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。

使用特权

评论回复
板凳
fhguo1990|  楼主 | 2015-4-19 15:33 | 只看该作者
谢谢了,分析的很好。但是第二个问题还有些疑问。

第二个问题还有些疑问:
“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);//加载发送缓冲,并开始发送
十分感谢。

使用特权

评论回复
地板
我是MT| | 2015-4-19 15:48 | 只看该作者
别用710的HDLC了,根本就不能用
双工都不行,咋用

使用特权

评论回复
5
后会无期1| | 2015-4-19 15:49 | 只看该作者
我是MT 发表于 2015-4-19 15:48
别用710的HDLC了,根本就不能用
双工都不行,咋用


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

使用特权

评论回复
6
后会无期1| | 2015-4-19 15:50 | 只看该作者


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的输入,一脉相连的。

使用特权

评论回复
7
我是MT| | 2015-4-19 15:51 | 只看该作者
后会无期1 发表于 2015-4-19 15:49
STR71x系列芯片中的HDLC有一些问题,在某些条件下还是能用的,由于它的功能受到限制,我不再建议客户使 ...

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

使用特权

评论回复
8
fhguo1990|  楼主 | 2015-4-19 15:53 | 只看该作者
还有一个问题

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

使用特权

评论回复
9
我是MT| | 2015-4-19 15:53 | 只看该作者

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这个周期的方波的频率是怎么计算,请看参考手册定时器一节。

使用特权

评论回复
10
fhguo1990|  楼主 | 2015-4-19 15:54 | 只看该作者
st公司的给的pdf文件中,指出除了查询模式,还可以用中断模式实现hdlc,可以么?
那样的话,需要在两个hdlc的通信主主体之间,连接传输中断信号的线么?需要用普通的gpio口自己设置么?

使用特权

评论回复
11
fhguo1990|  楼主 | 2015-4-19 15:55 | 只看该作者
如果使用中断模式实现hdlc(ST的pdf上面有流程图),那么在两个使用hdlc协议传输数据的str71之间,还需要连接线么?怎么连接呢?

使用特权

评论回复
12
我思故我在12345| | 2015-4-19 15:55 | 只看该作者
fhguo1990 发表于 2015-4-19 15:55
如果使用中断模式实现hdlc(ST的pdf上面有流程图),那么在两个使用hdlc协议传输数据的str71之间,还需要连 ...

HDLC的连线

手册上有关于HDLC送接收都有中断模式的使用。
“连接传输中断信号的线”,不清楚你的意思。

“如果使用中断模式实现hdlc(ST的pdf上面有流程图),那么在两个使用hdlc协议传输数据的str71之间,还需要连接线么?怎么连接呢?”
如果不连线,那怎么通讯,连线方式有两种:1、时钟线相连,发送对接收。
2、发送对接收,不使用HCLK时钟线,此时双方使用相同的通信频率。
详细的内容请参考STR71xF High Level Data Link Controller (HDLC) interface reference manual.

使用特权

评论回复
13
yinq123| | 2015-12-3 08:25 | 只看该作者
请问下楼主,我下载的函数库里面怎么没有HDLC.c和。H文件。能给我发一份吗,谢谢

使用特权

评论回复
14
lio| | 2015-12-3 09:09 | 只看该作者
做HDLC的人还是有的,这样的同步通讯日本人爱用

使用特权

评论回复
15
yinq123| | 2015-12-3 14:00 | 只看该作者
lio 发表于 2015-12-3 09:09
做HDLC的人还是有的,这样的同步通讯日本人爱用

请问下,我下载的函数库里面怎么没有HDLC.c和。H文件。能给我发一份函数库吗,谢谢

使用特权

评论回复
16
lio| | 2015-12-4 11:46 | 只看该作者
没有,我是根据HDLC专业协议芯片开发的,没有过STR7

使用特权

评论回复
17
yinq123| | 2016-1-10 21:23 | 只看该作者
我思故我在12345 发表于 2015-4-19 15:32
“为什么倒数第三句TIM_PrescalerConfig (TIM2,10 ); //24Mhz/77 = 312KHz
的注释中是对24m分频,应该是48 ...

请问您是用什么开发环境和调试工具的,,急求,,,

使用特权

评论回复
18
yinq123| | 2016-1-10 21:24 | 只看该作者
我思故我在12345 发表于 2015-4-19 15:32
“为什么倒数第三句TIM_PrescalerConfig (TIM2,10 ); //24Mhz/77 = 312KHz
的注释中是对24m分频,应该是48 ...

请问您是用什么开发环境和下载工具的,,急求,,谢谢

使用特权

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

本版积分规则

23

主题

254

帖子

1

粉丝