************************************************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;}
1 回答

飲歌長嘯
TA貢獻1951條經驗 獲得超3個贊
這函數實際是完成AFIO->MAPR寄存器的配置,我就是嫌這代碼寫的太煩了,所以直接對寄存器進行操作。比如將串口2重映射時,就是:
AFIO->MAPR|=GPIO_Remap_USART2;
要取消重映射,就是:
AFIO->MAPR&=~GPIO_Remap_USART2;
GPIO_Remap_USART2在stm32f10x_GPIO.h中是有定義的,AFIO->MAPR寄存器各個位的定義在參考手冊中有詳細描述。
- 1 回答
- 0 關注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消