OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2042|回复: 1

freertos例程的滴答时钟初始化疑问咨询

[复制链接]

95

主题

174

帖子

0

精华

初级会员

Rank: 2

积分
72
金钱
72
注册时间
2015-9-22
在线时间
104 小时
发表于 2018-2-27 21:33:41 | 显示全部楼层 |阅读模式
1金钱
滴答时钟在2处进行了初始设置:
1、开始任务启动时候有调用下面函数进行设置滴答定时器
[mw_shl_code=applescript,true] */
#if configOVERRIDE_DEFAULT_TICK_CONFIGURATION == 0

        void 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[/mw_shl_code]

2、在main函数初始化又设置了一次
[mw_shl_code=applescript,true]//初始化延迟函数
//SYSTICK的时钟固定为AHB时钟,基础例程里面SYSTICK时钟频率为AHB/8
//这里为了兼容FreeRTOS,所以将SYSTICK的时钟频率改为AHB的频率!
//SYSCLK:系统时钟频率
void delay_init(u8 SYSCLK)
{
        u32 reload;
        SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK);
        fac_us=SYSCLK;                                                        //不论是否使用OS,fac_us都需要使用
        reload=SYSCLK;                                                        //每秒钟的计数次数 单位为M          
        reload*=1000000/configTICK_RATE_HZ;                //根据delay_ostickspersec设定溢出时间
                                                                                        //reload为24位寄存器,最大值:16777216,在168M下,约合0.0998s左右       
        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     
}                        [/mw_shl_code]

不是重复了?

最佳答案

查看完整内容[请看2#楼]

重复了没关系,而且delay_init()不单单是初始了systick,而且初始化了delay_us所使用的一些变量。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2018-2-27 21:33:42 | 显示全部楼层
重复了没关系,而且delay_init()不单单是初始了systick,而且初始化了delay_us所使用的一些变量。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 17:58

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表