外置晶振是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); |
STM32哪款单片机已使用CMSIS-FreeRTOS实现FreeRTOS例程?
求助:PMSM电机编码器线数(分辨率)为80000线,超过MCSDK5.4.8软件所能设置的最大线数65535,请问如何解决
Boot0通过10k电阻接地,Boot1作为输入使用被配置成外部中断,现在存在的问题是可能会导致单片机加密无法运行,且无法解密,RDP显示为FF,这是怎么导致的?
STM32F401下载失败问题
STM32CubeMX生成FreeRTOS MDK版本无法使用AC6编译器
外部中断升降沿类型判断
定时器正交编码器功能
STM32F427串口接收和发送中断同时使能,出现接收中断丢数的现象。
为什么生成代码时一直卡在generating user source code 救救孩子吧。
easylogger打印失败
[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呢? 代码是和上面的一样,谢谢