|
外置晶振是8M,使用最高的系统时钟168M,然后使用定时器TIM8作为定时器更新中断,程序的寄存器PLL_N = 336;PLL_P = 2;PLL_M = 8;要配置一个16KHz,也即是周期为62.5us的中断,但是实际测试出来就是查了一点,利用一进入中断置GPIO的方式测试,示波器实测63.2us,也试过用Uint64的计数器,测试13分钟,测试记录到的值和理论值相差7.9s左右,所以是排除了程序置GPIO所用的时间导致的,实在查不出那儿的问题,望大神们指教一下: 如果配置成125us,实测126us,总是达不到理论的周期。定时器的配置: TIM_TimeBaseStructure.TIM_Prescaler = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3; TIM_TimeBaseStructure.TIM_Period = 10500; TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_RepetitionCounter = 0; TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure); |
STM32CubeMX配置STM32F103C8T6 RTC分频器问题
STM32F405rgt6 I2S DMA输入会造成卡死,这个芯片有BUG
STM32G473,PA3导致定时器定时误差过大
USBX在F407上创建CDC不能正常使用
定时器输出PWM控制电机的问题
有使用过POWERBUS二总线芯片的吗
stm32u575 gpdma burst length=1 配置其他数值不工作
STM32F427ZGTx内部RTC秒及亚秒同步问题
有没有STM32F405RG参考设计
TIM 单脉冲输出后的电平如何设置?
微信公众号
手机版
[md]我这边就两种方式都实测过。
基于外部8MHz晶振作为时钟源,利用定时器和GPIO翻转得到的输出非常准而稳。
基于内部16MHz HSI作为时钟源,利用定时器和GPIO翻转得到的输出也很准、稳,相比上面
稍微有点抖动,0 ~ 0.5us的样子。 我这边通过示波器测量和观察。
10500这个修改为10500 - 1,试一下。
试过了,没有多大用,起码改为10500-100才接近62.5us
从配置上看:
Auto-reload register (TIMx_ARR) 这个寄存器的值,也就是 TIM_TimeBaseStructure.TIM_Period = 10500; 应该减1。
TIM_TimeBaseStructure.TIM_Prescaler = 0;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_CenterAligned3;
TIM_TimeBaseStructure.TIM_Period = 10500-1;
TIM_TimeBaseStructure.TIM_ClockDivision = 0;
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;
TIM_TimeBaseInit(TIM8, &TIM_TimeBaseStructure);
我这边测试非常准,你现在有问题。要么你时钟有问题,
要么你的测量有问题。
感谢你的回答,我尝试过用内部晶振16Mhz作为pll输入,就准确了,也就是说明是我的外部晶振不准吗?因为外部晶振频率很难用示波器测试,示波器夹上去就波形都是不稳定的。
[md]感谢回答,我把我的贴片晶振换成直插式那种晶振就好了,没想到差别这么大,贴片的晶振不准确啊.....
你好,还有个问题想请教一下的,就是我的TIM的周期值是10499,中心对齐模式,不分频,10500*84Mhz = 8Khz,,为什么我测试出来是16Khz呢? 代码是和上面的一样,谢谢