春风知意 发表于 2023-11-22 14:02

重映射问题

本帖最后由 春风知意 于 2023-11-22 14:24 编辑

按照官方例程我跑了CAN,例程里面有重映射时钟使能,请问这个重映射时钟使能是什么时候和条件要调用这个函数?我看到官方例程中spi,uart都没调用,不应该都是一样吗?感谢解答
static void can_gpio_init(void)
{
   GPIO_InitType GPIO_InitStructure;

   /* Initializes the GPIO */
   GPIO_Structure_Initialize(&GPIO_InitStructure);

   /* configure CAN pin */
   RCC_AHB_Peripheral_Clock_Enable(RCC_AHB_PERIPH_GPIOB);
   RCC_APB2_Peripheral_Clock_Enable(RCC_APB2_PERIPH_AFIO);

   GPIO_InitStructure.Pin            = GPIO_PIN_6;
   GPIO_InitStructure.GPIO_Mode      = GPIO_MODE_AF_PP;
   GPIO_InitStructure.GPIO_Alternate = GPIO_AF11_CAN;
   GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);

   GPIO_InitStructure.Pin             = GPIO_PIN_7;
   GPIO_InitStructure.GPIO_Alternate= GPIO_AF11_CAN;
   GPIO_Peripheral_Initialize(GPIOB, &GPIO_InitStructure);
}

下面是spi的例程
void GPIO_Configuration(void)
{                              
    GPIO_InitType GPIO_InitStructure;

    GPIO_Structure_Initialize(&GPIO_InitStructure);
    /* Configure slave pins: NSS, SCK, MISO and MOSI */
    /* Confugure SPI pins as Input Floating */
    GPIO_InitStructure.Pin      = SPI_SLAVE_CLK_PIN | SPI_SLAVE_MOSI_PIN | SPI_SLAVE_MISO_PIN | SPI_SLAVE_NSS_PIN;
    GPIO_InitStructure.GPIO_Mode= GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Alternate = SPI_SLAVE_GPIO_ALTERNATE;
    GPIO_Peripheral_Initialize(SPI_SLAVE_GPIO, &GPIO_InitStructure);

    /* Configure master pins: NSS, SCK, MISO and MOSI */
    /* Confugure SPI pins as Alternate Function Push Pull */
    GPIO_InitStructure.Pin      = SPI_MASTER_MOSI_PIN | SPI_MASTER_MISO_PIN | SPI_MASTER_NSS_PIN;
    GPIO_InitStructure.GPIO_Mode= GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
    GPIO_InitStructure.GPIO_Alternate = SPI_MASTER_GPIO_ALTERNATE;
    GPIO_Peripheral_Initialize(SPI_MASTER_GPIO, &GPIO_InitStructure);
    /* If CLKPOL is HIGH, set SPI_SCK GPIO to GPIO_PULL_UP, otherwise set to GPIO_PULL_DOWN */
    GPIO_InitStructure.Pin            = SPI_MASTER_CLK_PIN;
    GPIO_InitStructure.GPIO_Mode      = GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Slew_Rate = GPIO_SLEW_RATE_FAST;
    GPIO_InitStructure.GPIO_Pull      = GPIO_PULL_DOWN;
    GPIO_InitStructure.GPIO_Alternate = SPI_MASTER_GPIO_ALTERNATE;
    GPIO_Peripheral_Initialize(SPI_MASTER_GPIO, &GPIO_InitStructure);

}
void GPIO_Configuration(void)
{
    GPIO_InitType GPIO_InitStructure;

    /* Initialize GPIO_InitStructure */
    GPIO_Structure_Initialize(&GPIO_InitStructure);

    /* Configure USARTy Tx as alternate function push-pull */
    GPIO_InitStructure.Pin            = USARTy_TxPin;   
    GPIO_InitStructure.GPIO_Mode      = GPIO_MODE_AF_PP;
    GPIO_InitStructure.GPIO_Alternate = USARTy_Tx_GPIO_AF;
    GPIO_Peripheral_Initialize(USARTy_GPIO, &GPIO_InitStructure);

    /* Configure USARTz Tx as alternate function push-pull */
    GPIO_InitStructure.Pin            = USARTz_TxPin;
    GPIO_InitStructure.GPIO_Alternate = USARTz_Tx_GPIO_AF;
    GPIO_Peripheral_Initialize(USARTz_GPIO, &GPIO_InitStructure);

    /* Configure USARTy Rx as alternate function push-pull and pull-up */
    GPIO_InitStructure.Pin            = USARTy_RxPin;
    GPIO_InitStructure.GPIO_Pull      = GPIO_PULL_UP;
    GPIO_InitStructure.GPIO_Alternate = USARTy_Rx_GPIO_AF;
    GPIO_Peripheral_Initialize(USARTy_GPIO, &GPIO_InitStructure);   

    /* Configure USARTz Rx as alternate function push-pull and pull-up */
    GPIO_InitStructure.Pin            = USARTz_RxPin;
    GPIO_InitStructure.GPIO_Alternate = USARTz_Rx_GPIO_AF;
    GPIO_Peripheral_Initialize(USARTz_GPIO, &GPIO_InitStructure);   
}


豌豆爹 发表于 2023-11-22 15:20

重映射时钟使能是一个相对底层的功能,通常在需要进行特别时钟配置的情况下使用。对于SPI和UART等通用接口,通常不需要进行特别的时钟配置。

玄德 发表于 2023-11-22 21:22


重映射类似于一块矩阵开关电路,用到这块电路就必须打开它的时钟,否则它无法工作。
你说的那些没有打开时钟的应用,很可能用到的管脚恰恰就是默认连接好的,并不需要启动矩阵开关。

春风知意 发表于 2023-11-23 13:35

豌豆爹 发表于 2023-11-22 15:20
重映射时钟使能是一个相对底层的功能,通常在需要进行特别时钟配置的情况下使用。对于SPI和UART等通用接口 ...

好的,谢谢回复
页: [1]
查看完整版本: 重映射问题