STM32重映射(PinRemap)的使用,注意!


STM32重映射,內容和細節稍后補充,這里只說幾個注意點,花了我一晚上的時間調試終於找到問題所在了。。。

 

芯片: STM32f107vct6

晶振: 25M

通過分頻器與鎖相環,使系統時鍾為72M

背景: SPI3的重映射使用

 

一、

重映射函數原型:

void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)

STM32f107vct6不是FPGA,重映射是固定的,無法自行指定,要查表,看看映射到了哪

比如SPI3,查詢datasheet(好好利用ctrl+f)后可知

Alternate function SPI3_REMAP = 0  SPI3_REMAP = 1
SPI3_NSS  PA15 PA4
SPI3_SCK  PB3 PC10
SPI3_MISO PB4 PC11
SPI3_MOSI PB5 PC12

 

 

 

 

 

 

二、

非常重要!remap一定要在時鍾使能之后配置,否則無效

神奇了真是

重映射步驟
· (1)使能被重新映射到的I/O端口時鍾
  RCC_APB1PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
· (2)使能被重新映射的外設時鍾
  RCC_APB2PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
· (3)使能AFIO功能的時鍾
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
· (4)進行重映射

  GPIO_PinRemapConfig(GPIO_Remap_USART2, ENABLE);

 

注:· (1)(2)(3)順序可換,

 

  · 或者,在APB2總線上的設備,用 或( | ) 一起進行時鍾使能,

     RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE);

    但一定要在(4)之前。否則remap無法配置成功  

 

  · GPIO的配置雖然可以先GPIO再RCC。。為了統一格式,一律先開時鍾再配置

 

 

 

 

 


免責聲明!

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



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