STM32管教復用與重映射關系


摘自:http://blog.csdn.net/lincheng15/article/details/51789093

 

  概括一下:復用就是一個引腳有幾個功能,1.做普通IO輸入輸出  2.其他外設的輸入輸出(比如I2C,TIM,SPI等等),這就是復用。

  重映射就是將引腳功能重新定義到其他引腳,例如PA9是USART1-TX默認的管腳,但是現在PA9用做它用了,那可以將USART1-TX重新映射到PB6,當然這種映射不是隨意的想映射到哪個腳就哪個腳,芯片內部已經固定了只能映射到固定的地方

  MCU復位后PA8的默認功能是普通IO管腳,我想將它設為TIM1的PWM-CH1復用輸出,如下圖,通過設置TIM_REMAP[1:0]寄存器,可以實現(沒有重映射)(部分重映射)(完全重映射)三種映射。

  

  

 1 void TIM1_PWM_Init(u16 arr,u16 psc)
 2 {                              
 3     //
 4     RCC->APB2ENR|=1<<11;     //開啟TIM1定時器
 5     GPIOA->CRH&=0XFFFFFFF0;    //清除PA8
 6     GPIOA->CRH|=0X0000000B;    //設置PA8為頻率最大50MHZ復用推完輸出模式
 7     
 8     TIM1->ARR=arr;            //設置計數器自動重裝值
 9     TIM1->PSC=psc;            //預分頻器設置
10   
11     TIM1->CCMR1|=7<<4;      //CH1 PWM2模式   
12     TIM1->CCMR1|=1<<3;      //CH1預裝載使能   
13     TIM1->CCER|=1<<0;       //OC1輸出使能
14     TIM1->BDTR|=1<<15;      //MOE主輸出使能
15 
16     TIM1->CR1=0x0080;       //ARPE使能
17     TIM1->CR1|=0x01;        //使能定時器1                                       
18 }  

  那如果我PA8已經用作其他了。想將其重映射咋辦,看如下圖

 1 //TIM1_CH1 PWM復用重映射輸出
 2 void TIM1_PWM_Init(u16 arr,u16 psc)
 3 {                              
 4     RCC->APB2ENR|=1<<11;     //TIM1時鍾使能
 5     RCC->APB2ENR|=1<<6;//開啟PE時鍾(開啟待重映射管腳的時鍾)
 6     RCC->APB2ENR|=1<<0;//開啟AFIO時鍾
 7 
 8     GPIOE->CRH&=0XFFFFFF0F;    //PE9清除,待重映射引腳
 9     GPIOE->CRH|=0X000000B0;    //PE9設置成復用推完輸出最大50MHZ
10     AFIO->MAPR&=0XFFFFFF3F; //TIM1_REMAP端口清除
11     AFIO->MAPR|=0X000000C0; //TIM1_REMAP端口復用重映射功能開啟
12     
13     TIM1->ARR=arr;            //重裝載值 
14     TIM1->PSC=psc;            //預分頻器值
15   
16     TIM1->CCMR1|=7<<4;      //CH1 PWM2模式     
17     TIM1->CCMR1|=1<<3;         //CH1預裝載使能
18      TIM1->CCER|=1<<0;       //OC1 輸出使能   
19     TIM1->BDTR|=1<<15;       //MOE主輸出使能
20 
21     TIM1->CR1=0x0080;       //ARPE使能
22     TIM1->CR1|=0x01;        //使能定時器1                                           
23 }          

 

  按照上圖 只有兩種映射 部分映射和完全映射 如果是部分映射  改變的是BKIN,CH1N,CH2N,CH3N這幾個腳而已,所以應該選完全映射 就可以將TIM1的PWM-CH1重映射到PE9這個腳去

  關於這個問題,我的理解是:例如上圖,假如說 連CH2 CH3 CH4也以前用了的話 那就沒辦法了 都會一起被重新映射走了,也就說CH2=PE11 CH3=PE13 CH4 =PE14沒辦法只做到只映射了一個過來而已
那如果說只使用了CH1的話 那就不會有影響 PE11 PE13 PE14照樣當做普通IO使用不用將這幾個管腳的復用功能打開就可以了 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM