打印
[LKS32 软件]

IO口复用为串口后,想继续改变成普通IO口如何操作?

[复制链接]
802|37
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dreamstart|  楼主 | 2024-8-19 14:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    GPIO_PinAFConfig(GPIO0, GPIO_PinSource_9, AF4_UART); //P0.9复用为UART_RX
    GPIO_PinAFConfig(GPIO0, GPIO_PinSource_7, AF4_UART); //P0.7复用为UART_TX


如上,IO口复用了串口,如何关闭复用? 这样GPIO_PinAFConfig(GPIO0, GPIO_PinSource_7, AF0_GPIO);再复用成模拟口就行?

使用特权

评论回复
沙发
玉树临风小黑龙| | 2024-8-19 17:02 | 只看该作者
在配置一下,将这两个IO口复用成AF0_GPIO,功能即可

使用特权

评论回复
板凳
丙丁先生| | 2024-8-20 08:35 | 只看该作者
要关闭IO口的复用功能,你可以将GPIO_PinAFConfig函数的第三个参数设置为AF0_GPIO。这样,你就可以将GPIO0的第9个引脚(P0.9)和第7个引脚(P0.7)复用为普通GPIO。然后,你可以将这些引脚配置为模拟输入或输出,以实现你的需求。

以下是关闭复用的代码:

```c
GPIO_PinAFConfig(GPIO0, GPIO_PinSource_9, AF0_GPIO); //关闭P0.9的UART_RX复用
GPIO_PinAFConfig(GPIO0, GPIO_PinSource_7, AF0_GPIO); //关闭P0.7的UART_TX复用
```

接下来,你可以将这些引脚配置为模拟输入或输出,例如:

```c
GPIO_InitTypeDef GPIO_InitStructure;

// 配置P0.9为模拟输入
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIO0, &GPIO_InitStructure);

// 配置P0.7为模拟输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIO0, &GPIO_InitStructure);
```

使用特权

评论回复
地板
xionghaoyun| | 2024-8-20 10:22 | 只看该作者
丙丁先生 发表于 2024-8-20 08:35
要关闭IO口的复用功能,你可以将GPIO_PinAFConfig函数的第三个参数设置为AF0_GPIO。这样,你就可以将GPIO0 ...

对的 最简单重新初始化

使用特权

评论回复
5
qintian0303| | 2024-8-20 13:29 | 只看该作者
重新初始化就可以了,以最后有限的配置为准,可以随便更改

使用特权

评论回复
6
cooldog123pp| | 2024-8-21 11:40 | 只看该作者
在配置一下,将这两个IO口复用成AF0_GPIO,功能即可,就是在你使用之前重新配置一下不就可以了。

使用特权

评论回复
7
vivilyly| | 2024-9-3 15:56 | 只看该作者
需要禁用该IO口的串口功能。              

使用特权

评论回复
8
mikewalpole| | 2024-9-3 16:21 | 只看该作者
删除或修改与串口相关的初始化代码,添加或修改与普通IO口相关的初始化代码。

使用特权

评论回复
9
kmzuaz| | 2024-9-3 17:10 | 只看该作者
通过设置相应的控制寄存器,禁用IO口上的串口功能。这通常涉及到清除控制寄存器中与该IO口相关的位。

使用特权

评论回复
10
albertaabbot| | 2024-9-3 18:08 | 只看该作者
// 关闭USART1时钟
RCC->APB2ENR &= ~RCC_APB2ENR_USART1EN;

// 禁用USART1
USART1->CR1 = 0; // 清除控制寄存器1

// 禁用USART1中断
NVIC_DisableIRQ(USART1_IRQn);

// 取消复用功能
GPIOA->AFR[1] &= ~(0xF << 4); // PA8-PA15的复用功能,此处清除PA9的复用功能

// 配置为普通输入模式
GPIOA->MODER &= ~(0x3 << 18); // PA9为输入模式
GPIOA->PUPDR &= ~(0x3 << 18); // PA9无上拉下拉

// 如果需要配置为输出模式
// GPIOA->MODER |= (0x1 << 18); // PA9为输出模式
// GPIOA->OTYPER |= (0x1 << 9); // PA9为开漏输出
// GPIOA->OSPEEDR |= (0x2 << 18); // PA9输出速度为50 MHz

使用特权

评论回复
11
lzbf| | 2024-9-3 19:23 | 只看该作者
将IO口配置为普通IO口模式。设置相应的寄存器,

使用特权

评论回复
12
qiufengsd| | 2024-9-3 21:02 | 只看该作者
确认当前IO口是否已经被配置为串口使用。 单片机的用户手册会列出哪些IO口可以复用为串口。

使用特权

评论回复
13
hearstnorman323| | 2024-9-3 22:39 | 只看该作者
如果之前使用该IO口进行串口通信,现在需要将其替换为普通IO口的数据传输和处理逻辑。

使用特权

评论回复
14
uptown| | 2024-9-4 10:01 | 只看该作者
将它们作为普通IO使用,则可能需要额外的配置来保证不影响程序的下载和调试功能。

使用特权

评论回复
15
mickit| | 2024-9-4 13:01 | 只看该作者
设置IO口的输入或输出方向。对于输出,可能还需要设置输出值寄存器。

使用特权

评论回复
16
yeates333| | 2024-9-4 16:04 | 只看该作者
将该IO口的方向寄存器设置为输入或输出模式,具体取决于你的应用需求。

使用特权

评论回复
17
单片小菜| | 2024-9-4 18:24 | 只看该作者
配置P0.7为模拟输出
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_Init(GPIO0, &GPIO_InitStructure);

使用特权

评论回复
18
sesefadou| | 2024-9-5 09:01 | 只看该作者
将IO口配置为输入或输出模式。              

使用特权

评论回复
19
mattlincoln| | 2024-9-5 10:36 | 只看该作者
某些特定的IO口可能因为硬件设计或系统默认配置,拥有特殊的功能或用途,此时更改其功能可能会遇到一些限制。

使用特权

评论回复
20
ulystronglll| | 2024-9-5 12:11 | 只看该作者
要找到并关闭或禁用与该IO口相关的串口功能。这通常涉及到对串口控制寄存器的操作,将相应的控制位设置为禁用状态。

使用特权

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

本版积分规则

8

主题

13

帖子

0

粉丝