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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版