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 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
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 编辑引用: wdliming 发表于 2019-9-18 12:07
请问这么配置可以吗??我是F103的
引用: littleshrimp 发表于 2019-9-18 12:45 两个图的trigger source怎么不一样
我试了两种方式,都不行的
littleshrimp 发表于 2019-9-18 12:45 两个图的trigger source怎么不一样
而且是安照你的配置,我参考了,也是不行。不知为什么??
本帖最后由 wdliming 于 2019-9-18 12:47 编辑引用: wdliming 发表于 2019-9-18 12:46
littleshrimp 发表于 2019-9-18 12:45 两个图的trigger source怎么不一样
而且是安照你的配置,我参 ...
引用: 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;
}
引用: 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();
}
}
引用: 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的。
引用: 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);
//的上边试试
引用: littleshrimp 发表于 2019-9-18 15:05 //你把 htim5.State = HAL_TIM_STATE_READY; //放在 HAL_TIM_IC_Sta ...
好的
我试试看!!
引用: littleshrimp 发表于 2019-9-18 15:05 //你把 htim5.State = HAL_TIM_STATE_READY; //放在 HAL_TIM_IC_Sta ...
还是没有成功。。
引用: wdliming 发表于 2019-9-18 15:47
还是没有成功。。
引用: wdliming 发表于 2019-9-18 15:47
还是没有成功。。