|
因为我连接adc的引脚cnv 并不是 TIM12 因此我需要两个定时器做一个同步,我的操作是是开启一个主定时器然后再开启两个从定时器,当前现象是可以观察两个从定时器波形一致,但并没有产生spi+dma的数据搬运
代码如下:
主定时器
/*====================== Master configuration : TIM4 =======================*/
TimMasterHandle.Init.Period = usPeriod;
TimMasterHandle.Init.Prescaler = 0;
TimMasterHandle.Init.ClockDivision = 0;
TimMasterHandle.Init.CounterMode = TIM_COUNTERMODE_UP;
TimMasterHandle.Init.RepetitionCounter = 0;
if (HAL_TIM_PWM_Init(&TimMasterHandle) != HAL_OK)
{
/* Initialization Error */
Error_Handler(__FILE__, __LINE__);
}
/* Configure the PWM_channel_1 */
sOCConfig.OCMode = TIM_OCMODE_PWM1;
sOCConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sOCConfig.Pulse = pulse;
sOCConfig.OCNPolarity = TIM_OCNPOLARITY_HIGH;
sOCConfig.OCFastMode = TIM_OCFAST_DISABLE;
sOCConfig.OCIdleState = TIM_OCIDLESTATE_RESET;
sOCConfig.OCNIdleState = TIM_OCNIDLESTATE_RESET;
if (HAL_TIM_PWM_ConfigChannel(&TimMasterHandle, &sOCConfig, TIM_CHANNEL_1) != HAL_OK)
{
/* Configuration Error */
Error_Handler(__FILE__, __LINE__);
}
/* Configure TIM1 as master & use the update event as Trigger Output (TRGO) */
sMasterConfig.MasterOutputTrigger = TIM_TRGO_ENABLE;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&TimMasterHandle, &sMasterConfig) != HAL_OK)
{
/* Configuration Error */
Error_Handler(__FILE__, __LINE__);
}
/*================== End of Master configuration : TIM4 ====================*/
从定时器 这个定时器接adc芯片的cnv
/*====================== Slave1 configuration : TIM1 =======================*/
/* Initialize TIM4 peripheral in PWM mode*/
TimSlave1Handle.Init.Period = usPeriod;
TimSlave1Handle.Init.Prescaler = 0;
TimSlave1Handle.Init.ClockDivision = 0;
TimSlave1Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
TimSlave1Handle.Init.RepetitionCounter = 0;
if (HAL_TIM_PWM_Init(&TimSlave1Handle) != HAL_OK)
{
/* Initialization Error */
Error_Handler(__FILE__, __LINE__);
}
/* Configure the PWM_channel_4 */
sOCConfig.OCMode = TIM_OCMODE_PWM1;
sOCConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sOCConfig.Pulse = pulse;
if (HAL_TIM_PWM_ConfigChannel(&TimSlave1Handle, &sOCConfig, TIM_CHANNEL_4) != HAL_OK)
{
/* Configuration Error */
Error_Handler(__FILE__, __LINE__);
}
/* Configure TIM3 in Gated slave mode & use the Internal Trigger 0 (ITR3) as trigger source */
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_ITR3;
sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_NONINVERTED;
sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;
sSlaveConfig.TriggerFilter = 0;
if (HAL_TIM_SlaveConfigSynchronization(&TimSlave1Handle, &sSlaveConfig) != HAL_OK)
{
/* Configuration Error */
Error_Handler(__FILE__, __LINE__);
}
/*====================== Slave2 configuration : TIM12 =======================*/
/* Initialize TIM4 peripheral in PWM mode*/
TimSlave2Handle.Init.Period = usPeriod;
TimSlave2Handle.Init.Prescaler = 0;
TimSlave2Handle.Init.ClockDivision = 0;
TimSlave2Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
TimSlave2Handle.Init.RepetitionCounter = 0;
if (HAL_TIM_PWM_Init(&TimSlave2Handle) != HAL_OK)
{
/* Initialization Error */
Error_Handler(__FILE__, __LINE__);
}
/* Configure the PWM_channel_1 */
sOCConfig.OCMode = TIM_OCMODE_PWM1;
sOCConfig.OCPolarity = TIM_OCPOLARITY_HIGH;
sOCConfig.Pulse = pulse;
if (HAL_TIM_PWM_ConfigChannel(&TimSlave2Handle, &sOCConfig, TIM_CHANNEL_1) != HAL_OK)
{
/* Configuration Error */
Error_Handler(__FILE__, __LINE__);
}
sSlaveConfig.SlaveMode = TIM_SLAVEMODE_TRIGGER;
sSlaveConfig.InputTrigger = TIM_TS_ITR0;
if (HAL_TIM_SlaveConfigSynchronization(&TimSlave2Handle, &sSlaveConfig) != HAL_OK)
{
/* Initialization Error */
Error_Handler(__FILE__, __LINE__);
}
/* 同时tim12的下降沿触发 spi+dma 采样 */
sMasterConfig.MasterOutputTrigger = TIM_TRGO_OC1REF;
// sMasterConfig.MasterOutputTrigger2 = TIM_TRGO2_RESET;
sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;
if (HAL_TIMEx_MasterConfigSynchronization(&TimSlave2Handle, &sMasterConfig) != HAL_OK)
{
/* Configuration Error */
Error_Handler(__FILE__, __LINE__);
}
/*================== End of Slave2 configuration : TIM12 ====================*/
/* 开启PWM */
if (HAL_TIM_PWM_Start(&TimMasterHandle, TIM_CHANNEL_1) != HAL_OK)
{
/* Initialization Error */
Error_Handler(__FILE__, __LINE__);
}
/* Start Slave1 PWM generation */
if (HAL_TIM_PWM_Start(&TimSlave1Handle, TIM_CHANNEL_4) != HAL_OK)
{
/* PWM generation Error */
Error_Handler(__FILE__, __LINE__);
}
/* Start Slave2 PWM generation */
if (HAL_TIM_PWM_Start(&TimSlave2Handle, TIM_CHANNEL_1) != HAL_OK)
{
/* PWM generation Error */
Error_Handler(__FILE__, __LINE__);
然后spi+dma的配置如图所示:
然后我还有个问题是 TIM12触发配置 如果我想要的是下降沿采集我应该如何配置
求助求助 因为是第一次弄SPI+DMA+ADC
|
|