STM32F105用16M晶振,移植FreeRTOS,时间不准
本帖最后由 1sfsfsadfa 于 2019-6-5 09:30 编辑1、将STM32F1的库函数晶振配置的地方修改。如图
2、Systick定时器初始化。
3、FreeRTOS时钟节拍设置为 #define configTICK_RATE_HZ (1000) //时钟节拍频率,这里设置为1000,周期就是1ms
4、通过任务调度,发现时钟节拍时间不对。
5、理论上我要定时在1s一次。
求助大佬帮忙看看。
16/2*5 = 40 40/5=8 8*9=72这个是你在system_stm32f10x.c需要进行修改的
你还需要把stm32f10x.h里面的HSE_VALUE修改为16M
完成上述工作之后你的时基就是准确的72M,这样你的RTOS的时间就准了。 3111272 发表于 2019-6-5 09:39
16/2*5 = 40 40/5=8 8*9=72这个是你在system_stm32f10x.c需要进行修改的
你还需要把stm32f10x.h里面的HSE ...
上述情况是我已经改了#define HSE_VALUE ((uint32_t)16000000) /*!< Value of the External oscillator in Hz */ 系统时钟的配置需要修改几个文件,本贴供楼主参考:
https://www.stmcu.org.cn/module/forum/thread-614091-1-1.html 本帖最后由 toofree 于 2019-6-12 15:45 编辑
不准就不准呗,带操作系统的软件定时都不准,大体上没问题就行了。要准的话,用硬件定时器中断方式。
上位机不是实时系统,在串口界面显示的时间误差本来就大。要想得到准确的时间,请用逻辑分析仪抓数据波形。
看定时准不准,不能在USB的上位机那里看。 现在的SSCOM显示的情况是正常的。
要比较准确的检查定时,简单写个1秒钟翻转的GPIO,然后用示波器或频率计检查。 一切时序问题以示波器、逻辑分析仪为准 radio2radio 发表于 2019-6-12 13:05
看定时准不准,不能在USB的上位机那里看。 现在的SSCOM显示的情况是正常的。
要比较准确的检查定时,简单 ...
好方法。方便。 #ifdef STM32F10X_CL
// /* Configure PLLs ------------------------------------------------------*/
// /* PLL2 configuration: PLL2CLK = (HSE / 2) * 8 = 64 MHz */
// /* PREDIV1 configuration: PREDIV1CLK = PLL2 / 8 = 8 MHz */
//
// RCC->CFGR2 &= (uint32_t)~(RCC_CFGR2_PREDIV2 | RCC_CFGR2_PLL2MUL |
// RCC_CFGR2_PREDIV1 | RCC_CFGR2_PREDIV1SRC);
// RCC->CFGR2 |= (uint32_t)(RCC_CFGR2_PREDIV2_DIV2 | RCC_CFGR2_PLL2MUL8 |
// RCC_CFGR2_PREDIV1SRC_PLL2 | RCC_CFGR2_PREDIV1_DIV8);
//
// /* Enable PLL2 */
// RCC->CR |= RCC_CR_PLL2ON;
// /* Wait till PLL2 is ready */
// while((RCC->CR & RCC_CR_PLL2RDY) == 0)
// {
// }
//
//
// /* PLL configuration: PLLCLK = PREDIV1 * 9 = 72 MHz */
// RCC->CFGR &= (uint32_t)~(RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLSRC | RCC_CFGR_PLLMULL);
// RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1 | RCC_CFGR_PLLSRC_PREDIV1 |
// RCC_CFGR_PLLMULL9);
RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_PLLSRC | RCC_CFGR_PLLXTPRE | RCC_CFGR_PLLMULL));
RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLXTPRE_PREDIV1_Div2 | RCC_CFGR_PLLSRC_PREDIV1 | RCC_CFGR_PLLMULL9);
#else
结贴!!直接system_stm32f10x.c文件的1030行的#if 处就好了
页:
[1]