完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的目的是定时按10K的频率往串口送数,计算这边根据的到的数的个数来计时。
发现定时器快了。也就是说定时器中断触发的频率不止10K,运行大概200来秒可能超出一秒。 部分代码如下: void tiM1_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //ʱÖÓʹÄÜ TIM_TimeBaseStructure.TIM_Period = 7199; //ÉèÖÃÔÚÏÂÒ»¸ö¸üÐÂʼþ×°Èë»î¶¯µÄ×Ô¶¯ÖØ×°ÔؼĴæÆ÷ÖÜÆÚµÄÖµ TIM_TimeBaseStructure.TIM_Prescaler =0; //ÉèÖÃÓÃÀ´×÷ΪTIMxʱÖÓƵÂʳýÊýµÄÔ¤·ÖƵֵ TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //ÉèÖÃʱÖÓ·Ö¸î:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIMÏòÉϼÆÊýģʽ TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //¸ù¾ÝÖ¸¶¨µÄ²ÎÊý³õʼ»¯TIMxµÄʱ¼ä»ùÊýµ¥Î» TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); TIM_Cmd(TIM1, ENABLE); TIM_ClearFlag(TIM1,TIM_FLAG_Update ); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn; //TIM3ÖÐ¶Ï NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2; //ÏÈÕ¼ÓÅÏȼ¶0¼¶ NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //´ÓÓÅÏȼ¶3¼¶ NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQͨµÀ±»Ê¹ÄÜ NVIC_Init(&NVIC_InitStructure); //³õʼ»¯NVIC¼Ä´æÆ÷ } void TIM1_UP_IRQHandler(void) //TIM21ÖÐ¶Ï { //m_counter1=TIM_GetCounter(TIM1); if(TIM_GetITStatus(TIM1, TIM_IT_Update) != RESET ) /*??TIM3????????*/ { TIM_ClearITPendingBit(TIM1, TIM_IT_Update ); //Çå³ýTIMx¸üÐÂÖжϱêÖ¾ USART1->DR=0x55; while((USART1->SR&0X40)==0); } } 经过我仔细分析,问题可能在于晶振误差,但是我后来通过示波器观测,排除了。 最后解决办法很奇怪。不知道是为什么。 在中断开始的地方加//m_counter1=TIM_GetCounter(TIM1); 发现值为0x001F左右,不一定,也就是说刚进中断,计数器已经记了一些数了。不知道是不是这个问题导致的时间精度误差。 不过该现象我百思不得解决办法,请高手说下。 |
|
相关推荐
5个回答
|
|
把输出改为IO口反转,示波器测试波形。
|
|
|
|
优先级设成最高
|
|
|
|
内部时钟本来就不是精准的
|
|
|
|
|
|
按照晶振的误差20个ppm的算的话,也不至于吧。
另外,我发现这个是一个累积误差,不是一下子差那么多。 我的想法是,难道以前51的定时都可以这么准。stm32 做不到吗? 同样的我用51单片机做的这个一样功能很准的10000秒差不了1秒的。 现在已经要奔溃了,难道没有解决办法。 而且有的时候,又会比较准。 我再定时中断里,强行把TIM_SetCounter(TIM1,0); 计数器再设为0 发现最后定时累积下来反而慢了。 |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
621 浏览 1 评论
1962 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1068 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1487 浏览 1 评论
LL库F030进行3个串口收发,2个串口为232,一个为485,长时间后,会出现串口1停止运行,另外两个正常,只有重启复原
1924 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 13:15 , Processed in 0.641277 second(s), Total 81, Slave 64 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号