【WCH蓝牙系列芯片】-基于CH32V208开发板—引脚端口复用和重映射功能

发布时间 2023-10-11 14:06:45作者: zyl4444

-------------------------------------------------------------------------------------------------------------------------------------

CH32V208GPIO的复用与重映射。CH32引脚默认是为普通GPIO管脚,在芯片手册中有很多种外设功能如串口、I2C、SPI等等。使用GPIO的复用为外设功能,重映射功能就是为了方便布线可以将部分引脚的功能转移到其他引脚上。
复用功能:
CH32V208所有外设功能引脚与普通GPIO功能引脚共同使用一个管脚。如果有多个复用功能模块对应同一个引脚,只能使能其中之一,其它功能保持非使能状态。
重映射功能:
复用功能的引出脚可以通过重映射,从不同的I/O管脚引出,即复用功能的引出脚位是可通过程序改变到其他的引脚上。也是为了方便布线可以将部分引脚的功能转移到其他引脚上。

例如:

在CH32V208芯片手册中,PA13引脚的默认复用功能是SWID,如果需要将PA13作为普通IO口使用,需要通过关闭SWIOD复用功能,利用重映射将PA13成为IO口使用

//将PA13的I/O功能由重映射得到,注意使用PA13其作为普通GPIO引脚使用时,不能使用SWDIO功能
void GPIO_Toggle_INIT(void)
{
    GPIO_InitTypeDef GPIO_InitStructure = {0};

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);  //使能GPIO外设时钟
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);   //使能AFIO外设的时钟。AFIO 外设主要用于配置引脚的重映射。
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE);     //配置 GPIO 引脚重映射,禁用 JTAG 和 SW 调试功能的引脚重映射,释放引脚功能

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    GPIO_SetBits(GPIOA, GPIO_Pin_13);
}

int main(void)
{
    u8 i = 0;

    NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
    Delay_Init();
    USART_Printf_Init(115200);

    while(1)
    {
GPIO_ResetBits(GPIOA, GPIO_Pin_13); printf(
"2222\r\n"); Delay_Ms(500);
GPIO_SetBits(GPIOA, GPIO_Pin_13); printf(
"11111\r\n"); Delay_Ms(500); } }

重映射配置过程:
1、通过配置,使能复用端口的时钟
2、使能复用外设的时钟
3、使能AFIO时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO, ENABLE);
4、重映射配置调用GPIO_PinRemapConfig();

 此时,SWID复用功能不能使用,就不能通过LINK使用两线接口下载程序。

重映射配置过程:
1、使能复用端口的时钟
2、使能复用外设的时钟
3、GPIO的端口模式配置,根据应用手册进行配置

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_Init(GPIOA, &GPIO_InitStructure);