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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 SysTick 系統(tǒng)時(shí)鐘 超簡(jiǎn)易定時(shí)器SysTick

          STM32 SysTick 系統(tǒng)時(shí)鐘 超簡(jiǎn)易定時(shí)器SysTick

          作者: 時(shí)間:2016-11-13 來(lái)源:網(wǎng)絡(luò) 收藏
          /**

          * @brief Configures the SysTick. 系統(tǒng)時(shí)鐘配置函數(shù)main.c
          * @param None
          * @retval None
          */
          void SysTick_Configuration(void)
          {
          /* Setup SysTick Timer for 100 msec interrupts */
          if (SysTick_Config((SystemCoreClock) / 10))// 1/10s=100ms
          {
          /* Capture error */
          while (1);
          }

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

          NVIC_SetPriority(SysTick_IRQn, 0x0);
          }

          /**
          * @brief This function handles SysTick Handler. 系統(tǒng)時(shí)鐘中斷函數(shù)stm32f10x_it.c
          * @param None
          * @retval None
          */
          void SysTick_Handler(void)
          {
          /* Generate TIM1 COM event by software */
          TIM_GenerateEvent(TIM1, TIM_EventSource_COM);
          }

          SysTick_Config(SystemFrequency / 10) 函數(shù)的形參就是systick重裝定時(shí)器的值。
          systck計(jì)數(shù)頻率為每秒72000000次,所以72000次就是1/10秒,也就是100ms。

          SysTick是1個(gè)24bit遞減計(jì)數(shù)器,通過(guò)對(duì)SysTick控制與狀態(tài)寄存器的設(shè)置,可選擇HCLK時(shí)鐘(72M)或HCLK的8分頻(9M,缺省是這個(gè))作為SysTick的時(shí)鐘源。
          SysTick的重裝寄存器決定了定時(shí)器頻率。

          若SysTick的時(shí)鐘源是72M, SystemFrequency = 72000000Hz
          所以 SysTick_Config(SystemFrequency / 1000); 就是1ms時(shí)基。
          // 1/1000 s=1ms

          關(guān)于SysTick校準(zhǔn)寄存器的介紹(大多數(shù)情況下,我們可以不必理會(huì)它)


          校準(zhǔn)值寄存器提供了這樣一個(gè)解決方案:它使系統(tǒng)即使在不同的CM3產(chǎn)品上運(yùn)行,也能產(chǎn)生恒定的SysTick中斷頻率。最簡(jiǎn)單的作法就是:直接把TENMS的值寫入重裝載寄存器,這樣一來(lái),只要沒(méi)突破系統(tǒng)極限,就能做到每10ms來(lái)一次 SysTick異常。如果需要其它的SysTick異常周期,則可以根據(jù)TENMS的值加以比例計(jì)算。只不過(guò),在少數(shù)情況下,CM3芯片可能無(wú)法準(zhǔn)確地提供TENMS的值(如,CM3的校準(zhǔn)輸入信號(hào)被拉低),所以為保險(xiǎn)起見,最好在使用TENMS前檢查器件的參考手冊(cè)。
          SysTick定時(shí)器除了能服務(wù)于操作系統(tǒng)之外,還能用于其它目的:如作為一個(gè)鬧鈴,用于測(cè)量時(shí)間等。要注意的是,當(dāng)處理器在調(diào)試期間被喊停(halt)時(shí),則SysTick定時(shí)器亦將暫停運(yùn)作。

          下面利用 SysTick 產(chǎn)生的 硬件延時(shí)函數(shù) 延時(shí) dly_ms 毫秒

          /*******************************************************************************
          * Function Name : SysTickHandler
          * Description :系統(tǒng)時(shí)鐘,一般調(diào)教到1MS中斷一次
          *******************************************************************************/

          void SysTick_Handler(void)
          {
          if(Timer1)
          Timer1--;
          }

          /********************************************
          **函數(shù)名:SysTickDelay
          **功能:使用系統(tǒng)時(shí)鐘的硬延遲
          **注意事項(xiàng):一般地,不要在中斷中調(diào)用本函數(shù),否則會(huì)存在重入問(wèn)題.另外如果屏蔽了全局中斷,則不要使用此函數(shù)
          ********************************************/
          volatile u16 Timer1;
          void SysTickDelay(u16 dly_ms)
          {
          Timer1=dly_ms;
          while(Timer1);
          }



          評(píng)論


          技術(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); })();