TA的每日心情 | 奋斗 2023-12-3 18:51 |
---|
签到天数: 772 天 连续签到: 1 天 [LV.10]以坛为家III
|
本帖最后由 ddllxxrr 于 2018-2-20 15:25 编辑
年假快过去了,今天有时间了,又开始涂鸦点啥。
我想先从简单开始,上来就高难不太现实。
上一贴我用DEMO程序加了个点POARTA.1的程序。这次我还想利用这个来自己做个界面点一下灯。
首先是建立自定义应用:
定义两个开关:
然后下一步建立APP界面:
再下一步把SDK下来,
下面就是打开SDK,我在这里想了半天,如果用新的SDK代替DEMO的SDK,那么我得改老了东东了,比如串口那块。
那不如这样用现在的DEMO彩灯的SDK,照自己定义的SDK改。彩灯的一律不要。我用NOTEAPP++打开了新SDK,用IAR打开了
DEMO彩灯那个工程。
当然网上有详细的步骤,我是说我的步骤:下边是我的产品请不要考贝哈!!!!这个在protocol.h中- 1:修改产品信息
- ******************************************************************************/
- #define PRODUCT_KEY "5qbkap3c2azdkFT7" //开发平台创建产品后生成的16位字符产品唯一标识
复制代码 第二步:定义点,以前彩灯的当然屏蔽掉:- /******************************************************************************
- 1:dp数据点序列号重新定义
- **此为自动生成代码,如在开发平台有相关修改请重新下载MCU_SDK**
- ******************************************************************************/
- //开关(可下发可上报)
- //备注:
- //#define DPID_LED_SWITCH 1
- //工作模式(可下发可上报)
- //备注:
- //#define DPID_WORK_MODE 2
- //亮度值(可下发可上报)
- //备注:
- //#define DPID_BRIGHT_VALUE 3
- //彩光模式数(可下发可上报)
- //备注:rgbhsv
- //#define DPID_COLOUR_DATA 5
- //情景模式数(可下发可上报)
- //备注:rgbhsv
- //#define DPID_SCENE_DATA 6
- //开关(可下发可上报)
- //备注:
- #define DPID_SWITCH_1 1
- //开关 2(可下发可上报)
- //备注:
- #define DPID_SWITCH_2 2
复制代码 下面改protocol.C中的文件 :
第一步:- /******************************************************************************
- 1:dp数据点序列类型对照表
- **此为自动生成代码,如在开发平台有相关修改请重新下载MCU_SDK**
- ******************************************************************************/
- const DOWNLOAD_CMD_S download_cmd[] =
- {
- {DPID_SWITCH_1, DP_TYPE_BOOL},
- {DPID_SWITCH_2, DP_TYPE_BOOL},
- };
复制代码 第二步:定义全传函数,彩灯不要- /*****************************************************************************
- 函数名称 : all_data_update
- 功能描述 : 系统所有dp点信息上传,实现APP和muc数据同步
- 输入参数 : 无
- 返回参数 : 无
- 使用说明 : 此函数SDK内部需调用;
- MCU必须实现该函数内数据上报功能;包括只上报和可上报可下发型数据
- *****************************************************************************/
- void all_data_update(void)
- {
- // #error "请在此处理可下发可上报数据及只上报数据示例,处理完成后删除该行"
- //此代码为平台自动生成,请按照实际数据修改每个可下发可上报函数和只上报函数
- //mcu_dp_bool_update(DPID_LED_SWITCH,FlashBuffer.led_switch); //BOOL型数据上报;
- //mcu_dp_enum_update(DPID_WORK_MODE,FlashBuffer.work_mode); //枚举型数据上报;
- // mcu_dp_value_update(DPID_BRIGHT_VALUE,FlashBuffer.bright_value); //VALUE型数据上报;
- // mcu_dp_string_update(DPID_COLOUR_DATA,FlashBuffer.colour,14); //STRING型数据上报;
- // mcu_dp_string_update(DPID_SCENE_DATA,FlashBuffer.scene,14); //STRING型数据上报;
- mcu_dp_bool_update(DPID_SWITCH_1,FlashBuffer.led_switch); //BOOL型数据上报;
- mcu_dp_bool_update(DPID_SWITCH_2,FlashBuffer.led_switch2); //BOOL型数据上报;
- }
复制代码 第三步:从新SDK考贝过来的函数,自己添加点灯函数LED666
- /*****************************************************************************
- 函数名称 : dp_download_switch_1_handle
- 功能描述 : 针对DPID_SWITCH_1的处理函数
- 输入参数 : value:数据源数据
- : length:数据长度
- 返回参数 : 成功返回:SUCCESS/失败返回:ERROR
- 使用说明 : 可下发可上报类型,需要在处理完数据后上报处理结果至app
- *****************************************************************************/
- static unsigned char dp_download_switch_1_handle(const unsigned char value[], unsigned short length)
- {
- //示例:当前DP类型为BOOL
- unsigned char ret;
- //0:关/1:开
- unsigned char switch_1;
-
- switch_1 = mcu_get_dp_download_bool(value,length);
- if(switch_1 == 0)
- {
- //开关关
- LED666_OFF();
- }
- else
- {
- //开关开
- LED666_ON();
- }
-
- //处理完DP数据后应有反馈
- ret = mcu_dp_bool_update(DPID_SWITCH_1,switch_1);
- if(ret == SUCCESS)
- return SUCCESS;
- else
- return ERROR;
- }
- /*****************************************************************************
- 函数名称 : dp_download_switch_2_handle
- 功能描述 : 针对DPID_SWITCH_2的处理函数
- 输入参数 : value:数据源数据
- : length:数据长度
- 返回参数 : 成功返回:SUCCESS/失败返回:ERROR
- 使用说明 : 可下发可上报类型,需要在处理完数据后上报处理结果至app
- *****************************************************************************/
- static unsigned char dp_download_switch_2_handle(const unsigned char value[], unsigned short length)
- {
- //示例:当前DP类型为BOOL
- unsigned char ret;
- //0:关/1:开
- unsigned char switch_2;
-
- switch_2 = mcu_get_dp_download_bool(value,length);
- if(switch_2 == 0)
- {
- //开关关
- }
- else
- {
- //开关开
- }
-
- //处理完DP数据后应有反馈
- ret = mcu_dp_bool_update(DPID_SWITCH_2,switch_2);
- if(ret == SUCCESS)
- return SUCCESS;
- else
- return ERROR;
- }
复制代码 第四步:这个是关键:把下发函数同我上边处理函数对应上:
- /*****************************************************************************
- 函数名称 : dp_download_handle
- 功能描述 : dp下发处理函数
- 输入参数 : dpid:DP序号
- value:dp数据缓冲区地址
- length:dp数据长度
- 返回参数 : 成功返回:SUCCESS/失败返回:ERRO
- 使用说明 : 该函数用户不能修改
- *****************************************************************************/
- unsigned char dp_download_handle(unsigned char dpid,const unsigned char value[], unsigned short length)
- {
- /*********************************
- 当前函数处理可下发/可上报数据调用
- 具体函数内需要实现下发数据处理
- 完成用需要将处理结果反馈至APP端,否则APP会认为下发失败
- ***********************************/
- unsigned char ret;
- switch(dpid)
- {
- case DPID_SWITCH_1:
- //开关处理函数
- ret = dp_download_switch_1_handle(value,length);
- break;
- case DPID_SWITCH_2:
- //工作模式处理函数
- ret = dp_download_switch_2_handle(value,length);
- break;
-
- default:
- break;
- }
- return ret;
- }
复制代码 以下修改include.h我就添了两个变量:- #ifndef _INCLUDE_H_
- #define _INCLUDE_H_
- #include <stdio.h>
- #include <math.h>
- #include <stdlib.h>
- #include <string.h>
- //#include <intrins.h>
- #include <ctype.h>
- #include "stm32f10x.h"
- #define ENABLE_BOOT //使能BOOT(固件升级功能)
- //(7+1K)+28K+28K
- #define BASIC_FLASH_ADDR 0x08000000
- #ifdef ENABLE_BOOT
- #define OFFSET_PARA 0x1c00
- #else
- #define OFFSET_PARA 0xfc00
- #endif
- #define OFFSET_FIRMWARE_L 0x2000 //固件正常运行地址
- #define OFFSET_FIRMWARE_H 0x9000 //升级固件存储地址
- #define PARA_ADDR (BASIC_FLASH_ADDR + OFFSET_PARA)
- #define FIREWARE_ADDR_L (BASIC_FLASH_ADDR + OFFSET_FIRMWARE_L) //
- #define FIREWARE_ADDR_H (BASIC_FLASH_ADDR + OFFSET_FIRMWARE_H) //
- #define FIREWARE_UPDATE_FLAG 0x55555555
- #include "hal_key.h"
- #include "hal_rgb.h"
- //
- #include "user_uart.h"
- #include "user_timer.h"
- #include "user_flash.h"
- typedef struct {
- uint32_t magic_code;
- uint8_t led_switch;
- uint8_t work_mode;
- uint8_t led_switch2;
- uint8_t bright_value;
- uint8_t colour[14];
- uint8_t scene[14];
- } TYPE_BUFFER_S;
- #endif
复制代码 其实我觉得这块不改也行,因为下来的函数已经同处理函数挂上了。
最后编译,错误多多,警告也多多,不要紧,凡是同彩灯有关的错误,一律用//斩杀。
再编译,有警告不管。
然后用FLASH LOADER那个软件,按MCU BOOT,下到0x08002000那个地方就行了。根本不用再下BOOT那个BIN。
运行效果:
当我点开关1时,PORTA的第一脚有高低电平变化,说明成功:
|
|