zoukankan      html  css  js  c++  java
  • Systick_config :神舟IV

    Systick_config
     1 void Systick_config(uint16_t loadvalue)
     2 {
     3   SysTick_Config(loadvalue);
     4 
     5  /* Configure the SysTick handler priority */
     6   NVIC_SetPriority(SysTick_IRQn, 0x0);
     7 
     8 }
     9 volatile uint32_t i=0;
    10 
    11 /*   SystemCoreClock / 100 Setup SysTick Timer for 10 msec interrupts  */ 
    SysTick_Handler
     1 extern uint32_t i;
     2 void SysTick_Handler(void)
     3 {
     4     if(i<1000)
     5     {
     6      i++;
     7     }
     8     else
     9     {
    10      i=0;
    11      if(GPIO_ReadOutputDataBit(GPIOD, GPIO_Pin_2))
    12      {
    13           Led_Turn_on_all();
    14          printf("on\r\n");
    15      }
    16      else
    17      {
    18           Led_Turn_off_all();
    19          printf("off\r\n");
    20      }
    21     }
    22     
    23                           
    24 }
    SysTick_Config(uint32_t ticks
     1  * @brief  Initialize and start the SysTick counter and its interrupt.
     2  *
     3  * @param   ticks   number of ticks between two interrupts
     4  * @return  1 = failed, 0 = successful
     5  *
     6  * Initialise the system tick timer and its interrupt and start the
     7  * system tick timer / counter in free running mode to generate 
     8  * periodical interrupts.
     9  */
    10 static __INLINE uint32_t SysTick_Config(uint32_t ticks)
    11 { 
    12   if (ticks > SysTick_LOAD_RELOAD_Msk)  return (1);            /* Reload value impossible */
    13                                                                
    14   SysTick->LOAD  = (ticks & SysTick_LOAD_RELOAD_Msk) - 1;      /* set reload register */
    15   NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);  /* set Priority for Cortex-M0 System Interrupts */
    16   SysTick->VAL   = 0;                                          /* Load the SysTick Counter Value */
    17   SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk | 
    18                    SysTick_CTRL_TICKINT_Msk   | 
    19                    SysTick_CTRL_ENABLE_Msk;                    /* Enable SysTick IRQ and SysTick Timer */
    20   return (0);                                                  /* Function successful */
    21 }

    SysTick_Config(SystemFrequency / 10)   函数的形参就是systick重装定时器的值。

    systck计数频率为每秒72000000次,所以7200000次就是1/10秒,也就是100ms。

    SysTick是1个24bit递减计数器,通过对SysTick控制与状态寄存器的设置,可选择HCLK时钟(72M)或HCLK的8分频(9M,缺省是这个)作为SysTick的时钟源

    STK_CSR,        0xE000E010  --  控制寄存器
    STK_LOAD,     0xE000E014  --  重载寄存器
    STK_VAL, 0xE000E018 -- 当前值寄存器
    STK_CALRB,   0xE000E01C  --   校准值寄存器

    官方库定义

    typedef struct
    {
      __IO uint32_t CTRL;                         /*!< Offset: 0x00  SysTick Control and Status Register */
      __IO uint32_t LOAD;                         /*!< Offset: 0x04  SysTick Reload Value Register       */
      __IO uint32_t VAL;                          /*!< Offset: 0x08  SysTick Current Value Register      */
      __I  uint32_t CALIB;                        /*!< Offset: 0x0C  SysTick Calibration Register        */
    } SysTick_Type;


    首先看STK_CSR控制寄存器:寄存器内有4个位t具有意义 
    第0位:ENABLE,Systick 使能位  (0:关闭Systick功能;1:开启Systick功能)
    第1位:TICKINT,Systick 中断使能位    (0:关闭Systick中断;1:开启Systick中断)
    第2位:CLKSOURCE,Systick时钟源选择  (0:使用HCLK/8 作为Systick时钟,外部参考时钟;1:使用HCLK作为Systick时钟,内部参考时钟)
    第3位:COUNTFLAG,Systick计数比较标志,如果在上次读取本寄存器后,SysTick 已经数到了0,则该位为1。如果读取该位,该位将自动清零

    STK_LOAD  重载寄存器:
    Systick是一个递减的定时器,当定时器递减至0时,重载寄存器中的值就会被重装载,继续开始递减。STK_LOAD  重载寄存器是个24位的寄存器最大计数0xFFFFFF。 

    STK_VAL当前值寄存器:
    也是个24位的寄存器,读取时返回当前倒计数的值,写它则使之清零,同时还会清除在SysTick 控制及状态寄存器中的COUNTFLAG 标志。


    STK_CALRB  校准值寄存器:
    这个寄存器好像目前的水平我还用不到,大体意思明白点,把英文说明放这吧:
    位31 NOREF :1=没有外部参考时钟(STCLK 不可用)0=外部参考时钟可用
    位30 SKEW:1=校准值不是准确的1ms 0=校准值是准确的1ms
    位[23:0] :Calibration value

    写个systick关闭的函数,直接操作寄存器

    Systick_Close
    1 void Systick_Close()
    2 {
    3         SysTick->CTRL=0x0;
    4 }

     

     

  • 相关阅读:
    linux基础操作
    提交form表单---修改密码 ajax、jQuery
    jQuery ajax() 方法
    response.getWriter()和jsp中out对象的区别
    get与post请求的区别
    Idea导入eclipse web项目404问题(webcontent)
    Mysql 获取当月和上个月第一天和最后一天的解决方案及其它日期
    Debian10环境基本配置
    修改sudoers文件为用户增加sudo权限
    Debian10 添加清华 软件源
  • 原文地址:https://www.cnblogs.com/wwjdwy/p/2957413.html
Copyright © 2011-2022 走看看