你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F105用16M晶振,移植FreeRTOS,时间不准

[复制链接]
MYlokssa 提问时间:2019-6-5 09:28 /
本帖最后由 1sfsfsadfa 于 2019-6-5 09:30 编辑

1、将STM32F1的库函数晶振配置的地方修改。如图
[QV5M{ATTH3XTQ_%JTADMLU.png
2、Systick定时器初始化。
W1Q8IS}_EIRN03CG{28DZ_Y.png
3、FreeRTOS时钟节拍设置为 #define configTICK_RATE_HZ      (1000)                  //时钟节拍频率,这里设置为1000,周期就是1ms
4、通过任务调度,发现时钟节拍时间不对。
4FA940YN2H((~67X@3J6U11.png
5、理论上我要定时在1s一次。
%$MSE~D([DK~OI[21`Z%JH9.png
求助大佬帮忙看看。
收藏 评论9 发布时间:2019-6-5 09:28

举报

9个回答
3111272 回答时间:2019-6-5 09:39:29
16/2*5 = 40   40/5=8 8*9=72这个是你在system_stm32f10x.c需要进行修改的
你还需要把stm32f10x.h里面的HSE_VALUE修改为16M

完成上述工作之后你的时基就是准确的72M,这样你的RTOS的时间就准了。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

MYlokssa 回答时间:2019-6-5 09:46:23
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 */
wenyangzeng 回答时间:2019-6-12 09:56:47
系统时钟的配置需要修改几个文件,本贴供楼主参考:

https://www.stmcu.org.cn/module/forum/thread-614091-1-1.html

评分

参与人数 1蝴蝶豆 +3 收起 理由
STMCU + 3

查看全部评分

七哥 回答时间:2019-6-12 12:13:15
本帖最后由 toofree 于 2019-6-12 15:45 编辑

不准就不准呗,带操作系统的软件定时都不准,大体上没问题就行了。要准的话,用硬件定时器中断方式。
上位机不是实时系统,在串口界面显示的时间误差本来就大。要想得到准确的时间,请用逻辑分析仪抓数据波形。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

radio2radio 回答时间:2019-6-12 13:05:35
看定时准不准,不能在USB的上位机那里看。 现在的SSCOM显示的情况是正常的。

要比较准确的检查定时,简单写个1秒钟翻转的GPIO,然后用示波器或频率计检查。

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

tanic 回答时间:2019-6-13 09:01:36
一切时序问题以示波器、逻辑分析仪为准

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2

查看全部评分

tianqi911 回答时间:2019-6-13 11:42:43
radio2radio 发表于 2019-6-12 13:05
看定时准不准,不能在USB的上位机那里看。 现在的SSCOM显示的情况是正常的。

要比较准确的检查定时,简单 ...

好方法。方便。
MYlokssa 回答时间:2019-7-4 13:54:15
#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   


MYlokssa 回答时间:2019-7-4 13:55:31
结贴!!直接system_stm32f10x.c文件的1030行的#if 处就好了

评分

参与人数 1蝴蝶豆 +2 收起 理由
STMCU + 2 自给自足

查看全部评分

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版