stm32库函数GPIO_PinRemapConfig分析
来源:互联网 发布:php array shift函数 编辑:程序博客网 时间:2024/09/21 08:59
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->MAPR2;//大容量的芯片扩展GPIO_Remap
}
else
{
tmpreg = AFIO->MAPR;//基本GPIO_Remap
}
tmpreg &= DBGAFR_SWJCFG_MASK;//将要配置的内容赋值给变量tmpreg
AFIO->MAPR &= DBGAFR_SWJCFG_MASK;//将SWJ_CFG控制位清零
}
tmp1 = ((uint32_t)0x03) << tmpmask;//找到要配置的位
tmpreg &= ~tmp1;//将要配置的内容赋值给变量tmpreg
tmpreg |= ~DBGAFR_SWJCFG_MASK;//保留SWJ_CFG的控制位后的tmpreg
}
tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));//将要配置的内容赋值给变量tmpreg
tmpreg |= ~DBGAFR_SWJCFG_MASK;//保留SWJ_CFG的控制位后的tmpreg
}
if (NewState != DISABLE)
{
tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));//使能或失能某个外设的重映射
}
if((GPIO_Remap & 0x80000000) == 0x80000000)
{
AFIO->MAPR2 = tmpreg;
}
else
{
AFIO->MAPR = tmpreg;//将配置内容写到AFIO_MAPR寄存器中
}
{
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)); //同上
if((GPIO_Remap & 0x80000000) == 0x80000000)//判断GPIO_Remap范围
tmpreg = AFIO->MAPR2;//大容量的芯片扩展GPIO_Remap
}
else
{
tmpreg = AFIO->MAPR;//基本GPIO_Remap
}
tmpmask = (GPIO_Remap & DBGAFR_POSITION_MASK) >> 0x10;//以USART3为例(0x00140010&0x000F0000)>>0x10等于0x00000004,有寻找(有2个控制位的)USART3-REMAP在AFIO_MAPR的位置作用
if ((GPIO_Remap & (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK)) == (DBGAFR_LOCATION_MASK | DBGAFR_NUMBITS_MASK))
//串行线JTAG配置
{tmpreg &= DBGAFR_SWJCFG_MASK;//将要配置的内容赋值给变量tmpreg
AFIO->MAPR &= DBGAFR_SWJCFG_MASK;//将SWJ_CFG控制位清零
}
else if ((GPIO_Remap & DBGAFR_NUMBITS_MASK) == DBGAFR_NUMBITS_MASK)
//配置有两个控制位复用重映射
{tmp1 = ((uint32_t)0x03) << tmpmask;//找到要配置的位
tmpreg &= ~tmp1;//将要配置的内容赋值给变量tmpreg
tmpreg |= ~DBGAFR_SWJCFG_MASK;//保留SWJ_CFG的控制位后的tmpreg
}
else
//配置有1个控制位复用重映射
{tmpreg &= ~(tmp << ((GPIO_Remap >> 0x15)*0x10));//将要配置的内容赋值给变量tmpreg
tmpreg |= ~DBGAFR_SWJCFG_MASK;//保留SWJ_CFG的控制位后的tmpreg
}
if (NewState != DISABLE)
{
tmpreg |= (tmp << ((GPIO_Remap >> 0x15)*0x10));//使能或失能某个外设的重映射
}
if((GPIO_Remap & 0x80000000) == 0x80000000)
{
AFIO->MAPR2 = tmpreg;
}
else
{
AFIO->MAPR = tmpreg;//将配置内容写到AFIO_MAPR寄存器中
}
}
新手第一次写博客,内容简介,分析不够深入,请见谅!
- stm32库函数GPIO_PinRemapConfig分析
- stm32库函数void SystemInit (void)分析
- STM32库函数之GPIO初始化代码分析
- STM32:STM32库函数配置
- stm32 Flash读写[库函数]
- stm32库函数FSMC_NORSRAMInit()解析
- stm32库函数GPIO_Init()解析
- stm32库函数GPIO_Init()解析
- stm32 Flash读写[库函数]
- stm32 Flash读写[库函数]
- 解析STM32的库函数
- stm32库函数学习笔记
- ## stm32库函数初探 ##
- STM32 库函数编写程序
- STM32单片机常用库函数
- 新建STM32库函数工程
- Stm32库函数头文件
- STM32-USART库函数
- vs调试技巧
- IOCP+WinSock2新函数打造高性能SOCKET池
- 【工具】show_space
- 音视频即时通讯应用
- The Best Questions for Would-be C++ Programmers, Part 2
- stm32库函数GPIO_PinRemapConfig分析
- 内存_页的使用
- scala对map的操作
- Android FileObserver
- javax.persistence.TransactionRequiredException: no transaction is in progress
- Android项目proguard代码混淆遇到的一系列问题,外部jar,Gson包等
- N-Queens II
- 作业
- sqlldr和外部表使用记录