打印
[蓝牙芯片]

从代码入手考虑CH592蓝牙芯片的LCD电流消耗

[复制链接]
150|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
丙丁先生|  楼主 | 2024-6-28 07:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这段代码是一个C语言程序的主函数。它包含了一些硬件相关的配置和初始化操作,以及一个主循环函数`Main_Circulation()`。

以下是对代码的解析:

```cpp
int main(void)
{
    // 如果定义了DCDC_ENABLE并且其值为TRUE,则启用电源管理模块
#if(defined(DCDC_ENABLE)) && (DCDC_ENABLE == TRUE)
    PWR_DCDCCfg(ENABLE);
#endif

    // 设置系统时钟为60MHz的PLL时钟源
    SetSysClock(CLK_SOURCE_PLL_60MHz);

    // 如果定义了HAL_SLEEP并且其值为TRUE,则注释掉以下两行代码
#if(defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
//    GPIOA_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
//    GPIOB_ModeCfg(GPIO_Pin_All, GPIO_ModeIN_PU);
#endif

    // 如果定义了DEBUG,则执行以下代码
#ifdef DEBUG
    GPIOA_SetBits(bTXD1); // 设置GPIOA的bTXD1位为高电平
    GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA); // 配置GPIOA的bTXD1引脚为推挽输出模式
    UART1_DefInit(); // 初始化UART1
#endif

    // 打印版本信息
    PRINT("%s
", VER_LIB);

    // 初始化BLE模块
    CH59x_BLEInit();

    // 初始化硬件抽象层
    HAL_Init();

    // 初始化GAP角色为从设备
    GAPRole_PeripheralInit();

    // 初始化外设
    Peripheral_Init();

    // 初始化LCD显示屏的相关参数和配置
    R32_PIN_CONFIG2 = 0xffbef03f; // 关闭数字输入
    R16_PIN_ALTERNATE |= RB_DEBUG_EN; // 操作LCD时,需关闭debug
    R32_LCD_CMD = 0x0c3ff << 8;
    R32_LCD_CMD |= RB_LCD_SYS_EN | RB_LCD_ON | (LCD_CLK_128 << 5) | (LCD_1_4_Duty << 3) | (LCD_1_3_Bias << 2);

    // 配置GPIOA和GPIOB的部分引脚为输入模式
    GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_7, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
    GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_PU);
    GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PU);

    // 进入主循环
    Main_Circulation();
}
```

该代码的主要功能是进行硬件初始化和配置,然后进入主循环函数`Main_Circulation()`中执行后续的操作。具体的功能和实现细节需要根据上下文和相关硬件文档来进一步分析。

为了修改CH592EVT\EXAM\BLE\Peripheral例程,我们需要进行以下步骤:

1. 打开peripheral.c文件,找到第211行和第517行,将initial_advertising_enable和advertising_enable的值改为FALSE。这将禁止蓝牙广播,方便测试电流。此时电流大约在3~4uA。

```c
// line 211
uint8_t initial_advertising_enable = FALSE;

// line 517
uint8_t advertising_enable = FALSE;
```

2. 打开peripheral_main.c文件,去掉DEBUG=1,增加LCD初始化代码,电流变为100多uA。

首先,注释掉DEBUG=1:

```c
// #define DEBUG 1
```

然后,在适当的地方添加LCD初始化代码,例如在主函数中添加以下代码:

```c
// 初始化LCD显示屏的相关参数和配置
R32_PIN_CONFIG2 = 0xffbef03f; // 关闭数字输入
R16_PIN_ALTERNATE |= RB_DEBUG_EN; // 操作LCD时,需关闭debug
R32_LCD_CMD = 0x0c3ff << 8;
R32_LCD_CMD |= RB_LCD_SYS_EN | RB_LCD_ON | (LCD_CLK_128 << 5) | (LCD_1_4_Duty << 3) | (LCD_1_3_Bias << 2);

// 配置GPIOA和GPIOB的部分引脚为输入模式
GPIOA_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PU);
GPIOA_ModeCfg(GPIO_Pin_7, GPIO_ModeIN_PU);
GPIOA_ModeCfg(GPIO_Pin_8, GPIO_ModeIN_PU);
GPIOA_ModeCfg(GPIO_Pin_9, GPIO_ModeIN_PU);
GPIOB_ModeCfg(GPIO_Pin_0, GPIO_ModeIN_PU);
GPIOB_ModeCfg(GPIO_Pin_6, GPIO_ModeIN_PU);
```

这样,我们就完成了对CH592EVT\EXAM\BLE\Peripheral例程的修改。

CH592蓝牙芯片的LCD电流消耗大约在100多uA;降低其LCD电流消耗的方法包括禁用不必要的功能、调整睡眠模式、优化代码等。

想象一下,你有一个小助手,名叫CH592,它是一个非常勤奋的小家伙,但有个小问题——它有点贪吃,特别是在工作的时候,喜欢吃很多电能(大约100多uA)。为了减少它的食量,你决定采取一些措施。

首先,你禁止它做不必要的工作,就像让一个小孩子不要去碰那些诱人的零食一样。你修改了代码,让它在不工作时关闭那些吸引人的功能,比如蓝牙广播和LCD显示。这样,当它休息时,它的食量降到了惊人的3~4uA!

但你知道,仅仅这样还不够。你开始调整它的睡眠模式,允许它打个小盹儿(sleep模式),或者干脆让它去长时间的午睡(shutdown模式),这样它在不工作的时候就不会那么饿了。

你还注意到,CH592在工作时有些低效,就像一个人在做事情时分心一样。于是你开始优化它的代码,让它更专注,减少不必要的动作和思考,特别是在它最忙碌的时候。

此外,你还开启了一个内置的小装置(DCDC功能),这有点像给CH592穿上了一件节能的魔法斗篷,帮助它减少食量。并且,你仔细检查了它的工作台,移除了所有不必要的工具和玩具,比如LED指示灯,只留下它完成工作所必需的东西。

最后,你教会了CH592如何正确地使用它的力量,比如合理地设置GPIO的上拉/下拉电阻,避免无谓的浪费,并在它不需要用力时让它放松下来。

通过这些方法,你不仅帮助CH592减少了对电能的消耗,还提高了它的工作效率,真是一举两得!现在,CH592可以更高效地帮助你完成工作,而且更加节能环保。

使用特权

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

本版积分规则

236

主题

667

帖子

1

粉丝