添加源文件
个人喜欢在custom_main目录下 添加用户应用程序,故custom_main.mk 添加编译的源文件。然后将相关源文件拷贝custom_main目录下的src下
中移模组用户入口程序
相当于c语言的main函数入口
#ifdef CM_OPENCPU_MODEL_POC
cm_pocAppTaskEntry();
#else
cm_test_keypad_init();
cm_test_alarm_init();
/* 调用cm_test_pwrkey_register()接口后,pwrkey逻辑由用户实现。默认不调用此接口,pwrkey逻辑由底层实现。*/
cm_test_pwrkey_register();
#endif
线程建立
不能用这个us级延时,这个同级任务不会切换,要用osdelay那个
/*
* @description: 延时ms // ! 此函数无法延时20ms以下!!! 最好以20的整数倍
* @param {int} ms_delay
* @return {*}
*/
void usr_non_block_delay_ms(int ms_delay)
{
if(ms_delay>20)
{
osDelay(ms_delay/20);
}
else
{
osDelay(1);
}
}
/*
* @description: 延时ms // ! 同级线程不能使用ms切换!!!
* @param {int} us_delay
* @return {*}
*/
void usr_delay_ms(int ms_delay)
{
uint32_t sdelay = ms_delay*100*1000;
do
{
__NOP();
}
while(sdelay--);
}
/*
* @description: 延时us // ! 同级线程不能使用us切换!!!
* @param {int} us_delay
* @return {*}
*/
void usr_delay_us(int us_delay)
{
uint32_t sdelay = us_delay*100;
do
{
__NOP();
}
while(sdelay--);
}
串口打印初始化
直接调用demo程序 cm_demo_uart() 函数。 个人喜好:115200 TX:97 RX:98
GPIO输出使用
#define DEVICE_NET_STA_GPIO18_PIN2 CM_IOMUX_PIN_2_FUNC_GPIO_18 // 网络状态灯
#define DEVICE_NET_STA_GPIO18 18 // 网络状态灯
#define DEVICE_MOD_STA_GPIO21_PIN79 CM_IOMUX_PIN_79_FUNC_GPIO_21 // 模式指示灯
#define DEVICE_MOD_STA_GPIO21 21 // 模式指示灯
/*
* @description: 初始化 网络指示灯 模式指示灯
* @return {*}
*/
void led_tips_init(void)
{
cm_gpio_cfg_t cfg = {0};
cm_gpio_level_e level;
cm_iomux_set_pin_func(DEVICE_NET_STA_GPIO18_PIN2);//初始化之前一定要先设置引脚复用
cm_iomux_set_pin_func(DEVICE_MOD_STA_GPIO21_PIN79);//初始化之前一定要先设置引脚复
cfg.direction = CM_GPIO_DIRECTION_OUTPUT;
cfg.pull = CM_GPIO_PULL_DOWN;
cm_gpio_init(DEVICE_NET_STA_GPIO18, &cfg);
cm_gpio_init(DEVICE_MOD_STA_GPIO21, &cfg);
level = CM_GPIO_LEVEL_LOW;
cm_gpio_set_level(DEVICE_NET_STA_GPIO18, level);
cm_gpio_set_level(DEVICE_MOD_STA_GPIO21, level);
}
GPIO中断的使用
#define DEVICE_KNOB_GPIO28_PIN100 CM_IOMUX_PIN_100_FUNC_GPIO_28 // 旋钮
#define DEVICE_KNOB_GPIO28 28 // 旋钮
/*
* @description: 中断触发
* @return {*}
*/
void gpio_irq_knob_callback(void)
{
logger_normal("gpio_irq_knob_callback \r\n");
}
/*
* @description: GPIO初始化
* @return {*}
*/
void gpio_irq_knob_init(void)
{
cm_gpio_cfg_t cfg = {0};
cm_gpio_level_e level;
cfg.direction = CM_GPIO_DIRECTION_INPUT;
cfg.pull = CM_GPIO_PULL_DOWN;
cm_iomux_set_pin_func(DEVICE_KNOB_GPIO28_PIN100);//初始化之前一定要先设置引脚复用
cm_gpio_init(DEVICE_KNOB_GPIO28, &cfg);
cm_gpio_interrupt_register(DEVICE_KNOB_GPIO28, gpio_irq_knob_callback);
cm_gpio_interrupt_enable(DEVICE_KNOB_GPIO28, CM_GPIO_IT_EDGE_FALLING);
}
log等级
#define LOG_LEVEL (1) // 1 debug 2 info 3 warn 4 error 5 fatal 6 close log
char g_log_level = LOG_LEVEL; // done 默认log等级
#define logger_normal(fmt, arg...) cm_demo_printf(fmt, ##arg)
#define logger_debug(fmt, arg...) do{if(g_log_level <= 1){cm_demo_printf("[DEBUG]:"fmt,##arg);}}while(0)
#define logger_info(fmt, arg...) do{if(g_log_level <= 2){cm_demo_printf("[INFO]:"fmt,##arg);}}while(0)
#define logger_warn(fmt, arg...) do{if(g_log_level <= 3){cm_demo_printf("[WARN]line %d in %s:"fmt,__LINE__,__FILE__,##arg);}}while(0)
#define logger_error(fmt, arg...) do{if(g_log_level <= 4){cm_demo_printf("[ERROR]line %d in %s:"fmt,__LINE__,__FILE__,##arg);}}while(0)
#define logger_fatal(fmt, arg...) do{if(g_log_level <= 5){cm_demo_printf("[FATAL]line %d in %s:"fmt,__LINE__,__FILE__,##arg);}}while(0)
ADC PWM 等其它功能
examples目录下提供的示例进行改造,示例程序都是基于命令交互方式实现的。只有找到其主要接口函数便可以使用
配置文件
烧写固件时候不会清空所有flash。 原因:flash是芯片自带的,研发有个工具可以擦,但校准数据也会全部被擦了,就无法驻网了,所以擦不了