Posted on  Updated on 

基于标准库的STM32的开发

前言

总算成功进入STM32的学习之旅。

GPIO

这里只介绍GPIO的数字输入与输出,常见有八个函数。引脚默认浮空输入模式

CPIOA,GPIOB,GPIOC,每个16个引脚

PA0-PA15…

有上拉和下拉输入电阻,
推挽模式下,PMOS和NMOS都导通,开漏模式只有Nmos导通,开漏模式用于信号或者其他电压的上拉,关闭模式下,PNMOS都关闭

以下是 STM32 标准外设库中几个 GPIO 操作函数的区别和作用:


1. GPIO_SetBits(GPIOx, GPIO_Pin_x)

  • 作用:
    • 将指定引脚的电平设置为 高电平
  • 实现原理:
    • 通过设置寄存器中的某个位,将引脚输出逻辑高(通常对应 3.3V 或 1.8V,具体取决于芯片电源电压)。
  • 用法:
    1
    GPIO_SetBits(GPIOC, GPIO_Pin_13); // 将 PC13 引脚设置为高电平

2. GPIO_ResetBits(GPIOx, GPIO_Pin_x)

  • 作用:
    • 将指定引脚的电平设置为 低电平
  • 实现原理:
    • 通过清除寄存器中的某个位,将引脚输出逻辑低(通常对应 0V)。
  • 用法:
    1
    GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 将 PC13 引脚设置为低电平

3. GPIO_WriteBit(GPIOx, GPIO_Pin_x, BitAction BitVal)

  • 作用:
    • 根据传入的参数 BitVal,设置引脚为高电平或低电平。
  • 参数:
    • Bit_RESET:设置引脚为 低电平
    • Bit_SET:设置引脚为 高电平
  • 实现原理:
    • 在底层实现中,会根据传入的 BitVal 选择性调用 SetBitsResetBits
  • 用法:
    1
    2
    GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);   // 设置 PC13 为高电平
    GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET); // 设置 PC13 为低电平

4. GPIO_Write(GPIOx, uint16_t PortVal)

  • 作用:
    • 一次性设置 GPIO 端口(GPIOx)的所有引脚的电平状态。
    • 直接写入 PortVal,每一位对应一个引脚。
  • 参数:
    • PortVal:16 位数据,其中每一位控制对应引脚的电平。
      • 例如,PortVal = 0x0001 设置 Pin_0 高电平,其他引脚低电平。
  • 用法:
    1
    2
    GPIO_Write(GPIOC, 0xFFFF); // 设置 GPIOC 的所有引脚为高电平
    GPIO_Write(GPIOC, 0x0000); // 设置 GPIOC 的所有引脚为低电平

总结区别:

函数名 功能描述 精细程度 用途
GPIO_SetBits 将某个或多个引脚设置为高电平 控制单个或多个引脚 简单设置某些引脚为高电平
GPIO_ResetBits 将某个或多个引脚设置为低电平 控制单个或多个引脚 简单设置某些引脚为低电平
GPIO_WriteBit 根据传入参数设置单个引脚为高或低电平 控制单个引脚 需要更精确地控制单个引脚的高低电平
GPIO_Write 设置整个 GPIO 端口的所有引脚电平 控制整个端口 同时操作整个端口的所有引脚,适合同时控制多个引脚的状态,如并行数据通信等

使用建议:

  • 如果需要操作单个引脚,推荐使用 GPIO_SetBitsGPIO_ResetBitsGPIO_WriteBit
  • 如果需要同时操作整个端口的引脚,可以使用 GPIO_Write
  • 注意:
    • 使用 GPIO_Write 时会覆盖整个端口的状态,因此需要慎用。

中断

https://blog.csdn.net/m0_56399733/article/details/134979299

抢占优先级与响应优先级
抢占优先级高的可以中断嵌套

外部中断

相同pin脚指PA0与PB1,PC1,都是1,PA0和PA1,作为中断就可以