实现功能:STM32上升沿触发开启定时器,延时5us后在相应通道输出脉冲信号
做 法:使用STM32定时器单脉冲方式
问 题:用示波器观察延时精度,在时间轴上存在~15ns抖动
请问有没有可能完全去除抖动或者竟可能减小抖动,定时器相应的配置如下:
[mw_shl_code=applescript,true]void Onepulse_TIM4_Init(u16 arr,u16 psc)
{
//此部分需手动修改IO口设置
RCC->APB1ENR|=1<<2; //TIM14时钟使能
RCC->AHB1ENR|=1<<1; //使能PORTB时钟
//GPIO B6,B7初始化设置
GPIO_AF_Set(GPIOB,6,2); //PB6复用定时器4
GPIO_Set(GPIOB,PIN6,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
GPIO_Set(GPIOB,PIN7,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
GPIO_AF_Set(GPIOB,7,2); //PB7复用定时器4
GPIO_Set(GPIOB,PIN8,GPIO_MODE_AF,GPIO_OTYPE_PP,GPIO_SPEED_100M,GPIO_PUPD_PU);//复用功能,上拉输出
GPIO_AF_Set(GPIOB,8,2); //PB8复用定时器4
/*---------------------------------------------------------------
TIM4定时器时钟为 84M
TIM4_CH2配置成输入捕获模式 TIM4_CH1配置为PWM2输出模式
TIM4_CH2检测到一个上升沿后,经过一定的延时时间,输出一个脉冲
PWM2模式增计数下,计数值小于比较值为无效电平及低电平
-----------------------------------------------------------------*/
TIM4->CR1|=1<<3; //选择定时器为单脉冲模式
TIM4->SMCR|=6<<4; //选择触发源为IC2
TIM4->SMCR|=6<<0; //(触发模式),使用 TI2FP2 启动计数器
//-------------------------------------------------------------------------
//TIM4->CCMR1|=1<<2; //不延时输出
//--------------------------------------------------------------------------
//定时器设置
TIM4->ARR=arr; //设定计数器自动重装值
TIM4->PSC=psc; //预分频器
TIM4->CR1|=0<<8; //不分频
TIM4->CR1|=0<<4; //增计数模式
//输入配置
TIM4->CCMR1|=1<<8; //CC2S=01 选择输入端 IC2映射到TI2上
TIM4->CCER|=0<<5; //CC2P=0 上升沿捕获 CC2P=1 下降沿捕获
TIM4->CCMR1|=0<<12; //IC2F=0000 配置输入滤波器 不滤波
TIM4->CCMR1|=0<<10; //IC2PS=00 配置输入分频,不分频
TIM4->CCER|=0<<7; //CC2NP=0
TIM4->CCER|=1<<4; //CC2E=1 允许捕获计数器的值到捕获寄存器中
//输出配置
TIM4->CCMR1|=7<<4; //CH1 PWM2模式
TIM4->CCMR1|=1<<3; //CH1 预装载使能
TIM4->CCER|=1<<0; //OC1 输出使能
TIM4->CCER|=0<<1; //OC1 高电平有效
//输出配置CH3
TIM4->CCMR2|=7<<4; //CH1 PWM2模式
TIM4->CCMR2|=1<<3; //CH1 预装载使能
TIM4->CCER|=1<<8; //OC3 输出使能
TIM4->CCER|=0<<9; //OC3 高电平有效
TIM4->CR1|=1<<7; //ARPE使能
}
[/mw_shl_code]
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
先检查下你的初始化代码,然后再看下是不是你的其他任务太多挤占了CPU,没有全部代码和环境,不好下结论。
一周热门 更多>