|
最近在學(xué)習(xí)STM32的外部中斷時(shí),例程上有這樣一句代碼RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE); 這句代碼的功能是使能復(fù)用功能時(shí)鐘,剛開始不知道為什么有時(shí)候需要啟動(dòng)RCC_APB2Periph_AFIO時(shí)鐘,有時(shí)候又不需要,之后在網(wǎng)上查找資料和看手冊(cè),終于搞清楚了。 STM32F10xxx的參考手冊(cè)中文版本對(duì)AFIO寄存器描述 STM32 AFIO復(fù)用功能寄存器(參考) AFIO_EVCR:復(fù)用事件控制寄存器 AFIO_MAPR:復(fù)用功能重映射和調(diào)試I/O配置寄存器,配置某些引腳第三功能。 AFIO_EXTICR1:外部中斷配置寄存器1,配置外部中斷EXTI0,1,2,3給Px0,Px1,Px2,Px3引腳。(x=A,B,C,D,E…) AFIO_EXTICR2:外部中斷配置寄存器2,配置外部中斷EXTI4,5,6,7給Px4,Px5,Px6,Px7引腳。(x=A,B,C,D,E…) AFIO_EXTICR3:外部中斷配置寄存器3,配置外部中斷EXTI8,9,10,11給Px8,Px9,Px10,Px11引腳。(x=A, B,C,D,E…) AFIO_EXTICR4:外部中斷配置寄存器4,配置外部中斷EXTI12,13,14,15給Px12,Px13,Px14,Px15引腳。(x=A,B,C,D,E…) 因?yàn)樵谂渲猛獠恐袛鄷r(shí),要對(duì) AFIO_EXTICRX進(jìn)行讀寫操作,所以要打開RCC_APB2Periph_AFIO時(shí)鐘。
RCC_APB2Periph_AFIO是重映射功能的時(shí)鐘,只要你沒有將特定的外設(shè)指定的IO Remap(重映射)到其它端口(也是指定的),就不需要打開AFIO時(shí)鐘。 比如說,在使用TIM1時(shí),因?yàn)槭褂玫哪J(rèn)的PA、PB相應(yīng)端口,并沒有進(jìn)行Remap,因此不需要讀寫AFIO寄存器,所以不需要啟動(dòng)RCC_APB2Periph_AFIO時(shí)鐘。 同時(shí)我也學(xué)到了關(guān)于重映射方面的一些知識(shí)。 STM32上有很多I/O口,也有很多的內(nèi)置外設(shè)想I2C,ADC,ISP,USART等 ,為了節(jié)省引出管腳,這些內(nèi)置外設(shè)基本上是與I/O口共用管腳的,也就是I/O管腳的復(fù)用功能。但是STM32還有一特別之處就是:很多復(fù)用內(nèi)置的外設(shè)的I/O引腳可以通過重映射功能,從不同的I/O管腳引出,即復(fù)用功能的引腳是可通過程序改變的。 比如USART2外設(shè)的TX,RX分別對(duì)應(yīng)PA2,PA3,如果PA2,PA3引腳接了其他設(shè)備,但是為了還要用USART2,我們就可以把USART2設(shè)備的TX,RX映射到PD5,PD6,應(yīng)該注意的是USART2的TX,RX是不可以映射到任意管腳的,它只能映射到固定的管腳,下圖是USART2重映射表 其他外設(shè)的重映射可以參考STM32100X手冊(cè) 庫函數(shù)的調(diào)用 (1)使能被重新映射到的I/O端口時(shí)鐘 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE); (2)使能被重新映射的外設(shè)時(shí)鐘 RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2, ENABLE); (3)使能AFIO功能的時(shí)鐘(勿忘!) RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE); (4)進(jìn)行重映射GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE); |
|
|