杰里701N学习

串口打印

1.打开lib库总开关

// app_config.h
#ifndef APP_CONFIG_H
#define APP_CONFIG_H

/*
* 系统打印总开关
*/


#ifdef CONFIG_RELEASE_ENABLE
#define LIB_DEBUG    1
#else
#define LIB_DEBUG    1
#endif
#define CONFIG_DEBUG_LIB(x)         (x & LIB_DEBUG)
#define CONFIG_DEBUG_ENABLE

需要修改点:

  1. 宏LIB_DEBUG配置为1.
  2. 宏CONFIG_DEBUG_ENABLE需要被定义.

2.某些模块的的调试信息可能还有自己的单独开关

// app_config.c
const char log_tag_const_v_SETUP AT(.LOG_TAG_CONST) = FALSE;   // verbose, 模块中比较冗余的信息。
const char log_tag_const_i_SETUP AT(.LOG_TAG_CONST) = FALSE;   // info, 模块中一些基本的状态信息。
const char log_tag_const_w_SETUP AT(.LOG_TAG_CONST) = FALSE;   // debug, 模块中用于定位问题的基本信息。
const char log_tag_const_d_SETUP AT(.LOG_TAG_CONST) = TRUE;    // warning, 模块中用于定位问题的警告信息。
const char log_tag_const_e_SETUP AT(.LOG_TAG_CONST) = TRUE;    // error, 模块中用于定位问题的错误信息。

3.使能硬件驱动开关

// xxx_cfg.h
//*********************************************************************************//
//                                 UART配置                                        //
//*********************************************************************************//
#define TCFG_UART0_ENABLE					ENABLE_THIS_MOUDLE                     //串口打印模块使能
#define TCFG_UART0_RX_PORT					NO_CONFIG_PORT                         //串口接收脚配置(用于打印可以选择NO_CONFIG_PORT)
#define TCFG_UART0_TX_PORT  				IO_PORTA_05                             //串口发送脚配置
#define TCFG_UART0_BAUDRATE  				1000000                                //串口波特率配置

4.添加自己的调试信息

printf

printf 是计算机行业内通用的终端打印信息的标准接口, 在开发环境中添加如下头文件后即可使用

#include "generic/printf.h"

​ 相应的,如果有需要打印一块内存的十六进制数据,可使用put_buf接口,使用示例如下;

#include "generic/printf.h"

void printf_foo(void)
{
    int tmp[50];
    printf("Test Demo: %s:%d\n", __func__, __LINE__);

    memset(tmp, 0x5A, sizeof(tmp));
    put_buf(tmp, sizeof(tmp));

    return;
}
log_xxx族接口

​ log_xxx族接口与printf的区别是该接口可以分模块控制,以及输出信息可以带模块名前缀,可以快速定位到对应模块输出的信息。举例文件举例文件 sdk/apps/hid/app_main.c`, 使用步骤如下:

​ 在模块对应C文件开头增加如下修改

#define LOG_TAG_CONST       APP
#define LOG_TAG             "[APP]"
#define LOG_ERROR_ENABLE
#define LOG_DEBUG_ENABLE
#define LOG_INFO_ENABLE
/* #define LOG_DUMP_ENABLE */
#define LOG_CLI_ENABLE
#include "debug.h"

修改注意点:

  • 定义LOG_TAG_CONST宏的命令与模块Debug名相同。
  • debug.h 文件被include的位置必须位于这些宏定义之后。

**2.**增加模块打印开关控制变量, 文件夹路径 apps/xxx/config/ 用户应根据自己模块的属性放到合适的文件, 举例将app模块的控制开关放在 apps/hid/config/log_config.c`文件, 增加变量声明如下:

const char log_tag_const_v_APP AT(.LOG_TAG_CONST) = 0;
const char log_tag_const_i_APP AT(.LOG_TAG_CONST) = 1;
const char log_tag_const_d_APP AT(.LOG_TAG_CONST) = 1;
const char log_tag_const_w_APP AT(.LOG_TAG_CONST) = 1;
const char log_tag_const_e_APP AT(.LOG_TAG_CONST) = 1;

**3.**在对应模块添加调试信息,可用接口示例如下:

void log_foo(void)
 {
    int tmp[10];

    log_info("I am info Message.\n");
    log_debug("I am debug Message.\n");
    log_error("I am error Message.\n");

    memset(tmp, 0x5A, sizeof(tmp));
    log_info_hexdump(tmp, sizeof(tmp)); //输出十六进制数据
    log_error_hexdump(tmp, sizeof(tmp)); //输出十六进制数据

    return;
 }

上述示例输出信息如下:

void log_foo(void)
 2 {
 3    int tmp[10];
 4
 5    log_info("I am info Message.\n");
 6    log_debug("I am debug Message.\n");
 7    log_error("I am error Message.\n");
 8
 9    memset(tmp, 0x5A, sizeof(tmp));
10    log_info_hexdump(tmp, sizeof(tmp)); //输出十六进制数据
11    log_error_hexdump(tmp, sizeof(tmp)); //输出十六进制数据
12
13    return;
14 }

**4.**系统时间戳

​ 在输出的log中存在系统时间戳,该时间戳代表输出该log时距离系统的上电时间,如果用户不需要输出该时间戳,可以通过修改文件 sdk/apps/xxx/config/lib_system_config.c

///打印是否时间打印信息
const int config_printf_time         = 1;

UI常用配置

低电配置

// app_power_manage.h
#define LOW_POWER_SHUTDOWN      300  //低电直接关机电压-拔出不开机-开盖不开机
#define LOW_POWER_OFF_VAL   	330  //低电关机电压
#define LOW_POWER_WARN_VAL   	340  //低电提醒电压
#define LOW_POWER_WARN_TIME   	(60 * 1000)  //低电提醒时间

KEY IO配置

添加按键

  • 在iokey 配置里面定义多一个变量
// board_jl701n_demo_cfg.h
//*********************************************************************************//
//                                 iokey 配置                                      //
//*********************************************************************************//
#define TCFG_IOKEY_ENABLE					ENABLE_THIS_MOUDLE //是否使能IO按键

#define TCFG_IOKEY_POWER_CONNECT_WAY		ONE_PORT_TO_LOW    //按键一端接低电平一端接IO

#define TCFG_IOKEY_POWER_ONE_PORT			IO_PORTB_01        //IO按键端口
#define TCFG_IOKEY_POWER_TWO_PORT			IO_PORTB_02        //添加
  • 在iokey_list结构体里面添加以下参数
// board_jl701n_demo.c
    {
        .connect_way = TCFG_IOKEY_POWER_CONNECT_WAY,          //IO按键的连接方式
        .key_type.one_io.port = TCFG_IOKEY_POWER_TWO_PORT,    //IO按键对应的引脚
        .key_value = 1,                                       //按键值
    },
  • 在board_jl701n_demo.c文件里面进行消息设置

    // board_jl701n_demo.c
    u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = {
        // SHORT           LONG              HOLD              UP              DOUBLE           TRIPLE
        {KEY_MUSIC_PP,   KEY_POWEROFF,  KEY_POWEROFF_HOLD,  KEY_NULL,     KEY_CALL_LAST_NO,     KEY_NULL},   //KEY_0
        {KEY_MUSIC_NEXT, KEY_VOL_UP,    KEY_VOL_UP,         KEY_NULL,     KEY_OPEN_SIRI,        KEY_NULL},   //KEY_1
        {KEY_MUSIC_PREV, KEY_VOL_DOWN,  KEY_VOL_DOWN,       KEY_NULL,     KEY_HID_CONTROL,      KEY_NULL},   //KEY_2
    };
    
  • 配置完成后,按下按键就会抛出对应的事件到app_earphone_key_event_handler里面

    • 如:短按 PB2 就会抛出 KEY_MUSIC_NEXT事件,我们可以在app_earphone_key_event_handler里面去处理一些按键功能
按键事件详情
SHORT短按
LONG长按( 抛一次 )
HOLD长按( 抛多次 )
UP松开
DOUBLE双击
TRIPLE三级

KEY AD配置

一个AD按键
  • 在board_jl701n_demo_cfg.h文件中使能AD按键,配置AD按键的端口以及电阻(TCFG_ADKEY_ADX)
// board_jl701n_demo_cfg.h
//*********************************************************************************//
//                                 adkey 配置                                      //
//*********************************************************************************//
#define TCFG_ADKEY_ENABLE                   ENABLE_THIS_MOUDLE//是否使能AD按键
#define TCFG_ADKEY_PORT                     IO_PORTB_02         //AD按键端口(需要注意选择的IO口是否支持AD功能)
/*AD通道选择,需要和AD按键的端口相对应:
    AD_CH_PA1    AD_CH_PA3    AD_CH_PA4    AD_CH_PA5
    AD_CH_PA9    AD_CH_PA1    AD_CH_PB1    AD_CH_PB4
    AD_CH_PB6    AD_CH_PB7    AD_CH_DP     AD_CH_DM
    AD_CH_PB2
*/
#define TCFG_ADKEY_AD_CHANNEL               AD_CH_PB2
#define TCFG_ADKEY_EXTERN_UP_ENABLE         ENABLE_THIS_MOUDLE //是否使用外部上拉

#if TCFG_ADKEY_EXTERN_UP_ENABLE
#define R_UP    220                 //22K,外部上拉阻值在此自行设置
#else
#define R_UP    100                 //10K,内部上拉默认10K
#endif

//必须从小到大填电阻,没有则同VDDIO,填0x3ffL
#define TCFG_ADKEY_AD0      (0)                                 //0R
#define TCFG_ADKEY_AD1      (0x3ffL * 30   / (30   + R_UP))     //3k
#define TCFG_ADKEY_AD2      (0x3ffL * 62   / (62   + R_UP))     //6.2k
#define TCFG_ADKEY_AD3      (0x3ffL * 91   / (91   + R_UP))     //9.1k
#define TCFG_ADKEY_AD4      (0x3ffL * 150  / (150  + R_UP))     //15k
#define TCFG_ADKEY_AD5      (0x3ffL * 240  / (240  + R_UP))     //24k
#define TCFG_ADKEY_AD6      (0x3ffL * 330  / (330  + R_UP))     //33k
#define TCFG_ADKEY_AD7      (0x3ffL * 510  / (510  + R_UP))     //51k
#define TCFG_ADKEY_AD8      (0x3ffL * 1000 / (1000 + R_UP))     //100k
#define TCFG_ADKEY_AD9      (0x3ffL * 2200 / (2200 + R_UP))     //220k
#define TCFG_ADKEY_VDDIO    (0x3ffL)

#define TCFG_ADKEY_VOLTAGE0 ((TCFG_ADKEY_AD0 + TCFG_ADKEY_AD1) / 2)
#define TCFG_ADKEY_VOLTAGE1 ((TCFG_ADKEY_AD1 + TCFG_ADKEY_AD2) / 2)
#define TCFG_ADKEY_VOLTAGE2 ((TCFG_ADKEY_AD2 + TCFG_ADKEY_AD3) / 2)
#define TCFG_ADKEY_VOLTAGE3 ((TCFG_ADKEY_AD3 + TCFG_ADKEY_AD4) / 2)
#define TCFG_ADKEY_VOLTAGE4 ((TCFG_ADKEY_AD4 + TCFG_ADKEY_AD5) / 2)
#define TCFG_ADKEY_VOLTAGE5 ((TCFG_ADKEY_AD5 + TCFG_ADKEY_AD6) / 2)
#define TCFG_ADKEY_VOLTAGE6 ((TCFG_ADKEY_AD6 + TCFG_ADKEY_AD7) / 2)
#define TCFG_ADKEY_VOLTAGE7 ((TCFG_ADKEY_AD7 + TCFG_ADKEY_AD8) / 2)
#define TCFG_ADKEY_VOLTAGE8 ((TCFG_ADKEY_AD8 + TCFG_ADKEY_AD9) / 2)
#define TCFG_ADKEY_VOLTAGE9 ((TCFG_ADKEY_AD9 + TCFG_ADKEY_VDDIO) / 2)

#define TCFG_ADKEY_VALUE0                   0
#define TCFG_ADKEY_VALUE1                   1
#define TCFG_ADKEY_VALUE2                   2
#define TCFG_ADKEY_VALUE3                   3
#define TCFG_ADKEY_VALUE4                   4
#define TCFG_ADKEY_VALUE5                   5
#define TCFG_ADKEY_VALUE6                   6
#define TCFG_ADKEY_VALUE7                   7
#define TCFG_ADKEY_VALUE8                   8
#define TCFG_ADKEY_VALUE9                   9
  • 对应结构体
// board_jl701n_demo.c
const struct adkey_platform_data adkey_data = {
    .enable = TCFG_ADKEY_ENABLE,                              //AD按键使能
    .adkey_pin = TCFG_ADKEY_PORT,                             //AD按键对应引脚
    .ad_channel = TCFG_ADKEY_AD_CHANNEL,                      //AD通道值
    .extern_up_en = TCFG_ADKEY_EXTERN_UP_ENABLE,              //是否使用外接上拉电阻
    .ad_value = {                                             //根据电阻算出来的电压值
        TCFG_ADKEY_VOLTAGE0,
        TCFG_ADKEY_VOLTAGE1,
        TCFG_ADKEY_VOLTAGE2,
        TCFG_ADKEY_VOLTAGE3,
        TCFG_ADKEY_VOLTAGE4,
        TCFG_ADKEY_VOLTAGE5,
        TCFG_ADKEY_VOLTAGE6,
        TCFG_ADKEY_VOLTAGE7,
        TCFG_ADKEY_VOLTAGE8,
        TCFG_ADKEY_VOLTAGE9,
    },
    .key_value = {                                             //AD按键各个按键的键值
        TCFG_ADKEY_VALUE0,
        TCFG_ADKEY_VALUE1,
        TCFG_ADKEY_VALUE2,
        TCFG_ADKEY_VALUE3,
        TCFG_ADKEY_VALUE4,
        TCFG_ADKEY_VALUE5,
        TCFG_ADKEY_VALUE6,
        TCFG_ADKEY_VALUE7,
        TCFG_ADKEY_VALUE8,
        TCFG_ADKEY_VALUE9,
    },
};
#endif
  • TCFG_ADKEY_VALUE0为KEY 0按键,当按下时会触发KEY MSG里的事件,如:
    • 当按下TCFG_ADKEY_VOLTAGE0电阻对应的按键时,就会根据TCFG_ADKEY_VALUE0里的值去抛出对应的MSG事件,此处TCFG_ADKEY_VALUE0值为0,则会抛出KEY 0短按的事件 KEY_MUSIC_PP ,当长按TCFG_ADKEY_VOLTAGE1对应电阻的按键,则会抛出 KEY_VOL_DOWN事件…
u8 key_table[KEY_NUM_MAX][KEY_EVENT_MAX] = {
    // SHORT           LONG              HOLD              UP              DOUBLE           TRIPLE
    {KEY_MUSIC_PP,   KEY_POWEROFF,  KEY_POWEROFF_HOLD,  KEY_NULL,     KEY_CALL_LAST_NO,     KEY_NULL},   //KEY_0
    {KEY_MUSIC_NEXT, KEY_VOL_UP,    KEY_VOL_UP,         KEY_NULL,     KEY_OPEN_SIRI,        KEY_NULL},   //KEY_1
    {KEY_MUSIC_PREV, KEY_VOL_DOWN,  KEY_VOL_DOWN,       KEY_NULL,     KEY_HID_CONTROL,      KEY_NULL},   //KEY_2
};
多个AD按键
KEY AD不做按键只做检测配置

提示音配置

LED IO配置

PWM LED配置

EQ配置

  • 18
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值