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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM32 固件庫中RCC_GetClocksFreq()函數(shù)注意事項(xiàng)

          STM32 固件庫中RCC_GetClocksFreq()函數(shù)注意事項(xiàng)

          作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          STM32固件庫中,當(dāng)你使用RCC_GetClocksFreq()這個(gè)函數(shù)的時(shí)候,需要注意一下。

          (比如,你在使用串口的USART_Init的時(shí)候,就無形中使用到這個(gè)函數(shù))。

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

          當(dāng)你使用外部晶振做為系統(tǒng)時(shí)鐘的時(shí)候,而且外部晶振不是標(biāo)準(zhǔn)8MHz的時(shí)候,
          你需要留意一下STM32的固件庫,里面的stm32f10x_rcc.c這個(gè)文件,
          在它的RCC_GetClocksFreq()這個(gè)函數(shù)中,有這么一段

          void RCC_GetClocksFreq(RCC_ClocksTypeDef* RCC_Clocks)
          {
          u32 tmp = 0, pllmull = 0, pllsource = 0, presc = 0;

          /* Get SYSCLK source ——————————————————-*/
          tmp = RCC->CFGR & CFGR_SWS_Mask;

          switch (tmp)
          {
          case 0×00:/* HSI used as system clock */
          RCC_Clocks->SYSCLK_Frequency = HSI_Value;
          break;

          case 0×04:/* HSE used as system clock */
          RCC_Clocks->SYSCLK_Frequency=HSE_Value;
          break;

          case 0×08:/* PLL used as system clock */
          /* Get PLL clock source and multiplication factor ———————-*/
          pllmull = RCC->CFGR & CFGR_PLLMull_Mask;
          pllmull = ( pllmull >> 18) + 2;

          pllsource = RCC->CFGR & CFGR_PLLSRC_Mask;

          if (pllsource == 0×00)
          {/* HSI oscillator clock divided by 2 selected as PLL clock entry */
          RCC_Clocks->SYSCLK_Frequency = (HSI_Value >> 1) * pllmull;
          }
          else
          {/* HSE selected as PLL clock entry */

          if ((RCC->CFGR & CFGR_PLLXTPRE_Mask) != (u32)RESET)
          {/* HSE oscillator clock divided by 2 */

          RCC_Clocks->SYSCLK_Frequency= (HSE_Value >> 1) * pllmull;
          }
          else
          {
          RCC_Clocks->SYSCLK_Frequency=HSE_Value* pllmull;
          }
          }
          break;

          default:
          RCC_Clocks->SYSCLK_Frequency = HSI_Value;
          break;
          }
          …. //省略以下代碼
          }

          我們追蹤到 HSE_Value 的定義

          /* In the following line adjust the value of External High Speed oscillator (HSE)
          used in your application */
          #defineHSE_Value((u32)8000000) /* Value of the External oscillator in Hz*/

          上面的定義說明:你需要在你的實(shí)際應(yīng)用的時(shí)候,跟據(jù)實(shí)際的外部晶振的值,修改HSE_Value的值。
          如果沒有留意到這個(gè)情況的話,所有的跟求系統(tǒng)頻率有關(guān)的應(yīng)用,都會(huì)出錯(cuò),例如在固件庫stm32f10x_usart.c中的設(shè)計(jì)串口波特率的時(shí)候。。



          關(guān)鍵詞: STM32固件庫注意事

          評論


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