打印

107MCO和TMI1_CH1会产生引脚冲突吗

[复制链接]
3141|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本人有个疑问想请教一下:107以太网功能的MCO是输出PLL分频后的时钟给PHY和REF使用的,MCO使用的引脚是PA8,但是本人又使能和TIM1定时功能,配置TIM1为:
void TIM1_Config(void)
{
    TIM_TimeBaseInitTypeDef TIM1_InitStruct;
    TIM_OCInitTypeDef TIM1_OCInitStruct;   
    TIM_DeInit(TIM1);
    TIM1_InitStruct.TIM_Period = 65535;
    TIM1_InitStruct.TIM_Prescaler = 35999;
    TIM1_InitStruct.TIM_ClockDivision = TIM_CKD_DIV1;
    TIM1_InitStruct.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM1, &TIM1_InitStruct);
    TIM1_OCInitStruct.TIM_OCMode = TIM_OCMode_Timing;     
    TIM1_OCInitStruct.TIM_Pulse = 65535;//CaptureVal;
    TIM1_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM1_OCInitStruct.TIM_OutputState = TIM_OutputState_Disable;   
   
   TIM_OC1Init(TIM1, &TIM1_OCInitStruct);
    TIM_OC2Init(TIM1, &TIM1_OCInitStruct);
    TIM_OC3Init(TIM1, &TIM1_OCInitStruct);
    TIM_OC4Init(TIM1, &TIM1_OCInitStruct);
/* TIM1中断源设置,开启相应通道的捕捉比较中断*/
    TIM_ITConfig(TIM1, TIM_IT_CC1 | TIM_IT_CC2 | TIM_IT_CC3 | TIM_IT_CC4, ENABLE);
}


PA8------TIM1——CH1-----MCO
PA8引脚我的意是作为时钟输出,初始化之后,网络的时钟信号正常(LED闪烁正常),但是当触发TIM1中断后,MCO时钟不正常,网络时钟消失了。本人猜想,是否是因为TIM1_CH1和MCCO引脚冲突导致,但是在TIM1_OCInitStruct.TIM_OutputState = TIM_OutputState_Disable;也没有作用,还是出现这个问题?
沙发
desomond|  楼主 | 2012-3-12 11:17 | 只看该作者
引脚图

tim,mco.png (18.32 KB )

tim,mco.png

使用特权

评论回复
板凳
香水城| | 2012-3-12 12:41 | 只看该作者
请试试看:在对TIM1_OCInitStruct的分量赋值之前,调用TIM_OCStructInit(&TIM1_OCInitStruct)对结构体进行初始化。

使用特权

评论回复
地板
whlcsu| | 2012-3-12 13:10 | 只看该作者
1# desomond
3# 香水城
请试试看:在对TIM1_OCInitStruct的分量赋值之前,调用TIM_OCStructInit(&TIM1_OCInitStruct)对结构体进行初始化。
香水城 发表于 2012-3-12 12:41


当你把TIM_OCMode 配置为 TIM_OCMode_Timing的时候,按照数据手册上说,不是“冻结。输出比较寄存器TIMx_CCR1与计数器TIMx_CNT 间的比较对OC1REF不起作用”吗?既然这样,配置其它分量,比如:
TIM1_OCInitStruct.TIM_OCPolarity = TIM_OCPolarity_Low;
TIM1_OCInitStruct.TIM_OutputState = TIM_OutputState_Disable;
意义何在呢?

使用特权

评论回复
5
香水城| | 2012-3-12 13:36 | 只看该作者
不错,比较结果对OC1REF不起作用,就是说这两者没有关系。

既然两者之间没有联系,当然配置了其一,并不能自动地配置其二,还是需要分别配置两者。

使用特权

评论回复
6
whlcsu| | 2012-3-12 15:03 | 只看该作者
5# 香水城

那如果我只配置其中的TIM_OCMode为TIM_OCMode_Timing,其它分量使用默认值,因为我不需要引脚输出,只是想在匹配中断中去做一些事。

这样配置的话,会存在什么问题吗?

使用特权

评论回复
7
香水城| | 2012-3-12 15:24 | 只看该作者
5# 香水城  

那如果我只配置其中的TIM_OCMode为TIM_OCMode_Timing,其它分量使用默认值,因为我不需要引脚输出,只是想在匹配中断中去做一些事。

这样配置的话,会存在什么问题吗? ...
whlcsu 发表于 2012-3-12 15:03


你知道默认值是什么吗?

强烈建议:不要依赖默认值,始终自己把需要的值显式地写在程序中,这样保证不会因为意想不到的事情出错,同时也是为了提高程序的可读性。

使用特权

评论回复
8
whlcsu| | 2012-3-12 15:32 | 只看该作者
7# 香水城

使用特权

评论回复
9
desomond|  楼主 | 2012-3-12 15:47 | 只看该作者
请试试看:在对TIM1_OCInitStruct的分量赋值之前,调用TIM_OCStructInit(&TIM1_OCInitStruct)对结构体进行初始化。
香水城 发表于 2012-3-12 12:41

加上这句代码的效果和没加是一样的,用万用表测量了一下,在未使用TIM1的时候时钟是50MHz,触发一个TIM1_CH1定时之后,MCO/TIM1_CH1对应的引脚(即PA8)输出一直为高电平

使用特权

评论回复
10
香水城| | 2012-3-12 18:05 | 只看该作者
嗯,确实有点奇怪。

你看看TIM1_Config()结束后,对照一下各个寄存器的值是否正确?

使用特权

评论回复
11
desomond|  楼主 | 2012-3-12 21:12 | 只看该作者
本帖最后由 desomond 于 2012-3-12 21:21 编辑

调试了一下,发现,
其一将TIM1_OCInitStruct.TIM_OutputState = TIM_OutputState_Disable;中的Dosable改成使能Enable之后,50M时钟正常了;(解决方案一)
个人认为,是否是因为在先初始化网络接口之后再初始化TIM1_CH1,虽然PA8被网络初始化为MCO输出50M时钟,但是TIM1又将其输出属性其OutputState失能了,所以PA8不输出了,则时钟也不能输出了。
问题1,我配置TIM1_CH1的输出属性怎么会影响到MCO的输出呢?
问题2,TIM_CH1输出时钟不会影响到MCO的时钟输出吗?
望版主关注关注

使用特权

评论回复
12
lkl10800139| | 2012-3-13 10:35 | 只看该作者
我也来关注

使用特权

评论回复
13
香水城| | 2012-3-13 14:21 | 只看该作者
回11楼:我回答不了你的问题。 你最好还是按照我在10楼的建议,对照一下各个寄存器的值是否正确。

使用特权

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

本版积分规则

1

主题

109

帖子

3

粉丝