[STM32F1] 如何配置PA2引脚为开漏输出模式。

[复制链接]
2208|22
 楼主| 610u 发表于 2024-6-29 04:29 | 显示全部楼层 |阅读模式
#include "stm32f10x.h" // 包含STM32F1系列的头文件

void GPIO_Init(void)
{
    // 使能PORTA时钟
    RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;

    // 配置PA2为开漏输出
    // 首先清除相应的位
    GPIOA->CRL &= ~GPIO_CRL_MODE2; // 清除MODE2位
    GPIOA->CRL &= ~GPIO_CRL_CNF2;  // 清除CNF2位

    // 设置PA2为开漏输出,最大速率为50 MHz
    GPIOA->CRL |= (0x03 << GPIO_CRL_MODE2_Pos); // 设置MODE2为11(50 MHz)
    GPIOA->CRL |= (0x01 << GPIO_CRL_CNF2_Pos);  // 设置CNF2为01(开漏输出)
}

int main(void)
{
    // 初始化GPIO
    GPIO_Init();

    // 主循环
    while (1)
    {
        // 您的应用代码
    }
}
硬件配置
在硬件上,需要在开漏输出引脚上接一个上拉电阻。这通常可以是一个10kΩ的电阻。

详细解释
使能PORTA时钟:

在STM32微控制器中,所有外设的时钟都需要单独使能。这里通过设置RCC->APB2ENR寄存器中的相应位来使能PORTA的时钟。
配置PA2为开漏输出:

GPIOA->CRL寄存器控制着PORTA的低8个引脚(PA0到PA7)的配置。每个引脚有4位控制(MODE和CNF),其中:
MODE位(两位)用于设置输出速度:00(输入模式),01(输出模式,最大10 MHz),10(输出模式,最大2 MHz),11(输出模式,最大50 MHz)。
CNF位(两位)用于设置引脚的工作模式:00(模拟输入),01(浮动输入),10(输入带上拉/下拉),11(复用功能)。
这里设置MODE2位为11,表示PA2为50 MHz输出模式。
设置CNF2位为01,表示PA2为开漏输出模式。


ex7s4 发表于 2024-7-30 11:56 | 显示全部楼层
你这个用cubemx配置啊,多简单的一个事儿
cen9ce 发表于 2024-7-30 13:00 | 显示全部楼层
可以考虑用库函数啊,寄存器太麻烦了
q1ngt12 发表于 2024-7-30 14:06 | 显示全部楼层
建议直接用正点原子的例程,上面就有GPIO的操作
w2nme1ai7 发表于 2024-7-30 16:10 | 显示全部楼层
我记得STM32有个小工具,就用类似于STM8的小青蛙这种软件
tax2r6c 发表于 2024-7-30 17:00 | 显示全部楼层
建议还是用推挽输出吧,多好啊
lamanius 发表于 2024-7-30 18:08 | 显示全部楼层
其实上拉电阻很容易忘记啊,不如用推挽输出来操作了
l1uyn9b 发表于 2024-7-30 19:14 | 显示全部楼层
配置开漏输出的优势是啥?
b5z1giu 发表于 2024-7-31 08:30 | 显示全部楼层
为啥不用推挽输出呢?
g0d5xs 发表于 2024-7-31 10:00 | 显示全部楼层
开漏是不是只是在I2C或者一些通信方面会这么设置啊
y1n9an 发表于 2024-7-31 12:00 | 显示全部楼层
用库函数的话可以配置成这样,GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD

实际测量不符 发表于 2024-8-29 14:06 | 显示全部楼层
在STM32F1系列微控制器中,所有外设的时钟都需要单独使能。
星辰大海不退缩 发表于 2024-8-29 23:53 | 显示全部楼层
直接配置就可以的
公羊子丹 发表于 2025-4-4 07:54 | 显示全部楼层
配置PA2为开漏输出时,上拉电阻很重要,否则引脚会漂浮,影响信号的稳定性。10kΩ的上拉电阻通常是一个不错的选择。
周半梅 发表于 2025-4-4 07:55 | 显示全部楼层
代码写得很清楚,注意到开漏输出通常需要外部拉电阻,你可以根据实际需要选择不同阻值的电阻。
帛灿灿 发表于 2025-4-4 07:56 | 显示全部楼层
STM32F1的GPIO配置确实挺灵活,除了开漏输出,还有推挽输出、输入等多种模式,能满足不同的需求。
童雨竹 发表于 2025-4-4 07:57 | 显示全部楼层
配置时,可以将RCC->APB2ENR寄存器看作是开启时钟的关键,不然你配置的GPIO不会生效。
万图 发表于 2025-4-4 07:58 | 显示全部楼层
如果需要频繁切换引脚模式,可以考虑将配置代码封装成一个函数,方便以后复用,代码会更加整洁。
Wordsworth 发表于 2025-4-4 07:59 | 显示全部楼层
还可以通过外部调试工具检查PA2引脚的工作状态,确保开漏模式正确配置。
Bblythe 发表于 2025-4-4 08:00 | 显示全部楼层
你这段代码中,CRL寄存器配置的细节我很喜欢,既有注释,又能清晰看出如何设置不同的模式。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

53

主题

568

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部