感恩无私的分享与奉献
点赞  2019-9-17 12:52

  HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_2,cp2,10);

  htim2.State = HAL_TIM_STATE_READY;

  HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_1,cp1,10);

  htim2.State = HAL_TIM_STATE_READY;

 

这样是吧,谢谢分享~~

点赞  2019-9-17 12:56
引用: wdliming 发表于 2019-9-17 12:56   HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_2,cp2,10);   htim2.State =&n ...

这样可以,其实如果执行完HAL_TIM_IC_Start_DMA后不需要再配置State = HAL_TIM_STATE_READY

所以在大于第二次的前边放一句State = HAL_TIM_STATE_READY就可以

为了方便可也可以在每次执行HAL_TIM_IC_Start_DMA前都配置一下State = HAL_TIM_STATE_READY

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-9-17 14:41
littleshrimp 发表于 2019-9-17 14:41 这样可以,其实如果执行完HAL_TIM_IC_Start_DMA后不需要再配置State = HAL_TIM_STATE_READY ...

首先谢谢分享,已经按照楼主的方法,每隔100ms开启测试一次频率,即每隔100ms调用一次

HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_2,cp2,10);

  htim2.State = HAL_TIM_STATE_READY;

  HAL_TIM_IC_Start_DMA(&htim2,TIM_CHANNEL_1,cp1,10);

  htim2.State = HAL_TIM_STATE_READY;

可以采样了。

本帖最后由 wdliming 于 2019-9-17 17:16 编辑
点赞  2019-9-17 17:03
今天我实验了,有不行了。很奇怪。
点赞  2019-9-18 12:06

image.png

请问这么配置可以吗??我是F103的

点赞  2019-9-18 12:07

image.png

还是说要这么配置??

dma我都是这么配置的

image.png

image.png 请问这么到底是怎么配置的,今天实验了不行了。奇怪

点赞  2019-9-18 12:10
引用: wdliming 发表于 2019-9-18 12:07
请问这么配置可以吗??我是F103的

两个图的trigger source怎么不一样
点赞  2019-9-18 12:45
引用: littleshrimp 发表于 2019-9-18 12:45 两个图的trigger source怎么不一样

我试了两种方式,都不行的

点赞  2019-9-18 12:45
littleshrimp 发表于 2019-9-18 12:45 两个图的trigger source怎么不一样

而且是安照你的配置,我参考了,也是不行。不知为什么??

本帖最后由 wdliming 于 2019-9-18 12:47 编辑
点赞  2019-9-18 12:46
引用: wdliming 发表于 2019-9-18 12:46
littleshrimp 发表于 2019-9-18 12:45 两个图的trigger source怎么不一样


而且是安照你的配置,我参 ...

tim srart代码怎么写的?
点赞  2019-9-18 13:41
引用: littleshrimp 发表于 2019-9-18 13:41 tim srart代码怎么写的?

void Water_PWM_Detect_Enable(void)
{
    HAL_TIM_IC_Start_DMA(&htim5, TIM_CHANNEL_1, (uint32_t *)cp1, 2);
    htim5.State = HAL_TIM_STATE_READY;
}

void FUEL_PWM_Detect_Enable(void)
{
    HAL_TIM_IC_Start_DMA(&htim5, TIM_CHANNEL_2, (uint32_t *)cp2, 2);
    htim5.State = HAL_TIM_STATE_READY;
}

点赞  2019-9-18 13:48
引用: littleshrimp 发表于 2019-9-18 13:41 tim srart代码怎么写的?

/* TIM5 init function */
void MX_TIM5_Init(void)
{
    TIM_ClockConfigTypeDef sClockSourceConfig = {0};
    TIM_SlaveConfigTypeDef sSlaveConfig = {0};
    TIM_MasterConfigTypeDef sMasterConfig = {0};
    TIM_IC_InitTypeDef sConfigIC = {0};

    htim5.Instance = TIM5;
    htim5.Init.Prescaler = 71;
    htim5.Init.CounterMode = TIM_COUNTERMODE_UP;
    htim5.Init.Period = 65535;
    htim5.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;
    htim5.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_DISABLE;
    if (HAL_TIM_Base_Init(&htim5) != HAL_OK)
    {
        Error_Handler();
    }
    sClockSourceConfig.ClockSource = TIM_CLOCKSOURCE_INTERNAL;
    if (HAL_TIM_ConfigClockSource(&htim5, &sClockSourceConfig) != HAL_OK)
    {
        Error_Handler();
    }
    if (HAL_TIM_IC_Init(&htim5) != HAL_OK)
    {
        Error_Handler();
    }
    sSlaveConfig.SlaveMode = TIM_SLAVEMODE_RESET;
    sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;
    sSlaveConfig.TriggerPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
    sSlaveConfig.TriggerFilter = 0;
    if (HAL_TIM_SlaveConfigSynchro(&htim5, &sSlaveConfig) != HAL_OK)
    {
        Error_Handler();
    }
    sMasterConfig.MasterOutputTrigger = TIM_TRGO_RESET;
    sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
    if (HAL_TIMEx_MasterConfigSynchronization(&htim5, &sMasterConfig) != HAL_OK)
    {
        Error_Handler();
    }
    sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING;
    sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
    sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
    sConfigIC.ICFilter = 0;
    if (HAL_TIM_IC_ConfigChannel(&htim5, &sConfigIC, TIM_CHANNEL_1) != HAL_OK)
    {
        Error_Handler();
    }

}

点赞  2019-9-18 13:49
引用: littleshrimp 发表于 2019-9-18 13:41 tim srart代码怎么写的?

dma默认开启中断的,

然后我tim5也开启中断了。

dma模式是normal模式,在任务中,每隔1000ms调用下面的两个函数:

void Water_PWM_Detect_Enable(void)
{
    HAL_TIM_IC_Start_DMA(&htim5, TIM_CHANNEL_1, (uint32_t *)cp1, 2);
    htim5.State = HAL_TIM_STATE_READY;
}

void FUEL_PWM_Detect_Enable(void)
{
    HAL_TIM_IC_Start_DMA(&htim5, TIM_CHANNEL_2, (uint32_t *)cp2, 2);
    htim5.State = HAL_TIM_STATE_READY;
}

如果分开两个定时器去做,是可以的,但是想集中在一个定时器,现在就不行,不知道是mx配置哪里出错? 我现在只是采样两个通道的频率,不去QQ占空比的,trigger source应该怎么填写?如果填写TI1FP1的话,就只能触发通道1是吗??

楼主我看你配置都是disable的。

点赞  2019-9-18 13:54

tim.7z (6.17 MB)
(下载次数: 2, 2019-9-18 13:56 上传)

请帮忙看下,谢谢~~
 

点赞  2019-9-18 13:57
引用: wdliming 发表于 2019-9-18 13:57 请帮忙看下,谢谢~~  

//你把
    htim5.State = HAL_TIM_STATE_READY;

//放在

    HAL_TIM_IC_Start_DMA(&htim5, TIM_CHANNEL_1, (uint32_t *)cp1, 2);

//的上边试试

虾扯蛋,蛋扯虾,虾扯蛋扯虾
点赞  2019-9-18 15:05
引用: littleshrimp 发表于 2019-9-18 15:05 //你把     htim5.State = HAL_TIM_STATE_READY; //放在     HAL_TIM_IC_Sta ...

好的

我试试看!!

点赞  2019-9-18 15:17
引用: littleshrimp 发表于 2019-9-18 15:05 //你把     htim5.State = HAL_TIM_STATE_READY; //放在     HAL_TIM_IC_Sta ...

还是没有成功。。

点赞  2019-9-18 15:47
引用: wdliming 发表于 2019-9-18 15:47
还是没有成功。。

不行你再对比一下之前好用的代码 或者重建一个新工程试试
点赞  2019-9-18 16:27
引用: wdliming 发表于 2019-9-18 15:47
还是没有成功。。

再试试硬件上把两个通道连接在一起
通过读取GPIO的方式确定信号已经正确传入单片机
点赞  2019-9-18 16:29
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复