<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 模擬技術(shù) > 牛人業(yè)話 > 從滴答時鐘了解STM32庫操作

          從滴答時鐘了解STM32庫操作

          作者:areak 時間:2014-05-04 來源:電子產(chǎn)品世界 收藏

            SysTick->CTRL |= CTRL_TICKINT_Set;這句話就是用來配置寄存器的語句, SysTick是系統(tǒng)定義的一個結(jié)構(gòu)體如下,SysTick->CTRL即為滴答時鐘的控制寄存器。

          本文引用地址:http://www.ex-cimer.com/article/246289.htm

          typedef struct

          {

            __IO uint32_t CTRL;     /*!< Offset: 0x000 (R/W)  SysTick Control and Status Register */

            __IO uint32_t LOAD;    /*!< Offset: 0x004 (R/W)  SysTick Reload Value Register     */

            __IO uint32_t VAL;       /*!< Offset: 0x008 (R/W)  SysTick Current Value Register    */

            __I  uint32_t CALIB; /*!< Offset: 0x00C (R/ )  SysTick Calibration Register        */

          } SysTick_Type; //聲明一個SysTick_Type型的結(jié)構(gòu)體。

          #define SysTick   ((SysTick_Type   *)     SysTick_BASE  ) /*!< SysTick configuration struct */

          #define SysTick_BASE   (SCS_BASE +  0x0010UL) /*!< SysTick Base Address  */

          #define SCS_BASE   (0xE000E000UL) /*!< System Control Space Base Address  */

            定義一個SysTick_Type類型的結(jié)構(gòu)體實例SysTick,而從根本上來說這是一個地址,就是芯片內(nèi)部分配給滴答時鐘的實際地址0xE000E000UL+0x0010UL。

            CTRL_TICKINT_Set是一個宏定義,定義如下

          /* CTRL TICKINT Mask */

          #define CTRL_TICKINT_Set      ((u32)0x00000002)

          #define CTRL_TICKINT_Reset    ((u32)0xFFFFFFFD)

            至此,SysTick->CTRL |= CTRL_TICKINT_Set;這句話的意義已經(jīng)很清晰了,就是給地址0xE000E000+0x0010 +0x000賦一個0x00000002的值,對應(yīng)滴答時鐘的CTRL寄存器的第2位置1。即為開啟中斷的意思。

            上面講的是用查詢的方式,下面再說下中斷觸發(fā)。只需調(diào)用下面這個函數(shù)即可完成中斷的設(shè)置。

            SysTick_Config(uint32_t ticks);具體實現(xiàn)如下:

          __STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks)

          {

            if ((ticks - 1) > SysTick_LOAD_RELOAD_Msk)  return (1);    

            SysTick->LOAD  = ticks - 1;                              

            NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1); 

            SysTick->VAL   = 0;                                

            SysTick->CTRL  = SysTick_CTRL_CLKSOURCE_Msk |

                             SysTick_CTRL_TICKINT_Msk   |

                             SysTick_CTRL_ENABLE_Msk;   

            return (0);                                      

          }

            函數(shù)的參數(shù)為ticks,是要裝入寄存器SysTick->LOAD的計數(shù)值,如果系統(tǒng)時鐘為72M,把ticks賦值為SystemFrequency/10000,表示計數(shù)到720個時鐘周期產(chǎn)生一次中斷,而一個時鐘周期的時間為(1/72)us,所以720x(1/72)=10us,也就實現(xiàn)了定時10us的功能。

            NVIC_SetPriority (SysTick_IRQn, (1<<__NVIC_PRIO_BITS) - 1);為SysTick中斷設(shè)置優(yōu)先級。將寄存器SysTick->VAL的值清0。然后使能中斷,使能SysTick,時鐘源選擇為AHB時鐘。當(dāng)定時時間到時,進入中斷函數(shù)

          void SysTick_Handler(void)

          {

          //具體函數(shù)實現(xiàn)由用戶編寫。

          }

            通過對這樣一個簡單的操作,我們可以初步了解到的使用方法,其實開發(fā)人員沒必要深究內(nèi)部是如何處理實現(xiàn)的,只需要了解已經(jīng)封裝好的,進行調(diào)用即可,因此可以大大降低開發(fā)周期,提高開發(fā)效率,更多的功能留給讀者自行研究開發(fā)。

          c語言相關(guān)文章:c語言教程


          塵埃粒子計數(shù)器相關(guān)文章:塵埃粒子計數(shù)器原理

          上一頁 1 2 下一頁

          關(guān)鍵詞: STM32 庫函數(shù) 定時器

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();