有官方库函数就更好了…………
代码如下:
************************************************
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState)
{
uint32_t tmp = 0x00, tmp1 = 0x00, tmpreg = 0x00, tmpmask = 0x00;
/* Check the parameters */
assert_param(IS_GPIO_REMAP(GPIO_Remap));
assert_param(IS_FUNCTIONAL_STATE(NewState));
tmpreg = AFIO->MAPR;
tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;
tmp = GPIO_Remap & LSB_MASK;
if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
{
tmpreg &= DBGAFR_SWJCFG_MASK;
AFIO->MAPR &= DBGAFR_SWJCFG_MASK;
}
else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
{
tmp1 = ((uint32_t)0x03) << tmpmask;
tmpreg &= ~tmp1;
tmpreg |= ~DBGAFR_SWJCFG_MASK;
}
else
{
tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));
tmpreg |= ~DBGAFR_SWJCFG_MASK;
}
if (NewState != DISABLE)
{
tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));
}
AFIO->MAPR = tmpreg;
}
还有一些宏定义………那位高手能帮小弟QQ解答一下,,如果解答正确再加悬赏
我不知道可以和你一样写的很简单,可为什么库函数偏要这样写??也没看太清楚…………
追答固件库的操作,一般就是读-修改-写。
比如这里: tmpreg = AFIO->MAPR;是将MAPR寄存器中的内容读取出来。
之后的代码就根据函数的形参传递的数据进行修改。
AFIO->MAPR = tmpreg时将修改后的结果写回MAPR,就见到效果了。
固件库这么干是为了严谨无误,我用的方式要求自己有清晰的判断,不然很容易出错。
#define GPIO_PartialRemap_USART3 ((uint32_t)0x00140010) /* USART3 Partial Alternate Function mapping */
就说这个宏定义吧,我不太懂,
01: 部分映像(TX/PC10,RX/PC11,CK/PC12,CTS/PB13,RTS/PB14);
怎么不是定义成 0x10; 而是0x00140010;我不懂前面还有14了??
这的确是一个问题,因为PC11引脚还可以作为ADC的外部触发信号输入,所以固件库这么定义是为了将ADC的触发信号转移到TIM8上,不然在串行通信时PC11上的电平电话会引起错误的ADC工作。
stm32的AFIO是什么意思
意思是如果在你的程序中,某些外设用的是复用IO口,就必须开该复用时钟。比如在STM32F103VET6中USART3的IO口为(TX\/PB10,RX\/PB11)。但是如果你要是将给外设IO口映射到(TX\/PC10,RX\/PC11)或者(TX\/PD8,RX\/PD9),那就必须开启AFIO时钟了,否则外设不会正常工作。
IO口模式
1、复用功能:内置外设是与I\/O口共用引出管脚(不同的功能对应同一管脚) STM32 所有内置外设的外部引脚都是与标准GPIO引脚复用的,如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它模块保持非使能状态。 2、重映射功能:复用功能的引出脚可以通过重映射,从不同的I\/O管脚引出,即复用功 能的引出脚位是可...
如何实现gpio口模式的配置
\\x0d\\x0a\\x0d\\x0a(参考AFIO_MAPR寄存器介绍)[0,1为一寄存器的bit值]\\x0d\\x0a\\x0d\\x0a【注】 下述复用功能的引出脚具有重映射功能:\\x0d\\x0a\\x0d\\x0a - 晶体振荡器的引脚在不接晶体时,可以作为普通I\/O口\\x0d\\x0a\\x0d\\x0a - CAN模块; - JTAG调试接口;- 大部分定时器的引出接口...