deanquan 发表于 2015-7-21 11:26:28

对于STM32 GPIO复用和重映射理解

对于GPIO复用和重映射功能我的理解。
       复用功能:对于很多的IO口都有复用功能,复用功能可以在DataSheet里面找到,要想用某个复用功能,首先把IO口配置成复用功能模式,复用输出输入模式(根据功能的不同配置成不同的模式,参考手册P110页里面有详细的介绍)。比如你想用PA8复用功能TIM1-CH1输出比较,先把PA8设置为推挽复用输出(GPIO_MODE_AF_PP)。再配置TIM1-CH1即可。

      重映射功能:每个IO口的重映射功能可以通过查看DataSheet找到。TIM3-CH1没有重映射的时候对应引脚PA6,当我选择部分重映射的时候对应引脚PB4,选择完全重映射的时候对应引脚未PC6,此时要主要在选择部分重映射和完全重映射的时候其他的引脚也有发生变化。


   另有个不解的地方就是库函数GPIO_PinRemapConfig,对照寄存器没有弄明白。

      欢迎大家聊聊这两个功能的其他理解。


       一起学习一起进步!

creep 发表于 2015-7-21 13:50:19

本帖最后由 creep 于 2015-7-21 18:36 编辑

库函数GPIO_PinRemapConfig就是用来重映射使用的啊。
就拿你说的TIM3-CH1如果没有映射的时候对应PA6。
TIM3-CH1如果部分重映射的对应PB4,使用下面的库函数设置:
GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3, ENABLE); //Timer3部分重映射TIM3_CH1->PB4   
TIM3-CH1如果完全重映射的对应PC6,使用下面的库函数设置:
GPIO_PinRemapConfig(GPIO_FullRemap_TIM3, ENABLE); //Timer3完全重映射 TIM3_CH1->PC6   

这种用来一般在F1系列使用,在F4重映射的使用下面的函数:
void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource, uint8_t GPIO_AF)
{
uint32_t temp = 0x00;
uint32_t temp_2 = 0x00;

/* Check the parameters */
assert_param(IS_GPIO_ALL_PERIPH(GPIOx));
assert_param(IS_GPIO_PIN_SOURCE(GPIO_PinSource));
assert_param(IS_GPIO_AF(GPIO_AF));

temp = ((uint32_t)(GPIO_AF) << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
GPIOx->AFR &= ~((uint32_t)0xF << ((uint32_t)((uint32_t)GPIO_PinSource & (uint32_t)0x07) * 4)) ;
temp_2 = GPIOx->AFR | temp;
GPIOx->AFR = temp_2;
}

苏柚 发表于 2015-7-21 14:33:34

creep 发表于 2015-7-21 13:50
库函数GPIO_PinRemapConfig就是用来重映射使用的啊。
就拿你说的TIM3-CH1如果没有映射的时候对应PA6。
TIM3 ...

{:3_59:}大神膜拜

creep 发表于 2015-7-21 15:01:33

苏柚 发表于 2015-7-21 14:33
大神膜拜

看了下你的研究,才发现你才是大神啊,求带!!
基于STM32F4 的图像压缩技术研究

苏柚 发表于 2015-7-21 15:04:36

creep 发表于 2015-7-21 15:01
看了下你的研究,才发现你才是大神啊,求带!!
基于STM32F4 的图像压缩技术研究 ...

{:3_53:}我只是把资源分享给大家而且    我是小白

moyanming2013 发表于 2015-7-21 15:10:01

学习了。。。

myFelix 发表于 2015-7-21 17:23:01

你们都是大牛

stary666 发表于 2015-7-21 17:45:58

看看,,,,,,,,
页: [1]
查看完整版本: 对于STM32 GPIO复用和重映射理解