天天看点

[CortexM3--CC26XX]低功耗设计

简述

这里非BLE的低功耗设计,BLE的低功耗需要对协议栈进行了解。这里是针对CC26XX的mcu本身进行开发时,为达到休眠时尽量低的功耗,而进行的一些处理。

GPIO设置

低功耗许多时候是因为GPIO设置不当造成漏电流,而导致系统睡眠时实际的功耗降不到非常低的状态。对于mcu本身而言,mcu进入睡眠状态的话,GPIO是会保留其状态的,外部没有连接设备的GPIO,可以不用设置,使其处于高阻态即可。对于GPIO为输出方式的,在不影响其控制的部分的情况下,将其设置为低电平即可防止漏电流。对于GPIO为输入方式的,比如常见的ADC,可以将ADC功能关闭,切换为GPIO输出低电平来防止漏电流,仅当mcu被唤醒需要使用ADC时才重新初始化来开始使用。

外设驱动

这里以UART为例,其他如SPI, I2C都是类似处理,只要合理的调用TI的Driver中的函数即可。当然在编译时需要使能项目的Power Saving宏。

UART的驱动操作请参考​[[CortexM3–CC26XX]UARTs]​,初始化时,会调用UART_init和UART_open的函数,而一般情况下,会通过调用UART_read来开始串口读取,直到串口超时或者读到数据时会触发callback(可在callback中重新发起UART_read来继续监测后续串口数据)。

低功耗设计时,当进入睡眠状态,UART确认此时不用接收数据(UART_read一直开启的话mcu是无法进入深度睡眠的),使用UART_close关闭UART供电即可。而UART功能关闭后其GPIO也不用刻意再设置为GPIO输出低,在初始化时通过PIN_init(BoardGpioInitTable);即可将UART的GPIO默认设置为输出低电平,这样在调用UART_close后,UART的GPIO会默认恢复开始的GPIO状态,因此也可以有效防止漏电流。

用万用表简单测试功耗