本文來源電子發(fā)燒友社區(qū),作者:Michael, 帖子地址:https://bbs.elecfans.com/jishu_2287602_1_1.html
Air105 的時(shí)鐘
高頻振蕩源
分頻結(jié)構(gòu)
PLL_CLK
外部 XTAL12M 或 內(nèi)部 OSC12M -> 直通, 或PLL產(chǎn)生 108MHz - 204MHz
FCLK / CPU_CLK
PLL_CLK -> 2bit分頻(0, 2分頻, 4分頻) -> FCLK
FCLK就是主程序循環(huán)的時(shí)鐘
HCLK
FCLK -> 1bit分頻(默認(rèn)=1, 2分頻) -> HCLK
當(dāng) FCLK 小于 102MHz 時(shí)不分頻, 否則2分頻
PCLK
HCLK -> 1bit分頻(默認(rèn)=0, 不分頻) -> PCLK (外設(shè)頻率)
PCLK 是大部分外設(shè)tiMER, ADC, SPI, WDT, GPIO, I2C, UART 的時(shí)鐘
QSPI
FCLK -> 3bit分頻(默認(rèn)=3, 4分頻) -> QSPI
低頻振蕩源
時(shí)鐘結(jié)構(gòu)
(外部或內(nèi)部 32K RTC OSC) -> SYSTICK
內(nèi)部 32K OSC -> Security
時(shí)鐘設(shè)置
以下代碼基于 air105_project 的庫函數(shù)https://gitee.com/iosetting/air105_project
寄存器
寄存器手冊(cè)Air105芯片數(shù)據(jù)手冊(cè)_1.1.pdf
寄存器的基礎(chǔ)地址, 定義在 air105.h
復(fù)制代碼
SYSCTRL_BASE
地址 = 外設(shè)基礎(chǔ)地址 0x40000000UL + APB0 偏移 0x10000 + SYSCTRL 偏移 0xF000
范圍 [0x4001_F000, 0x4001_FFFF]
時(shí)鐘振蕩源
振蕩源選擇
復(fù)制代碼
12MHz 時(shí)鐘來源選擇: 0:片外 XTAL, 1:片內(nèi) OSC
復(fù)制代碼
時(shí)鐘頻率
設(shè)置使用默認(rèn)的內(nèi)部時(shí)鐘HSI(Internal clock)
復(fù)制代碼
PLL分頻的選項(xiàng)
復(fù)制代碼
設(shè)置 SysTick
復(fù)制代碼
調(diào)用 SysTick_Config 將單個(gè) SysTick 設(shè)置為 1 us.
也可以直接使用SYSCTRL->HCLK_1MS_VAL * 2 / 1000這個(gè)變量代表了當(dāng)前時(shí)鐘配置下, 1ms需要的HCLK時(shí)鐘周期, 根據(jù)當(dāng)前FCLK是否大于108MHz 確定是否要乘以2.
之后就會(huì)每隔1us調(diào)用 SysTick_Handler(void), 在這里設(shè)置 32bit g_current_tick 遞增, 可以用于延時(shí)控制. 因?yàn)?2bit數(shù)的限制, 1.2個(gè)小時(shí)后會(huì)溢出, 所以這里有一個(gè)延遲的極限.
復(fù)制代碼
延遲函數(shù)
為避免溢出造成的延遲錯(cuò)誤, 需要做一個(gè)判斷
復(fù)制代碼
延遲函數(shù)
復(fù)制代碼
代碼
代碼地址:https://gitee.com/iosetting/air105_project
可以使用Keil5 MDK 直接打開 Demos 目錄下的示例項(xiàng)目, 與Air105開發(fā)板接線參考前一篇合宙AIR105(一): Keil MDK開發(fā)環(huán)境, DAP-Link 燒錄和調(diào)試。
Air105 的時(shí)鐘
高頻振蕩源
- 芯片支持使用內(nèi)部振蕩源, 或使用外置12MHz晶體
- 芯片上電復(fù)位后 ROM boot 啟動(dòng)過程基于內(nèi)部12MHz的振蕩器
- 芯片內(nèi)部集成的12MHz振蕩源精度為±2%, 精度一般
- 使用外置12MHz晶體, 需要軟件切換
- 經(jīng)過PLL倍頻后為系統(tǒng)提供輸入
- 倍頻后的PLL時(shí)鐘頻率可通過寄存器進(jìn)行配置,可選頻率為:108MHz, 120MHz, 132MHz, 144MHz, 156MHz, 168MHz, 180MHz, 192MHz, 204MHz
分頻結(jié)構(gòu)
PLL_CLK
外部 XTAL12M 或 內(nèi)部 OSC12M -> 直通, 或PLL產(chǎn)生 108MHz - 204MHz
FCLK / CPU_CLK
PLL_CLK -> 2bit分頻(0, 2分頻, 4分頻) -> FCLK
FCLK就是主程序循環(huán)的時(shí)鐘
HCLK
FCLK -> 1bit分頻(默認(rèn)=1, 2分頻) -> HCLK
當(dāng) FCLK 小于 102MHz 時(shí)不分頻, 否則2分頻
PCLK
HCLK -> 1bit分頻(默認(rèn)=0, 不分頻) -> PCLK (外設(shè)頻率)
PCLK 是大部分外設(shè)tiMER, ADC, SPI, WDT, GPIO, I2C, UART 的時(shí)鐘
QSPI
FCLK -> 3bit分頻(默認(rèn)=3, 4分頻) -> QSPI
低頻振蕩源
- 芯片安全區(qū)基于內(nèi)部32KHz,RTC默認(rèn)基于內(nèi)部OSC 32K, 使用外部XTAL 32K需要軟件切換
- 支持內(nèi)部或外部32KHz輸出
時(shí)鐘結(jié)構(gòu)
(外部或內(nèi)部 32K RTC OSC) -> SYSTICK
內(nèi)部 32K OSC -> Security
時(shí)鐘設(shè)置
以下代碼基于 air105_project 的庫函數(shù)https://gitee.com/iosetting/air105_project
寄存器
寄存器手冊(cè)Air105芯片數(shù)據(jù)手冊(cè)_1.1.pdf
寄存器的基礎(chǔ)地址, 定義在 air105.h
- #define AIR105_FLASH_BASE (0x01000000UL) /*!< (FLASH? ???) Base Address */
- #define AIR105_SRAM_BASE (0x20000000UL) /*!< (SRAM? ?? ?) Base Address */
- #define AIR105_PERIPH_BASE (0x40000000UL) /*!< (Peripheral) Base Address */
- #define AIR105_AHB_BASE (AIR105_PERIPH_BASE)
- #define AIR105_APB0_BASE (AIR105_PERIPH_BASE + 0x10000)
- #define SYSCTRL_BASE (AIR105_APB0_BASE + 0xF000)
SYSCTRL_BASE
地址 = 外設(shè)基礎(chǔ)地址 0x40000000UL + APB0 偏移 0x10000 + SYSCTRL 偏移 0xF000
范圍 [0x4001_F000, 0x4001_FFFF]
時(shí)鐘振蕩源
振蕩源選擇
- SYSCTRL_SYSCLKSourceSelect(SELECT_EXT12M);
12MHz 時(shí)鐘來源選擇: 0:片外 XTAL, 1:片內(nèi) OSC
- void SYSCTRL_SYSCLKSourceSelect(SYSCLK_SOURCE_TypeDef source)
- {
- assert_param(IS_SYSCLK_SOURCE(source));
- switch (source)
- {
- case SELECT_EXT12M:
- // FREQ_SEL 是一個(gè)32bit的寄存器, 先與補(bǔ)碼(清零第12位), 然后寫入值(0)
- SYSCTRL->FREQ_SEL = ((SYSCTRL->FREQ_SEL & (~SYSCTRL_FREQ_SEL_CLOCK_SOURCE_Mask)) | SYSCTRL_FREQ_SEL_CLOCK_SOURCE_EXT);
- break;
- case SELECT_INC12M:
- // 先與補(bǔ)碼(清零第12位), 然后寫入值(1)
- SYSCTRL->FREQ_SEL = ((SYSCTRL->FREQ_SEL & (~SYSCTRL_FREQ_SEL_CLOCK_SOURCE_Mask)) | SYSCTRL_FREQ_SEL_CLOCK_SOURCE_INC);
- break;
- }
- }
時(shí)鐘頻率
設(shè)置使用默認(rèn)的內(nèi)部時(shí)鐘HSI(Internal clock)
- void SystemClock_Config_HSI(void)
- {
- // 設(shè)置CPU頻率, 直接選擇, 不需要計(jì)算
- SYSCTRL_PLLConfig(SYSCTRL_PLL_204MHz);
- // 分頻后產(chǎn)生 FCLK -> 這是主程序的時(shí)鐘
- SYSCTRL_PLLDivConfig(SYSCTRL_PLL_Div_None);
- // 分頻產(chǎn)生 HCLK, 如果 FCLK > 102MHz 則無論如何設(shè)置, 都會(huì)被二分頻
- SYSCTRL_HCLKConfig(SYSCTRL_HCLK_Div2);
- // 分頻產(chǎn)生 PCLK -> 這是大部分外設(shè)的時(shí)鐘
- SYSCTRL_PCLKConfig(SYSCTRL_PCLK_Div2);
- QSPI_SetLatency((uint32_t)0);
- }
PLL分頻的選項(xiàng)
- #define SYSCTRL_PLL_Div_None ((uint32_t)0x00)
- #define SYSCTRL_PLL_Div2 ((uint32_t)0x01)
- #define SYSCTRL_PLL_Div4 ((uint32_t)0x10)
設(shè)置 SysTick
- void Delay_Init(void)
- {
- SYSCTRL_ClocksTypeDef clocks;
- SYSCTRL_GetClocksFreq(&clocks);
- SysTick_Config(clocks.CPU_Frequency / 1000000); ///< 1us
- }
調(diào)用 SysTick_Config 將單個(gè) SysTick 設(shè)置為 1 us.
也可以直接使用SYSCTRL->HCLK_1MS_VAL * 2 / 1000這個(gè)變量代表了當(dāng)前時(shí)鐘配置下, 1ms需要的HCLK時(shí)鐘周期, 根據(jù)當(dāng)前FCLK是否大于108MHz 確定是否要乘以2.
之后就會(huì)每隔1us調(diào)用 SysTick_Handler(void), 在這里設(shè)置 32bit g_current_tick 遞增, 可以用于延時(shí)控制. 因?yàn)?2bit數(shù)的限制, 1.2個(gè)小時(shí)后會(huì)溢出, 所以這里有一個(gè)延遲的極限.
- void SysTick_Handler(void)
- {
- g_current_tick++;
- }
延遲函數(shù)
為避免溢出造成的延遲錯(cuò)誤, 需要做一個(gè)判斷
- uint32_t get_diff_tick(uint32_t cur_tick, uint32_t prior_tick)
- {
- if (cur_tick < prior_tick)
- {
- // 如果當(dāng)前值比前值還小, 說明發(fā)生了溢出, 用當(dāng)前值加上原值取反(即原值離溢出的距離)
- return (cur_tick + (~prior_tick));
- }
- else
- {
- return (cur_tick - prior_tick);
- }
- }
延遲函數(shù)
- void Delay_us(uint32_t usec)
- {
- uint32_t old_tick;
- old_tick = g_current_tick;
- while (get_diff_tick(g_current_tick, old_tick) < usec);
- }
- void Delay_ms(uint32_t msec)
- {
- uint32_t old_tick;
- old_tick = g_current_tick;
- while (get_diff_tick(g_current_tick, old_tick) < (msec * 1000));
- }
代碼
代碼地址:https://gitee.com/iosetting/air105_project
可以使用Keil5 MDK 直接打開 Demos 目錄下的示例項(xiàng)目, 與Air105開發(fā)板接線參考前一篇合宙AIR105(一): Keil MDK開發(fā)環(huán)境, DAP-Link 燒錄和調(diào)試。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
合宙通信
+關(guān)注
關(guān)注
0文章
148瀏覽量
1785 -
Air105
+關(guān)注
關(guān)注
0文章
48瀏覽量
306
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
RNDIS網(wǎng)卡應(yīng)用看這篇!合宙Air780EP低功耗4G模組AT開發(fā)示例
** ? 1.1 硬件準(zhǔn)備 合宙EVB_Air780EP開發(fā)板一套,包括天線、SIM卡; USB線 WIN10以上PC電腦 1.2 軟件準(zhǔn)備 串口工具 如果沒有準(zhǔn)備,推薦使用LLCO
FTP應(yīng)用看這篇!合宙Air780EP低功耗4G模組AT開發(fā)示例
780EX/Air724UG… **一、相關(guān)準(zhǔn)備工作 ** ? 1.1 硬件準(zhǔn)備 合宙EVB_Air780EP開發(fā)板一套,包括天線、SIM卡
合宙Air780EP模塊——AT指令MQTT接入OneNET開發(fā)指南
過程,Air780EP和MQTT是最佳拍檔,讓設(shè)備互聯(lián)變得輕松又靠譜。想不想試試這簡單又神奇的操作?那就來吧!本文詳細(xì)講解了基于合宙的Air80EP
評(píng)論