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。。為了統一格式,一律先開時鍾再配置
