使用cw32生态社区的l010系列最小系统板可以使用开漏输出进行点灯,示例如下

可以看到原理图中,led1与电阻串联,所以既可进行推挽输出,也可进行开漏输出
开漏输出通常是呈现高阻态,即为上拉电阻,这里一般取上拉电阻为10k左右。
Q1:能否使用开漏输出
可以使用开漏输出模式来控制该灯。在开漏输出模式下,CW32 的 GPIO 引脚pinb0只负责将引脚拉低(接地),而拉高则需要依靠外部上拉电阻(这里的 R3 就可以起到这个作用)。当 GPIO 输出低电平时,LED 阳极接地,形成回路,LED 点亮;当 GPIO 输出高阻态时,由于上拉电阻的作用,LED 阳极被拉高到 VCC 电平,LED 熄灭。
Q2:该电阻能否作为上拉电阻
该电阻 R3 可以作为上拉电阻。5.1K 的电阻值在一般的电路设计中是比较常见的上拉电阻取值。它能够在开漏输出模式下,当 GPIO 引脚处于高阻态时,将连接的引脚(PB0)拉高到 VCC 电平,满足开漏输出模式下的上拉需求,同时也能起到一定的限流作用,保护 LED 和 GPIO 引脚。
下面来介绍相应代码部分来实现功能
int32_t main(void)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};// 定义GPIO初始化结构体并初始化为0
SYSCTRL_HSI_Enable(SYSCTRL_HSIOSC_DIV12);// 启用HSI时钟,分频系数为12
__SYSCTRL_GPIOA_CLK_ENABLE();// 启用GPIOA时钟
__SYSCTRL_GPIOB_CLK_ENABLE(); // 启用GPIOB时钟
GPIO_InitStruct.IT = GPIO_IT_NONE;// 中断模式设置为无中断
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_OD ;// 设置GPIO模式为开漏输出
GPIO_InitStruct.Pins = LED_GPIO_PINS;// 设置GPIO引脚为LED引脚
GPIO_Init(LED_GPIO_PORT, &GPIO_InitStruct);// 初始化指定的GPIO端口
while (1)
{
GPIO_TogglePin(LED_GPIO_PORT, LED_GPIO_PINS);// 切换LED的状态(开/关)
Delay(0xFFFF);// 调用延时函数
}
}
定义LED引脚
#define LED_GPIO_PORT CW_GPIOB
#define LED_GPIO_PINS GPIO_PIN_0
简单的延时函数
void Delay(__IO uint16_t nCount)
{
/* Decrement nCount value */
while (nCount != 0)
{
nCount--;
}
}
该延时函数只做示范,没用滴答定时器无法精准定时。
————————————————
版权声明:本文为CSDN博主「大漠无河」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/2302_80124130/article/details/145524104
|