首先爲什麼要開啓時鐘?
答:因爲要對寄存器進行讀寫!而在STM32中對寄存器的讀寫都是要打開寄存器對應的時鐘纔可以的【就像人一樣,有了跳動的脈搏手臂纔能有能量才能進行各種動作】。
然後就什麼時候AFIO時鐘開啓(所有時鐘都是這樣)就清楚了:當需要對“AFIO時鐘管理的寄存器”進行讀寫時AFIO時鐘打開!當然不對“AFIO時鐘管理的寄存器”讀寫時也可以打開AFIO時鐘,此時只是白白增加能耗、寫無用代碼(白白浪費程序存儲器空間)而已!
接下來:跟AFIO相關的寄存器有哪些呢?
答:根據《STM32中文參考手冊_V10》有:①事件控制寄存器(AFIO_EVCR)、②複用重映射和調試I/O 配置寄存器(AFIO_MAPR)、③外部中斷配置寄存器1(AFIO_EXTICR1)、④外部中斷配置寄存器2(AFIO_EXTICR2)、⑤外部中斷配置寄存器3(AFIO_EXTICR3)、⑥外部中斷配置寄存器4(AFIO_EXTICR4)。
應用:在usart1串口通信沒有端口重映射時爲什麼不打開AFIO時鐘?PA9、PA10作爲通用I/O口也複用了,爲什麼不打開爲什麼不打開復用時鐘?
答:AFIO全稱:Alternatefunction I/O alternate備用的、替代的、交替的,所以AFIO可翻譯爲“備用功能I/O”,原英文手冊上解釋很清楚:[《STM32英文手冊》P152]
To optimize the number of peripheralsavailable for the 64-pin or the 100-pin or the 144-pin package, it ispossible to remap somealternate functions to some other pins. This is
achieved by software, by programming the AFremap and debug I/O configuration register(AFIO_MAPR) on page 159. In thiscase, the alternate functions are no longer mapped to
their original assignations.
可見AFIO就設計用來remapsome alternate functions to some other pins的,所以根本就沒有什麼“複用”之說,看來都是翻譯惹的禍!另外看一下I/O複用時的情況就更清楚了
[STM32中文參考手冊_V10》P109]:
可見,當設置“PA9爲GPIO_Mode_AF_PP(只是一個常數0x18)、PA10爲GPIO_Mode_IN_FLOATING(只是一個常數0x04)”時PA9、PA10就已經直接跟串口的相應寄存器連接上了,而串口的寄存器不需要AFIO時鐘、PA9/PA10也不許要AFIO時鐘,同時有沒有對AFIO相應的寄存器操作所以根本不用開啓AFIO時鐘!