新聞中心

STM32之AFIO

作者: 時間:2016-12-03 來源:網(wǎng)絡 收藏
也許你以為IO和AFIO是很簡單的,事實上有幾個誤區(qū)可能很多人都沒注意過,當你只用現(xiàn)成的開發(fā)板來學習的時候,別人已經(jīng)幫你做好了資源分配,所有的外設功能學習都是照著別人給你的例程去做的,這才沒讓你覺得奇怪。

先問自己一個問題:STM32中,USART2和TIM2是共用相同IO的,你如何決定這幾個IO到底是做USART2還是做TIM2呢?如果你要同時使用USART2和TIM2,該怎么辦?

本文引用地址:http://m.butianyuan.cn/article/201612/325159.htm

1、不是說使用了IO的復用功能就一定要啟動RCC_APB2Periph_AFIO的Clock的,參考下圖

只有使用了AFIO的事件控制寄存器、AFIO的重映射功能以及外部中斷(EXTI)控制寄存器才需要開啟AFIO的時鐘,STM32參考手冊從來沒說過使用IO的復用功能就一定要開啟AFIO時鐘,這是個誤區(qū)。

例如下面的,最常用的USART1,如果你的板子上,默認用的就是PA9和PA10這兩個IO作為USART1的TX和TX,那么也就是沒有重映射,No Remap,這種情況下根本不需要開啟AFIO時鐘,只要開啟USART1的外設時鐘就行了。這個實驗很簡單,自己試試就知道了。

2、從上面的圖你可以看到,原來USART1是可以放在PB6和PB7上面的,只不過幾乎所有的原理圖封裝中都不會在PB6和PB7的復用功能上標出它可以當USART1用,畢竟這種重映射的情況太多,幾乎所有外設都可以重映射,每個都標出來會非?;靵y。

STM32中,USART2的CTS、RTS、TX、RX和TIM2的CH1~CH4都在PA0~PA3上面,具體要如何選擇這兩個功能呢?

如果要使用USART2,就開始USART2的外設時鐘,如果要使用TIM2,就開啟TIM2的外設時鐘,如果你同時開啟,我也不知道會怎么樣,你可以自己試試,我覺得應該是兩個都不能用。如果你一定要在PA0~PA3上使用這兩個功能,只能是時分復用。

正確的同時使用USART2和TIM2,應該是使用上面提到的AFIO_Remap寄存器,將其中的一個重映射到其他IO上去,當然這樣其他IO的本身的復用功能你就不能開啟了。

回到前面的問題,如果你不做Remap,你根本不可能同時在PA0~PA3上同時使用這兩個外設,現(xiàn)在你的方案有兩種:

一、保留USART2在PA口上,將TIM2完全重映射(Full Remap)到其他IO上,或者,如果你不用RTS和CTS的硬件流控制,PA0(CTS)和PA1(RTS)上對應的CH1和CH2是可以不用重映射的,只需要將Bit9:8改成10,也就是將CH3和CH4部分重映射到PB10和PB11上去,而CH1和CH2繼續(xù)保留在PA0和PA1上。但這種情況下,PB10和PB11上的I2C2和USART3就不能用了。

二、保留TIM2在PA口,將USART2重映射到PD口上,很明顯,當TIM2完全不重映射時,USART2必須的信號線只有Clock不受影響,這種情況下也沒有部分映射可言了,必須將USART2完全重映射到PD3~PD7上,同樣的,這種情況下FSMC就不能用了。



關鍵詞: STM32AFI

評論


技術專區(qū)

關閉