rtt时钟

RTThread时钟

##### RTThread时钟

```c
void hw_board_init(char *clock_src, int32_t clock_src_freq, int32_t clock_target_freq)
{
    ....
    /* enable interrupt */
    __set_PRIMASK(0);
    /* System clock initialization */
    clk_init(clock_src, clock_src_freq, clock_target_freq);
    /* disbale interrupt */
    __set_PRIMASK(1);
    rt_hw_systick_init();
    ... 
}
/*
 * clk_init()是指配置内外时钟、倍频等内容
 * rt_hw_systick_init()则是系统时钟节拍(OS)配置
*/
/* SysTick configuration */
void rt_hw_systick_init(void)
{
#if defined (SOC_SERIES_STM32H7)
    HAL_SYSTICK_Config((HAL_RCCEx_GetD1SysClockFreq()) / RT_TICK_PER_SECOND);
#else
    HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq() / RT_TICK_PER_SECOND);
#endif
    HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);
    HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}
/*
 * HAL_SYSTICK_Config()是指调用systick_config 设置最小的节拍
 * HAL_RCC_GetHCLKFreq()获取 系统时钟主频,然后除以 RT_TICK_PER_SECOND(初始值位1000)即是表明以1ms为时钟节拍值
*/
uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
{
   return SysTick_Config(TicksNumb);
}
uint32_t HAL_RCC_GetHCLKFreq(void)
{
  return SystemCoreClock;
}


void HAL_SYSTICK_CLKSourceConfig(uint32_t CLKSource)
{
  /* Check the parameters */
  assert_param(IS_SYSTICK_CLK_SOURCE(CLKSource));
  if (CLKSource == SYSTICK_CLKSOURCE_HCLK)
  {
    SysTick->CTRL |= SYSTICK_CLKSOURCE_HCLK;
  }
  else
  {
    SysTick->CTRL &= ~SYSTICK_CLKSOURCE_HCLK;
  }
}
// 这个函数则是选择系统
```

根据cubemx修改的rtt时钟配置 ,如何对单片机的时钟节拍os 产生影响



```c
void rt_hw_us_delay(rt_uint32_t us)
{
    rt_uint32_t start, now, delta, reload, us_tick;
    start = SysTick->VAL;
    reload = SysTick->LOAD;
    us_tick = SystemCoreClock / 1000000UL;
    do {
        now = SysTick->VAL;
        delta = start > now ? start - now : reload + start - now;
    } while(delta < us_tick * us);
}
```

根据cubemx修改的rtt时钟配置 ,如何对单片机的时钟节拍os 产生影响

 void rt_hw_us_delay(rt_uint32_t us)
 {
     rt_uint32_t start, now, delta, reload, us_tick;
     start = SysTick->VAL;
     reload = SysTick->LOAD;
     us_tick = SystemCoreClock / 1000000UL;
     do {
         now = SysTick->VAL;
         delta = start > now ? start - now : reload + start - now;
     } while(delta < us_tick * us);
 }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值