你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f407 TIM输入捕获 使用DMA获取pwm周期怎么配置?

[复制链接]
ccxzjz 提问时间:2020-12-3 10:45 /
请教各位,使用stm32f407VET6 用的TIM1  脉冲输入引脚为PA11(TIM1_CH4),目前已实现中断读取CC4的数值,因为中断太频繁想改用DMA获取的方法,不知道怎么操作?
TIM_HandleTypeDef  TIM_PWMINPUT_Handle;
DMA_HandleTypeDef TIM_DMA_Handle;

uint32_t IC4_value[2];
//定时器配置
static void TIM_PWMINPUT_Config(void)
{
    TIM_IC_InitTypeDef TIM_ICInitStructure;
    TIM_SlaveConfigTypeDef TIM_SlaveConfigStructure;

    __TIM1_CLK_ENABLE();
    TIM_PWMINPUT_Handle.Instance = TIM1;
    TIM_PWMINPUT_Handle.Init.Period = 0xFFFF;
// 高级控制定时器时钟源 TIMxCLK = HCLK=168MHz
// 设定定时器频率为=TIMxCLK/(TIM_Prescaler+1)=1MHz
    TIM_PWMINPUT_Handle.Init.Prescaler = 168 - 1;
    TIM_PWMINPUT_Handle.Init.ClockDivision = 0;
    TIM_PWMINPUT_Handle.Init.CounterMode = TIM_COUNTERMODE_UP;
    HAL_TIM_IC_Init(&TIM_PWMINPUT_Handle);

    TIM_ICInitStructure.ICPolarity = TIM_ICPOLARITY_RISING;
    TIM_ICInitStructure.ICSelection = TIM_ICSELECTION_DIRECTTI;
    TIM_ICInitStructure.ICPrescaler = TIM_ICPSC_DIV1;
    TIM_ICInitStructure.ICFilter = 0x0;
    HAL_TIM_IC_ConfigChannel(&TIM_PWMINPUT_Handle, &TIM_ICInitStructure, TIM_CHANNEL_4);
//    HAL_TIM_IC_Start_IT(&TIM_PWMINPUT_Handle, TIM_CHANNEL_4);   
}


//DMA配置
void tim_dma_config(void)
{
    __DMA2_CLK_ENABLE();
    TIM_DMA_Handle.Instance = DMA2_Stream4;
    TIM_DMA_Handle.Init.Channel = DMA_CHANNEL_6;
    TIM_DMA_Handle.Init.Direction = DMA_PERIPH_TO_MEMORY;
    TIM_DMA_Handle.Init.PeriphInc = DMA_PINC_DISABLE;
    TIM_DMA_Handle.Init.MemInc = DMA_MINC_ENABLE;
    TIM_DMA_Handle.Init.PeriphDataAlignment = DMA_MDATAALIGN_WORD;
    TIM_DMA_Handle.Init.MemDataAlignment = DMA_MDATAALIGN_WORD;
    TIM_DMA_Handle.Init.Mode = DMA_CIRCULAR;
    TIM_DMA_Handle.Init.Priority = DMA_PRIORITY_MEDIUM;
    TIM_DMA_Handle.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
    TIM_DMA_Handle.Init.FIFOThreshold = DMA_FIFO_THRESHOLD_FULL;
    TIM_DMA_Handle.Init.MemBurst = DMA_MBURST_SINGLE;
    TIM_DMA_Handle.Init.PeriphBurst = DMA_PBURST_SINGLE;

    __HAL_LINKDMA(&TIM_PWMINPUT_Handle,hdma[TIM_DMA_ID_CC4], TIM_DMA_Handle);

    HAL_DMA_Init(TIM_PWMINPUT_Handle.hdma[TIM_DMA_ID_CC4]);
    HAL_TIM_IC_Start_DMA(&TIM_PWMINPUT_Handle,TIM_CHANNEL_4,&IC4_value,4);
//    HAL_NVIC_EnableIRQ(DMA2_Stream4_IRQn);

}


接下来,在主函数不断读取IC4_value的值明显不对。请教大家有没有错






收藏 评论2 发布时间:2020-12-3 10:45

举报

2个回答
ccxzjz 回答时间:2020-12-8 08:29:03
自己顶,求大神解惑
小歆-2051663 回答时间:2020-12-8 10:08:16
建议使用CubeMX配置
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版