基于标准库的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
选择性调用SetBits
或ResetBits
。
- 在底层实现中,会根据传入的
- 用法:
1
2GPIO_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
,每一位对应一个引脚。
- 一次性设置 GPIO 端口(
- 参数:
PortVal
:16 位数据,其中每一位控制对应引脚的电平。- 例如,
PortVal = 0x0001
设置Pin_0
高电平,其他引脚低电平。
- 例如,
- 用法:
1
2GPIO_Write(GPIOC, 0xFFFF); // 设置 GPIOC 的所有引脚为高电平
GPIO_Write(GPIOC, 0x0000); // 设置 GPIOC 的所有引脚为低电平
总结区别:
函数名 | 功能描述 | 精细程度 | 用途 |
---|---|---|---|
GPIO_SetBits |
将某个或多个引脚设置为高电平 | 控制单个或多个引脚 | 简单设置某些引脚为高电平 |
GPIO_ResetBits |
将某个或多个引脚设置为低电平 | 控制单个或多个引脚 | 简单设置某些引脚为低电平 |
GPIO_WriteBit |
根据传入参数设置单个引脚为高或低电平 | 控制单个引脚 | 需要更精确地控制单个引脚的高低电平 |
GPIO_Write |
设置整个 GPIO 端口的所有引脚电平 | 控制整个端口 | 同时操作整个端口的所有引脚,适合同时控制多个引脚的状态,如并行数据通信等 |
使用建议:
- 如果需要操作单个引脚,推荐使用
GPIO_SetBits
、GPIO_ResetBits
或GPIO_WriteBit
。 - 如果需要同时操作整个端口的引脚,可以使用
GPIO_Write
。 - 注意:
- 使用
GPIO_Write
时会覆盖整个端口的状态,因此需要慎用。
- 使用
中断
抢占优先级与响应优先级
抢占优先级高的可以中断嵌套
外部中断
相同pin脚指PA0与PB1,PC1,都是1,PA0和PA1,作为中断就可以