打印

stm32定时器比较输出问题,请高手解答

[复制链接]
3996|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
say_sth_freely|  楼主 | 2010-11-22 14:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近在调试stm32的timer的比较输出,发现当cnt寄存器的值大于通道一的比较寄存器后,我量对应的输出脚没有发现电平由低变为高,我对照一遍st公司给的比较输出例程基本差不多,不知道怎么回事,用的是万利的EKSTM3210B开发板,CPU为stm32f103vb,使用stm32的TIM1,PA8就是通道一输出脚,程序代码如下:
void AdvanceTimerOCTest()
{
    NVIC_InitTypeDef Timer1_OC_IT = {TIM1_CC_IRQn, 1, 0, ENABLE};
    /*不分频,系统时钟为72MHZ*/
    TIM_TimeBaseInitTypeDef Timer1 = {0, TIM_CounterMode_Up, 1000, TIM_CKD_DIV1, 0};
    TIM_OCInitTypeDef Timer1_OC = {TIM_OCMode_Active, TIM_OutputState_Enable, TIM_OutputNState_Enable,
        500, TIM_OCPolarity_High, TIM_OCNPolarity_Low, TIM_OCIdleState_Reset,
        TIM_OCNIdleState_Reset};
    GPIO_InitTypeDef GPIOA_8 = {GPIO_Pin_8, GPIO_Speed_50MHz, GPIO_Mode_AF_PP};
    GPIO_InitTypeDef GPIOB_13 = {GPIO_Pin_13, GPIO_Speed_50MHz, GPIO_Mode_AF_PP};

    /*初始化TIM1*/
    TIM_DeInit(TIM1);
    /*初始化GPIO*/
    GPIO_DeInit(GPIOA);
    GPIO_DeInit(GPIOB);
    /*开启TIM1时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);
    /*开启GPIOA,GPIOC时钟*/
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);

    GPIO_Init(GPIOA, &GPIOA_8);
    GPIO_Init(GPIOB, &GPIOB_13);

    /*设置TIM1*/
    TIM_TimeBaseInit(TIM1, &Timer1);
    TIM_OC1Init(TIM1, &Timer1_OC);
    /*TIM8更新中断设置*/
    NVIC_Init(&Timer1_OC_IT);
    /*TIM8更新中断设置*/
    TIM_ITConfig(TIM1, TIM_IT_CC1, ENABLE);
    /*已将DBG模块中的TIM1_STOP位为0*/
    TIM_Cmd(TIM1, ENABLE);
}
在PA8脚上没有电平变化啊
沙发
xsgy123| | 2010-11-22 18:09 | 只看该作者
没看出问题,高手给指点一下

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
say_sth_freely + 1
板凳
loubert| | 2010-11-22 19:58 | 只看该作者
你开启AFIO时钟看看吧

使用特权

评论回复
地板
say_sth_freely|  楼主 | 2010-11-23 08:06 | 只看该作者
回复3楼:
可是我没有用到remap或者其他什么功能啊
这个实验的现象是当cnt寄存器大于比较寄存器时相应引脚出现高电平吧?

使用特权

评论回复
5
loubert| | 2010-11-23 13:24 | 只看该作者
本帖最后由 loubert 于 2010-11-23 13:26 编辑

IC/OC功能也是属于AFIO的范畴的,你试一下,很快得出结论的
我有用过STM32的IC/OC功能,没问题的,我一般都打开AFIO的时钟

使用特权

评论回复
6
say_sth_freely|  楼主 | 2010-11-23 19:07 | 只看该作者
今天晚上终于解决了,我用的v3.3.1这个版本的示例程序有问题,在v2版本中程序的最后有这样一句TIM_CtrlPWMOutputs(TIM1, ENABLE);而在v3版本中缺少这句,不知道st这么大的公司怎么会犯这种丢三落四的错误,这些示例程序不知st试过没有。多亏今晚看了下v2的示例程序。
而这句代码的意思是:如果设置了相应的使能位(TIMx_CCER寄存器的CCxE、CCxNE位),则开启OC和OCN输
出,也怪我看reference的时候没有注意到。
所以应该和AFIO没有关系,AFIO只是管remap或事件之类的,在此给兄弟姐妹提个醒以免和我犯一样的错误。

使用特权

评论回复
7
aaa2742| | 2010-11-24 16:41 | 只看该作者
你用到外设就要开启AFIO时钟的:lol

使用特权

评论回复
8
say_sth_freely|  楼主 | 2010-11-26 11:28 | 只看该作者

使用特权

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

本版积分规则

3

主题

167

帖子

1

粉丝