女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

第九章 RCC——使用HSE/HSI配置時鐘

W55MH32 ? 來源:W55MH32 ? 作者:W55MH32 ? 2025-05-22 17:00 ? 次閱讀

單芯片解決方案,開啟全新體驗——W55MH32 高性能以太網單片機

W55MH32是WIZnet重磅推出的高性能以太網單片機,它為用戶帶來前所未有的集成化體驗。這顆芯片將強大的組件集于一身,具體來說,一顆W55MH32內置高性能Arm? Cortex-M3核心,其主頻最高可達216MHz;配備1024KB FLASH與96KB SRAM,滿足存儲與數據處理需求;集成TOE引擎,包含WIZnet全硬件TCP/IP協議棧、內置MAC以及PHY,擁有獨立的32KB以太網收發緩存,可供8個獨立硬件socket使用。如此配置,真正實現了All-in-One解決方案,為開發者提供極大便利。

在封裝規格上,W55MH32 提供了兩種選擇:QFN100和QFN68。

W55MH32L采用QFN100封裝版本,尺寸為12x12mm,其資源豐富,專為各種復雜工控場景設計。它擁有66個GPIO、3個ADC、12通道DMA、17個定時器、2個I2C、5個串口、2個SPI接口(其中1個帶I2S接口復用)、1個CAN、1個USB2.0以及1個SDIO接口。如此豐富的外設資源,能夠輕松應對工業控制中多樣化的連接需求,無論是與各類傳感器、執行器的通信,還是對復雜工業協議的支持,都能游刃有余,成為復雜工控領域的理想選擇。 同系列還有QFN68封裝的W55MH32Q版本,該版本體積更小,僅為8x8mm,成本低,適合集成度高的網關模組等場景,軟件使用方法一致。更多信息和資料請進入http://www.w5500.com/網站或者私信獲取。

此外,本W55MH32支持硬件加密算法單元,WIZnet還推出TOE+SSL應用,涵蓋TCP SSL、HTTP SSL以及 MQTT SSL等,為網絡通信安全再添保障。

為助力開發者快速上手與深入開發,基于W55MH32L這顆芯片,WIZnet精心打造了配套開發板。開發板集成WIZ-Link芯片,借助一根USB C口數據線,就能輕松實現調試、下載以及串口打印日志等功能。開發板將所有外設全部引出,拓展功能也大幅提升,便于開發者全面評估芯片性能。

若您想獲取芯片和開發板的更多詳細信息,包括產品特性、技術參數以及價格等,歡迎訪問官方網頁:http://www.w5500.com/,我們期待與您共同探索W55MH32的無限可能。

wKgZPGgbOfaANhwzACodXd3sVzg463.png

第九章 RCC——使用HSE/HSI配置時鐘

本章參考資料:《W55MH32參考手冊》RCC章節。

學習本章時,配合《W55MH32參考手冊》RCC章節一起閱讀,效果會更佳,特別是涉及到寄存器說明的部分。

RCC :reset clock control 復位和時鐘控制器。本章我們主要講解時鐘部分, 特別是要著重理解時鐘樹,理解了時鐘樹,W55MH32的一切時鐘的來龍去脈都會了如指掌。

1 RCC主要作用——時鐘部分

設置系統時鐘SYSCLK、設置AHB分頻因子(決定HCLK等于多少)、設置APB2分頻因子(決定PCLK2等于多少)、 設置APB1分頻因子(決定PCLK1等于多少)、設置各個外設的分頻因子;控制AHB、APB2和APB1這三條總線時鐘的開啟、 控制每個外設的時鐘的開啟。對于SYSCLK、HCLK、PCLK2、PCLK1這四個時鐘的配置一般是: PCLK2 = HCLK = SYSCLK=PLLCLK = 72M, PCLK1=HCLK/2 = 36M。這個時鐘配置也是庫函數的標準配置,我們用的最多的就是這個。

2 RCC框圖剖析——時鐘部分

1. 當 HSI 被用于作為 PLL 時鐘的輸入時,系統時鐘能得到的最大頻率是 108MHz。

2. 對于內部和外部時鐘源的特性,請參考相應產品數據手冊中“電氣特性”章節。

用戶可通過多個預分頻器配置 AHB、高速 APB(APB2)和低速 APB(APB1)域的頻率。AHB 和 APB2 域的最大頻率是 216MHz。APB1 域的最大允許頻率是 108MHz。SDIO 接口的時鐘頻率固定為 HCLK/2。RCC 通過 AHB 時鐘(HCLK)8 分頻后作為 Cortex 系統定時器(SysTick)的外部時鐘。通過對 SysTick控制與狀態寄存器的設置,可選擇上述時鐘或 Cortex(HCLK)時鐘作為 SysTick 時鐘。ADC 時鐘由高速 APB2 時鐘經 2、4、6 或 8 分頻后獲得。

定時器時鐘頻率分配由硬件按以下 2 種情況自動設置:

1. 如果相應的 APB 預分頻系數是 1,定時器的時鐘頻率與所在 APB 總線頻率一致。

2. 否則,定時器的時鐘頻率被設為與其相連的 APB 總線頻率的 2 倍。

FCLK 是 Cortex?-M3 的自由運行時鐘。詳情見 ARM 的 Cortex?-M3 技術參考手冊。RCC時鐘樹如下:

wKgZPGgu5k2AGmdvAAM_lLpHpVs874.png

2.1 系統時鐘

2.1.1 HSE高速外部時鐘信號

HSE是高速的外部時鐘信號,可以由有源晶振或者無源晶振提供,頻率從4-16MHZ不等。當使用有源晶振時, 時鐘從OSC_IN引腳進入,OSC_OUT引腳懸空,當選用無源晶振時,時鐘從OSC_IN和OSC_OUT進入,并且要配諧振電容。

HSE最常使用的就是8M的無源晶振。當確定PLL時鐘來源的時候,HSE可以不分頻或者2分頻, 這個由時鐘配置寄存器CFGR的位17:PLLXTPRE設置,我們設置為HSE不分頻。

PLL時鐘源

內部 PLL 可以用來倍頻 HSIRC 的輸出時鐘或 HSE 晶體輸出時鐘。參考圖 7 和時鐘控制寄存器。

PLL 的設置(選擇 HIS 振蕩器除 2 或 HSE 振蕩器為 PLL 的輸入時鐘,和選擇倍頻因子)必須在其被激活前完成。一旦 PLL 被激活,這些參數就不能被改動。

如果 PLL 中斷在時鐘中斷寄存器里被允許,當 PLL 準備就緒時,可產生中斷申請。

如果需要在應用中使用 USB 接口,PLL 必須被設置為輸出 48 或 72MHZ 時鐘,用于提供 48MHz 的USBCLK 時鐘。

PLL時鐘PLLCLK

通過設置PLL的倍頻因子,可以對PLL的時鐘來源進行倍頻,倍頻因子可以是:[2,3,4,5,6,7,8,9,10,11,12,13,14,15,16], 具體設置成多少,由時鐘配置寄存器CFGR的位21-18:PLLMUL[3:0]設置。我們這里設置為9倍頻, 因為上一步我們設置PLL的時鐘來源為HSE=8M,所以經過PLL倍頻之后的PLL時鐘:PLLCLK = 8M *9 = 72M。 72M是ST官方推薦的穩定運行時鐘,如果你想超頻的話,增大倍頻因子即可,最高為128M。 我們這里設置PLL時鐘:PLLCLK = 8M *9 = 72M。

系統時鐘(SYSCLK)選擇

系統復位后,HSI 振蕩器被選為系統時鐘。當時鐘源被直接或通過 PLL 間接作為系統時鐘時,它將不能被停止。

只有當目標時鐘源準備就緒了(經過啟動穩定階段的延遲或 PLL 穩定),從一個時鐘源到另一個時鐘源的切換才會發生。在被選擇時鐘源沒有就緒時,系統時鐘的切換不會發生。直至目標時鐘源就緒,才發生切換。

在時鐘控制寄存器(RCC_CR)里的狀態位指示哪個時鐘已經準備好了,哪個時鐘目前被用作系統時鐘。

AHB總線時鐘HCLK

系統時鐘SYSCLK經過AHB預分頻器分頻之后得到時鐘叫APB總線時鐘,即HCLK,分頻因子可以是:[1,2,4,8,16,64,128,256,512], 具體的由時鐘配置寄存器CFGR的位7-4 :HPRE[3:0]設置。片上大部分外設的時鐘都是經過HCLK分頻得到, 至于AHB總線上的外設的時鐘設置為多少,得等到我們使用該外設的時候才設置, 我們這里只需粗線條的設置好APB的時鐘即可。

APB2總線時鐘PCLK2

APB2總線時鐘PCLK2由HCLK經過高速APB2預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體由時鐘配置寄存器CFGR的位13-11:PPRE2[2:0]決定。 PCLK2屬于高速的總線時鐘,片上高速的外設就掛載到這條總線上,比如全部的GPIO、USART1、SPI1等。至于APB2總線上的外設的時鐘設置為多少, 得等到我們使用該外設的時候才設置,我們這里只需粗線條的設置好APB2的時鐘即可。

APB1總線時鐘PCLK1

APB1總線時鐘PCLK1由HCLK經過低速APB預分頻器得到,分頻因子可以是:[1,2,4,8,16],具體的由時鐘配置寄存器CFGR的位10-8:PRRE1[2:0]決定。 PCLK1屬于低速的總線時鐘,最高為36M,片上低速的外設就掛載到這條總線上,比如USART2/3/4/5、SPI2/3,I2C1/2等。 至于APB1總線上的外設的時鐘設置為多少,得等到我們使用該外設的時候才設置,我們這里只需粗略的設置好APB1的時鐘即可。

2.1.2 設置系統時鐘庫函數

上面的7個步驟對應的設置系統時鐘庫函數如下,該函數截取自固件庫文件system_w55mh32.c。為了方便閱讀, 我已把互聯型相關的代碼刪掉,把英文注釋翻譯成了中文,并把代碼標上了序號,總共七個步驟。該函數是直接操作寄存器的, 有關寄存器部分請參考數據手冊的RCC的寄存器描述部分。

代碼清單:RCC-1 設置系統時鐘庫函數

static void SetSysClockTo72(void)
{
    __IO uint32_t StartUpCounter = 0, HSEStatus = 0;

    // ① 使能HSE,并等待HSE穩定
    RCC->CR |= ((uint32_t)RCC_CR_HSEON);

    // 等待HSE啟動穩定,并做超時處理
    do {
        HSEStatus = RCC->CR & RCC_CR_HSERDY;
        StartUpCounter++;
    } while ((HSEStatus == 0)
        &&(StartUpCounter !=HSE_STARTUP_TIMEOUT));

    if ((RCC->CR & RCC_CR_HSERDY) != RESET) {
        HSEStatus = (uint32_t)0x01;
    } else {
        HSEStatus = (uint32_t)0x00;
    }
    // HSE啟動成功,則繼續往下處理
    if (HSEStatus == (uint32_t)0x01) {

        //-----------------------------------------------------------
        // 使能FLASH 預存取緩沖區 */
        FLASH->ACR |= FLASH_ACR_PRFTBE;

        // SYSCLK周期與閃存訪問時間的比例設置,這里統一設置成2
        // 設置成2的時候,SYSCLK低于48M也可以工作,如果設置成0或者1的時候,
        // 如果配置的SYSCLK超出了范圍的話,則會進入硬件錯誤,程序就死了
        // 0:0 < SYSCLK <= 24M
        // 1:24< SYSCLK <= 48M
        // 2:48< SYSCLK <= 72M */
        FLASH-?>ACR &= (uint32_t)((uint32_t)~FLASH_ACR_LATENCY);
        FLASH->ACR |= (uint32_t)FLASH_ACR_LATENCY_2;
        //------------------------------------------------------------

        // ② 設置AHB、APB2、APB1預分頻因子
        // HCLK = SYSCLK
        RCC->CFGR |= (uint32_t)RCC_CFGR_HPRE_DIV1;
        //PCLK2 = HCLK
        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE2_DIV1;
        //PCLK1 = HCLK/2
        RCC->CFGR |= (uint32_t)RCC_CFGR_PPRE1_DIV2;

        // ③ 設置PLL時鐘來源,設置PLL倍頻因子,PLLCLK = HSE * 9 = 72 MHz
        RCC->CFGR &= (uint32_t)((uint32_t)
                                ~(RCC_CFGR_PLLSRC
                                | RCC_CFGR_PLLXTPRE
                                | RCC_CFGR_PLLMULL));
        RCC->CFGR |= (uint32_t)(RCC_CFGR_PLLSRC_HSE
                                | RCC_CFGR_PLLMULL9);

        // ④ 使能 PLL
        RCC->CR |= RCC_CR_PLLON;

        // ⑤ 等待PLL穩定
        while ((RCC->CR & RCC_CR_PLLRDY) == 0) {
        }

        // ⑥ 選擇PLL作為系統時鐘來源
        RCC->CFGR &= (uint32_t)((uint32_t)~(RCC_CFGR_SW));
        RCC->CFGR |= (uint32_t)RCC_CFGR_SW_PLL;

        // ⑦ 讀取時鐘切換狀態位,確保PLLCLK被選為系統時鐘
        while ((RCC->CFGR&(uint32_t)RCC_CFGR_SWS) != (uint32_t)0x08){
        }
    } else {// 如果HSE啟動失敗,用戶可以在這里添加錯誤代碼出來
    }
}

2.2 其他時鐘

通過對系統時鐘設置的講解,整個時鐘樹我們已經把握的有六七成,剩下的時鐘我們講解幾個重要的部分。

2.2.1 USB時鐘

USB時鐘是由PLLCLK經過USB預分頻器得到,分頻因子可以是:[1,1.5],具體的由時鐘配置寄存器CFGR的位22:USBPRE配置。 USB的時鐘最高是48M,根據分頻因子反推過來算,PLLCLK只能是48M或者是72M。一般我們設置PLLCLK=72M,USBCLK=48M。 USB對時鐘要求比較高,所以PLLCLK只能是由HSE倍頻得到,不能使用HSI倍頻。

2.2.2 Cortex系統時鐘

Cortex系統時鐘由HCLK 8分頻得到,等于9M, Cortex系統時鐘用來驅動內核的系統定時器SysTick,SysTick一般用于操作系統的時鐘節拍,也可以用做普通的定時。

2.2.3 ADC時鐘

ADC時鐘由PCLK2經過ADC預分頻器得到,分頻因子可以是[2,4,6,8],具體的由時鐘配置寄存器CFGR的位15-14:ADCPRE[1:0]決定。 很奇怪的是怎么沒有1分頻。ADC時鐘最高只能是14M,如果采樣周期設置成最短的1.5個周期的話,ADC的轉換時間可以達到最短的1us。 如果真要達到最短的轉換時間1us的話,那ADC的時鐘就得是14M,反推PCLK2的時鐘只能是:28M、56M、84M、112M。

2.2.4 RTC時鐘、獨立看門狗時鐘

RTC時鐘可由HSE/128分頻得到,也可由低速外部時鐘信號LSE提供,頻率為32.768KHZ,也可由低速內部時鐘信號LSI提供, 具體選用哪個時鐘由備份域控制寄存器BDCR的位9-8:RTCSEL[1:0]配置。獨立看門狗的時鐘由LSI提供, 且只能是由LSI提供,LSI是低速的內部時鐘信號,頻率為30~60KHZ直接不等,一般取40KHZ。

2.2.5 MCO時鐘輸出

MCO是microcontroller clock output的縮寫,是微控制器時鐘輸出引腳,在W55MH32系列中 由 PA8復用所得, 主要作用是可以對外提供時鐘,相當于一個有源晶振。MCO的時鐘來源可以是:PLLCLK/2、HSI、HSE、SYSCLK, 具體選哪個由時鐘配置寄存器CFGR的位26-24:MCO[2:0]決定。除了對外提供時鐘這個作用之外, 我們還可以通過示波器監控MCO引腳的時鐘輸出來驗證我們的系統時鐘配置是否正確。

3 時鐘配置

3.1RCC_HSIConfig

1. 頭文件包含與全局定義

#include 
#include 
#include 
#include "delay.h"
#include "w55mh32.h"
#include "wiz.h"

USART_TypeDef *USART_TEST = USART1;

頭文件:包含標準庫和硬件相關頭文件(w55mh32.h)、延時函數(delay.h)、自定義硬件抽象層(wiz.h)。

全局變量:定義串口外設指針 USART_TEST 指向 USART1。

2. 函數聲明

void UART_Configuration(uint32_t bound);
void RCC_ClkConfiguration(void);

UART_Configuration:配置串口通信。

RCC_ClkConfiguration:配置系統時鐘(RCC,復位與時鐘控制)。

3. main ()函數:系統初始化與主邏輯

int main(void)
{
    RCC_ClocksTypeDef clocks;

    RCC_ClkConfiguration();       // 配置系統時鐘
    delay_init();                 // 初始化延時函數
    UART_Configuration(115200);   // 配置串口(波特率 115200)

    printf("RCC HSI Config Test.n");
    RCC_GetClocksFreq(&clocks);  // 獲取系統時鐘頻率

    // 打印各時鐘頻率
    printf("nSYSCLK: %3.1fMhz, nHCLK: %3.1fMhz, nPCLK1: %3.1fMhz, nPCLK2: %3.1fMhz, nADCCLK: %3.1fMhzn",
           (float)clocks.SYSCLK_Frequency / 1000000,
           (float)clocks.HCLK_Frequency / 1000000,
           (float)clocks.PCLK1_Frequency / 1000000,
           (float)clocks.PCLK2_Frequency / 1000000,
           (float)clocks.ADCCLK_Frequency / 1000000);

    while (1) {}  // 主循環(空,等待事件)
}

功能:

初始化系統時鐘(HSI + PLL)。

初始化串口,通過 printf 輸出時鐘頻率信息。

進入無限循環,程序無實際業務邏輯,僅驗證時鐘和串口配置。

4. RCC_ClkConfiguration ()函數:系統時鐘配置

void RCC_ClkConfiguration(void)
{
    RCC_DeInit();                   // 復位 RCC 到默認狀態

    // 啟用 HSI(高速內部時鐘,默認 16MHz)
    RCC_HSICmd(ENABLE);
    while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);  // 等待 HSI 就緒

    // 配置 PLL(PLL 輸入 = HSI/2,PLL 倍頻 = 32)
    RCC_PLLCmd(DISABLE);            // 先禁用 PLL
    WIZ_RCC_PLLConfig(
        RCC_PLLSource_HSI_Div2,     // PLL 時鐘源:HSI/2(8MHz)
        RCC_PLLMul_32,              // PLL 倍頻:32(8MHz × 32 = 256MHz)
        1                           // 保留參數(未使用)
    );

    RCC_PLLCmd(ENABLE);             // 啟用 PLL
    while (RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);  // 等待 PLL 就緒

    // 設置系統時鐘源為 PLL(256MHz)
    RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);

    // 配置總線時鐘分頻
    RCC_HCLKConfig(RCC_SYSCLK_Div1);   // HCLK = SYSCLK(256MHz)
    RCC_PCLK1Config(RCC_HCLK_Div2);    // PCLK1 = HCLK/2(128MHz)
    RCC_PCLK2Config(RCC_HCLK_Div1);    // PCLK2 = HCLK(256MHz)

    // 啟用 LSI(低速內部時鐘,默認 40kHz)
    RCC_LSICmd(ENABLE);
    while (RCC_GetFlagStatus(RCC_FLAG_LSIRDY) == RESET);

    // 重復啟用 HSI(冗余代碼,HSI 已啟用)
    RCC_HSICmd(ENABLE);
    while (RCC_GetFlagStatus(RCC_FLAG_HSIRDY) == RESET);
}

時鐘配置流程:

復位 RCC:重置所有時鐘配置。

啟用 HSI:使用內部 16MHz 時鐘。

配置 PLL:輸入:HSI/2 = 8MHz。

輸出:8MHz × 32 = 256MHz(系統時鐘 SYSCLK)。

選擇 PLL 作為系統時鐘源。

總線分頻:

HCLK(AHB 總線):256MHz(不分頻)。

PCLK1(APB1 總線):128MHz(HCLK/2)。

PCLK2(APB2 總線):256MHz(不分頻)。

啟用 LSI:用于獨立看門狗或 RTC(未在代碼中使用)。

冗余操作:重復啟用 HSI(無實際意義,HSI 已就緒)。

注意:

PLL 輸出頻率需符合芯片規格(如 W55MH32 的最大 SYSCLK 為 256MHz)。

WIZ_RCC_PLLConfig ()是自定義函數(來自 wiz.h),用于擴展 PLL 配置。

5. UART_Configuration ()函數:串口初始化

void UART_Configuration(uint32_t bound)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    USART_InitTypeDef USART_InitStructure;

    // 使能串口和 GPIO 時鐘
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    // 配置 TX 引腳(PA9):復用推挽輸出
    GPIO_InitStructure.GPIO_Pin   = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode  = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 配置 RX 引腳(PA10):浮空輸入
    GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    // 串口參數配置
    USART_InitStructure.USART_BaudRate            = bound;       // 波特率
    USART_InitStructure.USART_WordLength          = USART_WordLength_8b;  // 8 位數據
    USART_InitStructure.USART_StopBits            = USART_StopBits_1;    // 1 位停止位
    USART_InitStructure.USART_Parity              = USART_Parity_No;     // 無校驗
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  // 無流控
    USART_InitStructure.USART_Mode                = USART_Mode_Rx | USART_Mode_Tx;  // 收發模式

    USART_Init(USART_TEST, &USART_InitStructure);  // 初始化串口
    USART_Cmd(USART_TEST, ENABLE);                // 使能串口
}

功能:

使能 USART1 和 GPIOA 時鐘。

配置 PA9(TX)為復用推挽輸出,PA10(RX)為浮空輸入。

初始化串口參數(波特率、數據位、停止位等)。

使能串口。

6. 串口輸出函數

int SER_PutChar(int ch)
{
    while (!USART_GetFlagStatus(USART_TEST, USART_FLAG_TC));  // 等待發送完成
    USART_SendData(USART_TEST, (uint8_t)ch);                  // 發送字符
    return ch;
}

int fputc(int c, FILE *f)
{
    if (c == 'n') SER_PutChar('r');  // 換行符添加回車(適配終端)
    return SER_PutChar(c);             // 重定向 printf 到串口
}

核心功能:

系統時鐘配置:

使用 HSI(16MHz)作為 PLL 輸入,PLL 倍頻 32 倍,生成 256MHz 系統時鐘。

總線分頻:HCLK=256MHz,PCLK1=128MHz,PCLK2=256MHz。

串口通信:配置 USART1 為 115200 波特率,用于printf輸出。

測試驗證:打印系統各時鐘頻率,驗證時鐘配置正確性。

3.1.1 實驗現象

把編譯好的程序下載到開發板,可以看到設置不同的系統時鐘:

wKgZPGgu5e2ALwxjAABtz7PZycw335.png

3.2 RCC_HighFrequencyConfig

程序運行:

1. 頭文件與全局變量

引入了標準庫的頭文件以及自定義的delay.h、w55mh32.h、wiz.h頭文件,為程序提供所需的函數和數據類型。

定義全局變量USART_TEST并將其指向USART1,用于后續的串口通信操作。

2. 函數聲明

對UART_Configuration()和RCC_ClkConfiguration()函數進行聲明,前者用于配置串口,后者用于配置系統時鐘。

主函數main():

int main(void)
{
    RCC_ClocksTypeDef clocks;

    RCC_ClkConfiguration();
    delay_init();
    UART_Configuration(115200);

    printf("RCC Clock Config Test.n");
    RCC_GetClocksFreq(&clocks);

    printf("n");
    printf("SYSCLK: %3.1fMhz, nHCLK: %3.1fMhz, nPCLK1: %3.1fMhz, nPCLK2: %3.1fMhz, nADCCLK: %3.1fMhzn",
           (float)clocks.SYSCLK_Frequency / 1000000, (float)clocks.HCLK_Frequency / 1000000,
           (float)clocks.PCLK1_Frequency / 1000000, (float)clocks.PCLK2_Frequency / 1000000, (float)clocks.ADCCLK_Frequency / 1000000);

    while (1)
    {
    }
}

初始化完成之后,使用printf()函數打印輸出系統時鐘、AHB 總線時鐘、APB1 總線時鐘、APB2 總線時鐘和 ADC 時鐘的頻率信息,隨后進入無限循環,使程序持續運行。

4. RCC_ClkConfiguration()函數的主要流程:

復位 RCC 寄存器,為后續的時鐘配置做準備。

使能外部高速時鐘(HSE),并等待其穩定。

禁用 PLL,重新配置 PLL 的時鐘源和倍頻系數。

使能 PLL,并等待其穩定。

把系統時鐘源設置為 PLL 輸出。

配置 AHB、APB1 和 APB2 總線的時鐘分頻系數。

使能內部低速時鐘(LSI)和內部高速時鐘(HSI),并等待它們穩定。

5. UART_Configuration()函數

使能 USART1 和 GPIOA 的時鐘。

配置 USART1 的發送引腳(PA9)為復用推挽輸出模式,接收引腳(PA10)為浮空輸入模式。

配置 USART1 的波特率、數據位、停止位、奇偶校驗位等參數。使能 USART1。

6. SER_PutChar()函數:此函數用于向串口發送一個字符,會等待發送完成后再發送下一個字符。

7. fputc()函數:重定向標準輸出函數,把字符發送到串口。若遇到換行符n,會先發送回車符r。

3.2.1 實驗現象

wKgZO2gu5e2AFmdxAABrLd82PVU686.png

WIZnet 是一家無晶圓廠半導體公司,成立于 1998 年。產品包括互聯網處理器 iMCU?,它采用 TOE(TCP/IP 卸載引擎)技術,基于獨特的專利全硬連線 TCP/IP。iMCU? 面向各種應用中的嵌入式互聯網設備。

WIZnet 在全球擁有 70 多家分銷商,在香港、韓國、美國設有辦事處,提供技術支持和產品營銷。

香港辦事處管理的區域包括:澳大利亞、印度、土耳其、亞洲(韓國和日本除外)。

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • WIZnet
    +關注

    關注

    3

    文章

    24

    瀏覽量

    42370
  • RCC
    RCC
    +關注

    關注

    0

    文章

    95

    瀏覽量

    27393
  • HSI
    HSI
    +關注

    關注

    0

    文章

    13

    瀏覽量

    8763
  • HSE
    HSE
    +關注

    關注

    0

    文章

    18

    瀏覽量

    9595
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    《測控電路》習題完整參考答案(第九章

    《測控電路》習題完整參考答案(第九章
    發表于 05-07 11:41

    Sklearn與TensorFlow機器學習實用指南——第九章習題答案

    Sklearn 與 TensorFlow 機器學習實用指南——第九章習題答案
    發表于 05-13 13:28

    HSE/HSI配置時鐘

    第15RCC—使用HSE/HSI配置時鐘全套200集視頻教程和1000頁PDF教程請到秉火論壇
    發表于 08-06 08:03

    STM32 RCC-使用HSE/HSI配置時鐘

    STM32 RCC-使用HSE/HSI配置時鐘(以STM32MUX時鐘樹作為圖例)
    發表于 08-10 07:56

    編寫HSE/HSI配置系統時鐘函數

    主要內容為編寫HSE/HSI配置系統時鐘函數,通過相同的軟件延時函數使led燈閃爍,來觀察不同時鐘所產生的效果
    發表于 08-12 07:25

    怎樣去使用HSE/HSI配置RCC時鐘

    怎樣去使用HSE/HSI配置RCC時鐘呢?怎樣去設置系統時鐘的庫函數呢?
    發表于 11-10 07:08

    CH32V103基礎教程103-RCCHSE/HSI時鐘配置

    本章教程主要講述如何使用HSEHSI配置系統時鐘,可配合CH32V103應用手冊第三學習本教程。 1、
    發表于 05-15 16:43

    功率放大電路問答第九章

    功率放大電路問答第九章 自  測  題    一、選擇合適的答案,填入空內。只需填入A、B或C。    (1)功率放大電路的最大輸
    發表于 04-17 16:06 ?12次下載

    低頻功率放大電路 第九章

    低頻功率放大電路 第九章 本章要點:    功放的特點與分類    OCL電路
    發表于 04-18 14:29 ?0次下載

    振幅調制與解調 第九章

    振幅調制與解調 第九章    在通信系統中,模擬調制分為振幅調制和角度調制兩大類,本章主要討論振幅調制與解調,內容主要包括振幅調制信號分
    發表于 05-27 15:47 ?0次下載

    單片機c語言教程第九章--C51運算符和表達式(指針和地址運

    單片機c語言教程第九章--C51運算符和表達式(指針和地址運算符) 在第 3 課我們學習數據類型時,學習過指針類型,知道它是一種存放指向另一個數據的地址的變量類型
    發表于 04-15 09:39 ?1893次閱讀
    單片機c語言教程<b class='flag-5'>第九章</b>--C51運算符和表達式(指針和地址運

    《測控電路》習題完整參考答案(第九章

    《測控電路》習題完整參考答案(第九章
    發表于 02-14 17:02 ?0次下載

    STM32使用HSE、HSI作為系統時鐘的來源

    1、使用HSE,SYSCLK最高頻率是128M 一般情況下,我們都是使用HSE,然后HSE經過PLL倍頻之后作為系統時鐘。通常的配置是:
    發表于 12-04 14:41 ?9次下載

    【正點原子FPGA連載】第九章按鍵控制LED燈實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    【正點原子FPGA連載】第九章按鍵控制LED燈實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1
    發表于 12-04 13:06 ?10次下載
    【正點原子FPGA連載】<b class='flag-5'>第九章</b>按鍵控制LED燈實驗 -摘自【正點原子】新起點之FPGA開發指南_V2.1

    第九章 數模和模數轉換

    電子發燒友網站提供《第九章 數模和模數轉換.ppt》資料免費下載
    發表于 11-18 09:14 ?0次下載
    <b class='flag-5'>第九章</b> 數模和模數轉換