完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
代码在:2个地方定义初始化了系统滴答时钟1、delay.c中
[AppleScript] 纯文本查看 复制代码 void delay_init(){u32 reload;Systick_CLKSourceConfig(SysTick_CLKSource_HCLK);//选择外部时钟 HCLKfac_us=SystemCoreClock/1000000;//不论是否使用OS,fac_us都需要使用reload=SystemCoreClock/1000000;//每秒钟的计数次数 单位为M reload*=1000000/configTICK_RATE_HZ;//根据configTICK_RATE_HZ设定溢出时间//reload为24位寄存器,最大值:16777216,在72M下,约合0.233s左右fac_ms=1000/configTICK_RATE_HZ;//代表OS可以延时的最少单位 SysTick->CTRL|=SysTick_CTRL_TICKINT_Msk; //开启SYSTICK中断SysTick->LOAD=reload; //每1/configTICK_RATE_HZ秒中断一次SysTick->CTRL|=SysTick_CTRL_ENABLE_Msk; //开启SYSTICK } 2、port.c中也定义了,通过vTaskStartScheduler-->xPortStartScheduler-->vPortSetupTimerInterrupt [AppleScript] 纯文本查看 复制代码 #if configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0void vPortSetupTimerInterrupt( void ){/* Calculate the constants required to configure the tick interrupt. */#if configUSE_TICKLESS_IDLE == 1{ulTimerCountsForOneTick = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ );xMaximumPossibleSuppressedTicks = portMAX_24_BIT_NUMBER / ulTimerCountsForOneTick;ulStoppedTimerCompensation = portMISSED_COUNTS_FACTOR / ( configCPU_CLOCK_HZ / configSYSTICK_CLOCK_HZ );}#endif /* configUSE_TICKLESS_IDLE *//* Configure SysTick to interrupt at the requested rate. */portNVIC_SYSTICK_LOAD_REG = ( configSYSTICK_CLOCK_HZ / configTICK_RATE_HZ ) - 1UL;portNVIC_SYSTICK_CTRL_REG = ( portNVIC_SYSTICK_CLK_BIT | portNVIC_SYSTICK_INT_BIT | portNVIC_SYSTICK_ENABLE_BIT );}#endif /* configOVERRIDE_DEFAULT_TICK_CONFIGURATION */ 按说用其中一个就可以了,但是为什么取消delay中的系统滴答初始化时候,系统跑不起来? 谢谢指教 |
|
相关推荐
4个回答
|
|
你好 能否说仔细
|
|
|
|
FreeRTOS使用了系统时钟SystemCoreClock(F103板子就是72M)做为滴答定时器的时基,所以做为用户的我们就只能在自己编写的delay.c中也使用SystemCoreClock,而不是1/8;因此需要将裸机版本的delay.c中的滴答定时器时基改为SystemCoreClock!,这样我们就可以使用裸机下的那些delay_us()函数了。
在main函数开始的时候使用delay_init()的目的是为了初始化函数delay_xms(u32 nms)和delay_us(u32 nus)所需要的某些因子(这两个函数不是用的系统延时函数),这样你就可以在你的工程里像使用裸机一样使用这两个延时函数了。 也可以把delay_init()函数里的这行注释掉”SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);”,因为任务开启任务调度器里也这么写了一句。 |
|
|
|
谢谢楼上各位回复。
|
|
|
|
你用那个最简单那个例程(移植实验观察LED灯那个)肯定可以跑起来的,你之所以会出现跑不起来是因为你在开启调度器也就是初始化systick前,调用了延时函数 比如在LCD_Init()里面,而这时你的滴答定时器还没有初始化。
|
|
|
|
只有小组成员才能发言,加入小组>>
709 浏览 0 评论
1116 浏览 1 评论
2494 浏览 5 评论
2833 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2675 浏览 6 评论
使用eim外接fpga可是端口一点反应都没有有没有大哥指点一下啊
661浏览 9评论
672浏览 7评论
请教大神怎样去解决iMX6Q在linux3.0.35内核上做AP失败的问题呢
789浏览 6评论
636浏览 5评论
679浏览 5评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 16:30 , Processed in 1.403579 second(s), Total 106, Slave 87 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号