打印
[STM32F1]

捕获功能和比较模式转换

[复制链接]
2006|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
  准备对一串行数据进行识别,数据特征类似于USART,有一长‘1’作头帧,其后为数据。
  准备用单片机的上下沿同时捕获功能对幁头识别之后转换成比较模式对有效数据位进行识别,要在这两种模式下来回切换。
问:STM32103能实现吗?哪些引脚有这功能?
沙发
startostar|  楼主 | 2014-2-23 09:28 | 只看该作者
高手,版主解答一下

使用特权

评论回复
板凳
startostar|  楼主 | 2014-2-24 08:55 | 只看该作者
顶顶!

使用特权

评论回复
地板
Rain_King| | 2014-2-24 09:49 | 只看该作者
帮顶贴了.....其他的不太懂....

使用特权

评论回复
5
香水城主| | 2014-2-24 11:19 | 只看该作者
画个图,举个例子说明你希望实现的功能。

使用特权

评论回复
6
wallace_tsou| | 2014-2-25 09:34 | 只看该作者
个人使用来做为bar code解码。
和你要的类似。

void TIM2_Config(void)
{
    TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
    TIM_ICInitTypeDef        TIM_ICInitStructure;
    NVIC_InitTypeDef         NVIC_InitStructure;

    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
    TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV4;
    TIM_TimeBaseStructure.TIM_Prescaler = 15;
    TIM_TimeBaseStructure.TIM_Period = 0xffff;
    TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
    TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
    TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
    TIM_ICInitStructure.TIM_Channel = TIM_Channel_2;
    TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
    TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
//    TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV2;
    TIM_ICInitStructure.TIM_ICFilter = 0x0;
    TIM_PWMIConfig(TIM2, &TIM_ICInitStructure);
    /* Select the TIM2 Input Trigger: TI2FP2 */
    TIM_SelectInputTrigger(TIM2, TIM_TS_TI2FP2);
    /* Select the slave Mode: Reset Mode */
    TIM_SelectSlaveMode(TIM2, TIM_SlaveMode_Reset);
    /* Enable the Master/Slave Mode */
    TIM_SelectMasterSlaveMode(TIM2, TIM_MasterSlaveMode_Enable);
    TIM_Cmd(TIM2, ENABLE);
}

void calc_bar_code_media(void)
{
    NVIC_InitTypeDef         NVIC_InitStructure;

    NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 200;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 200;
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
    NVIC_Init(&NVIC_InitStructure);
    TIM_Cmd(TIM2, ENABLE);
    TIM_ITConfig(TIM2, TIM_IT_CC2, ENABLE);
}

unsigned int bar_count;
void TIM2_IRQHandler(void)
{
    extern struct BAR bar_time[BAR_RECODE];

    if (TIM_GetITStatus(TIM2, TIM_IT_CC2) != RESET)
    {
        TIM_ClearITPendingBit(TIM2, TIM_IT_CC2);
        /* Get the Input Capture value */
        bar_time[bar_count].cycle  = TIM_GetCapture2(TIM2);
        /* Duty cycle computation */
        bar_time[bar_count].duty   = TIM_GetCapture1(TIM2);
        bar_count++;
    }
}

使用特权

评论回复
7
huzi2099| | 2014-2-25 09:39 | 只看该作者
捕获功能就是干这个的,功能上肯定可以,频率和脉宽在合理的范围就没有问题了

使用特权

评论回复
8
startostar|  楼主 | 2014-2-25 10:15 | 只看该作者
huzi2099 发表于 2014-2-25 09:39
捕获功能就是干这个的,功能上肯定可以,频率和脉宽在合理的范围就没有问题了 ...

谢谢楼上

使用特权

评论回复
9
startostar|  楼主 | 2014-2-25 10:22 | 只看该作者
wallace_tsou 发表于 2014-2-25 09:34
个人使用来做为bar code解码。
和你要的类似。

thanks

使用特权

评论回复
10
startostar|  楼主 | 2014-2-25 11:05 | 只看该作者
香水城主 发表于 2014-2-24 11:19
画个图,举个例子说明你希望实现的功能。

流程:要先设置上升下降沿都捕获方式识别出幁头10~12,换成比较模式,接收有效数据D1,换成捕获方式识别出小幁头2,换成比较模式,接收有效数据D2
                                                                                     换成捕获方式识别出小幁头4,换成比较模式,接收有效数据D3........

                                                                         STM32F103能实现吗?

使用特权

评论回复
11
香水城主| | 2014-2-25 11:11 | 只看该作者
10楼已经给出了答案,肯定可以实现的,:lol:lol:lol

使用特权

评论回复
12
startostar|  楼主 | 2014-2-25 11:46 | 只看该作者
香水城主 发表于 2014-2-25 11:11
10楼已经给出了答案,肯定可以实现的,

STM32F103怎么设置成上升沿和下降沿都捕获的方式?去捕捉高电平,我印象中只支持上升或下降?

使用特权

评论回复
13
wallace_tsou| | 2014-2-25 18:03 | 只看该作者
另一個方法是將前導信號也當成 一個字。只是基頻不同,利用改變基頻的方式去做二個不同模式的切換。

使用特权

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

本版积分规则

1

主题

30

帖子

1

粉丝