打印
[N32G43x]

关于GPIO复用功能重映射,一个外设映射到多个IO

[复制链接]
586|25
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Afanx|  楼主 | 2023-3-14 10:32 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
GPIO模块配置(二)【除N32G45x外其他系列】 https://bbs.21ic.com/icview-3276040-1-1.html

在测试GPIO复用功能时候发现一个有意思的现象,就是一个IO只能指定一个复用功能,这样可以避免一个IO同时做UART和SPI功能引脚。因为每个IO都有一个(GPIOx_AFL/GPIOx_AFH)寄存器知道复用功能。比如下面这个配置后PA9、PA10只能用作USART1功能。

void UART_GPIO_Config(USART_Module* USARTx)
{
    GPIO_InitType GPIO_InitStructure;
    if (USARTx == USART1) {
        RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOA, ENABLE);
        /* Tx--PA9  Rx--PA10 */
        GPIO_InitStruct(&GPIO_InitStructure);
        GPIO_InitStructure.Pin            = GPIO_PIN_9 | GPIO_PIN_10;
        GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Slew_Rate = GPIO_Slew_Rate_High;
        GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART1;
        GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
    }
}

但这时在想,如果其他IO也复用为USART1的引脚呢,比如PA4\PA5,PB6\PB7也同时配置为复用功能,并且都复用为USART1。



void UART_GPIO_Config(USART_Module* USARTx)
{
    GPIO_InitType GPIO_InitStructure;
    if (USARTx == USART1) {
        RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_AFIO | RCC_APB2_PERIPH_GPIOA | RCC_APB2_PERIPH_GPIOB, ENABLE);

        /* Tx--PA9  Rx--PA10 */
        GPIO_InitStruct(&GPIO_InitStructure);
        GPIO_InitStructure.Pin            = GPIO_PIN_9 | GPIO_PIN_10;
        GPIO_InitStructure.GPIO_Mode      = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Slew_Rate = GPIO_Slew_Rate_High;
        GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART1;
        GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

        /* Tx--PA4  Rx--PA5 */
        GPIO_InitStructure.Pin            = GPIO_PIN_4;
        GPIO_InitStructure.GPIO_Alternate = GPIO_AF1_USART1;
        GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
        GPIO_InitStructure.Pin            = GPIO_PIN_5;
        GPIO_InitStructure.GPIO_Alternate = GPIO_AF4_USART1;
        GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);

        /* Tx--PB6  Rx--PB7 */
        GPIO_InitStructure.Pin            = GPIO_PIN_6 | GPIO_PIN_7;
        GPIO_InitStructure.GPIO_Alternate = GPIO_AF0_USART1;
        GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
    }
}


这个时候有趣的现象出现了,PA9、PA4、PB6 三个复用输出功能,同时复用到了USART1--Tx。
而PA10、PA5、PB7三个复用输入功能,只有一个(PA10)复用到了USART1--Rx。

根据目前测试现象猜测,针对N32G43x系列(拥有独立GPIOx_AFL/GPIOx_AFH寄存器的系列),外设引脚重映射:
如果作为输出功能,一个外设输出可以映射到多个IO;
如果作为输入功能,一个外设只能映射到一个IO(避免输入信号冲突)。

(如果有错误,欢迎指出共同讨论~)




使用特权

评论回复
沙发
tpgf| | 2023-4-3 14:15 | 只看该作者
这种引脚复用,只能是考虑一下分时服用了

使用特权

评论回复
板凳
aoyi| | 2023-4-3 15:39 | 只看该作者
如果出现了三个引脚复用到了一个串口上 会报错吗

使用特权

评论回复
地板
nawu| | 2023-4-3 15:54 | 只看该作者
请问楼主可以同时在三个引脚上检测到相同的数据吗

使用特权

评论回复
5
zljiu| | 2023-4-3 16:37 | 只看该作者
这个结论是楼主的推测  感觉也是不无道理 有官方的人员来给说法吗

使用特权

评论回复
6
gwsan| | 2023-4-3 16:59 | 只看该作者
不知道针对其他的系列会不会这种现象出现呢

使用特权

评论回复
7
tfqi| | 2023-4-3 17:17 | 只看该作者
gwsan 发表于 2023-4-3 16:59
不知道针对其他的系列会不会这种现象出现呢

如果楼主的猜测分析是正确的话 那么我觉得其他芯片也是这个情况

使用特权

评论回复
8
caigang13| | 2023-4-3 20:53 | 只看该作者
同一个IO肯定只能复用成一个功能外设啊

使用特权

评论回复
9
Afanx|  楼主 | 2023-4-4 15:30 | 只看该作者
nawu 发表于 2023-4-3 15:54
请问楼主可以同时在三个引脚上检测到相同的数据吗

是的,用逻辑分析仪在三个串口发送引脚检测到相同的波形

使用特权

评论回复
10
51xlf| | 2023-4-8 22:13 | 只看该作者
复用功能的引出脚可以通过重映射,从不同的I/O管脚引出

使用特权

评论回复
11
qiufengsd| | 2023-4-8 22:27 | 只看该作者
如何实现gpio口模式的配置?

使用特权

评论回复
12
uytyu| | 2023-4-9 14:29 | 只看该作者
GPIO端口的复用功能怎么理解?

使用特权

评论回复
13
qiufengsd| | 2023-4-9 14:35 | 只看该作者
如何使用N32G45x的端口重映射

使用特权

评论回复
14
averyleigh| | 2023-4-9 15:40 | 只看该作者
这个复用功能还支持很多端口的吗              

使用特权

评论回复
15
bartonalfred| | 2023-4-9 16:21 | 只看该作者
SPI1重映射怎样配置               

使用特权

评论回复
16
sanfuzi| | 2023-4-9 16:24 | 只看该作者
重映射功能之后,原来的引脚还能继续进行复用功能么

使用特权

评论回复
17
albertaabbot| | 2023-4-9 16:29 | 只看该作者
当gpio端口,作为复用功能时,还能再使用它的初始功能吗

使用特权

评论回复
18
claretttt| | 2023-5-7 10:41 | 只看该作者
配置复用功能,gpio口不用配置了吗

使用特权

评论回复
19
gygp| | 2023-5-7 13:52 | 只看该作者
重映射就是可以把某些功能端口从缺省的端口分配到别的端口上,那样可以方便线路板布局

使用特权

评论回复
20
tifmill| | 2023-5-7 15:24 | 只看该作者
GPIO各模式如何用?               

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

51

帖子

1

粉丝