查看: 1305|回复: 1

[原创] 【TYDE3.0 涂鸦智能 IoT开发板】2 改一下DEMO,并有重大发现

[复制链接]

主题

好友

5098

积分

版主

  • TA的每日心情
    慵懒
    2018-11-29 12:20
  • 签到天数: 710 天

    连续签到: 3 天

    [LV.9]以坛为家II

    发表于 2018-2-15 08:20:57 |显示全部楼层
    真的很高兴发这贴,不是因为今天是年三十了,也不是因为今天天气晴朗。而是我发现了一个重大问题。

    1,烦得很

    先说说我昨天干的事情吧。昨天我用的是MDK改了一个主程序,我的意思是由于RGB坏了,我还没有法买,快递哥哥都回家了。
    我就想再加一个灯,装灯,嘿嘿 28.gif


    我看了下论坛里的贴子,也没看原理图我决定用A1,也就是PORTA的第一脚开刀。

    是这样,

    在hal_rgb.h中定义A1,由于大家现在看网络直播都爱用666我就用666起了个函数名。

    1. #define LED2_ON()        GPIO_ResetBits(GPIOB,GPIO_Pin_5)
    2. #define LED2_OFF()       GPIO_SetBits(GPIOB,GPIO_Pin_5)

    3. #define LED1_ON()        GPIO_ResetBits(GPIOB,GPIO_Pin_6)
    4. #define LED1_OFF()       GPIO_SetBits(GPIOB,GPIO_Pin_6)

    5. #define LED666_ON()        GPIO_ResetBits(GPIOA,GPIO_Pin_1)
    6. #define LED666_OFF()       GPIO_SetBits(GPIOA,GPIO_Pin_1)

    7. #define LED_G_ON()        GPIO_ResetBits(GPIOB,GPIO_Pin_7)
    8. #define LED_G_OFF()       GPIO_SetBits(GPIOB,GPIO_Pin_7)

    9. #define LED_R_ON()        GPIO_ResetBits(GPIOB,GPIO_Pin_8)
    10. #define LED_R_OFF()       GPIO_SetBits(GPIOB,GPIO_Pin_8)

    11. #define LED_B_ON()        GPIO_ResetBits(GPIOB,GPIO_Pin_9)
    12. #define LED_B_OFF()       GPIO_SetBits(GPIOB,GPIO_Pin_9)
    复制代码
    然后在Hal_RBG.c中初始化:
    1. /*****************************************************************************
    2. º¯ÊýÃû³Æ : RGB_LED_Init
    3. ¹¦ÄÜÃèÊö : RGB_LED³õʼ»¯
    4. ÊäÈë²ÎÊý : ÎÞ
    5. ·µ»Ø²ÎÊý : ÎÞ
    6. ʹÓÃ˵Ã÷ : ÎÞ
    7. *****************************************************************************/
    8. void RGB_LED_Init(void)
    9. {
    10.   GPIO_InitTypeDef GPIO_InitStruct;
    11.   
    12.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_GPIOA ,ENABLE);
    13.   
    14.   GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    15.   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8 | GPIO_Pin_9 | GPIO_Pin_5 | GPIO_Pin_6;
    16.   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    17.   GPIO_Init(GPIOB, &GPIO_InitStruct);
    18.        
    19.         GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
    20.   GPIO_InitStruct.GPIO_Pin = GPIO_Pin_1;
    21.   GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;
    22.   GPIO_Init(GPIOA, &GPIO_InitStruct);
    23.    
    24.   LED1_OFF();
    25.   LED2_OFF();
    26.         LED666_OFF();

    27.   LED_R_OFF();                       //R
    28.   LED_G_OFF();                       //G
    29.   LED_B_OFF();                       //B
    30. }
    复制代码
    再在protocol.c中加上这个函数:

    1. static unsigned char dp_download_led_switch_handle(const unsigned char value[], unsigned short length)
    2. {
    3.   //ʾÀý:µ±Ç°DPÀàÐÍΪBOOL
    4.   unsigned char ret;
    5.   //0:¹Ø/1:¿ª
    6.   unsigned char led_switch;
    7.   uint8_t colour_r,colour_g,colour_b;
    8.   
    9.   led_switch = mcu_get_dp_download_bool(value,length);
    10.   if(led_switch == 0)
    11.   {
    12.     //¿ª¹Ø¹Ø
    13.     LED_RGB_Control(0,0,0);
    14.                 LED666_OFF();
    15.   }
    16.   else
    17.   {
    18.     //¿ª¹Ø¿ª
    19.                 LED666_ON();
    20.     switch(FlashBuffer.work_mode)
    21.     {
    22.     case 0:
    23.       LED_RGB_Control(FlashBuffer.bright_value,FlashBuffer.bright_value,FlashBuffer.bright_value);
    24.       break;
    25.       
    26.     case 1:
    27.       colour_r = hex_to_bcd(FlashBuffer.colour[0],FlashBuffer.colour[1]);
    28.       colour_g = hex_to_bcd(FlashBuffer.colour[2],FlashBuffer.colour[3]);
    29.       colour_b = hex_to_bcd(FlashBuffer.colour[4],FlashBuffer.colour[5]);
    30.       LED_RGB_Control(colour_r,colour_g,colour_b);
    31.       break;
    32.       
    33.     case 2:
    34.       colour_r = hex_to_bcd(FlashBuffer.scene[0],FlashBuffer.scene[1]);
    35.       colour_g = hex_to_bcd(FlashBuffer.scene[2],FlashBuffer.scene[3]);
    36.       colour_b = hex_to_bcd(FlashBuffer.scene[4],FlashBuffer.scene[5]);
    37.       LED_RGB_Control(colour_r,colour_g,colour_b);
    38.       break;
    39.     }
    40.   }
    41.   
    42.   Earse_Flash(PARA_ADDR);
    43.   FlashBuffer.led_switch = led_switch;
    44.   
    45.   if(Write_Flash(PARA_ADDR,(unsigned char *)&FlashBuffer,sizeof(FlashBuffer)) == ERROR)
    46.   {
    47.     return ERROR;
    48.   }
    49.   

    50.   ret = mcu_dp_bool_update(DPID_LED_SWITCH,led_switch);
    51.   if(ret == SUCCESS)
    52.     return SUCCESS;
    53.   else
    54.     return ERROR;
    55. }
    复制代码
    然后编译,有58个警告,那个boot也有几个,我看了无关大局,所以也没改,先让它滚蛋。

    然后我按网友JLINK合并的方法合并这两个文件,用ST官方的串口软件Flash loader demonstrator下载到涂鸦板子里,LED1不亮。我怀疑是我合并错了,我下了winhex合并,下了后也不行,又下了别了U什么完意,反正也不行。

    我没则了,我就上微信求大神帮忙,可是大神就应该亮灯的。我也觉得应亮灯的,我于是重新把DEMO解压,不做任何修改编译。合成完后也不行。就这样,昨天在不太高兴的心情中渡过了。

    2,转机
    今天早晨起来,我想了一下,觉得合并没有多大问题。只是我用的是MDK,那么试下IAR吧。反正DEMO里也有,我就用IAR编译
    后,用JLINK合并,下载。泥马LED1终于亮了。我得出重大结论,大家以后用MDK出不来的用IAR编译吧

    3,实施


    那么问题找到了,我就用IAR把上边步骤给写了一下,下边我想重点说说合并,我也是用JLINK合并文件的:

    首先,最好把CPU选择AUTO,应为怕FLASH不够用。打开Boot那个BIN
    JLINK1.jpg


    JLINK2.jpg

    然后选File的Merge data file......

    JLINK3.jpg

    打开编译后的主文件BIN
    JLINK4.jpg

    然后JLINK有个弹出窗口,添2000
    JLINK5.jpg

    提示你是否把原来覆盖:

    JLINK6.jpg

    然后另存为BIN文件,BIN在右下选择
    JLINK7.jpg


    起个自己的名字:我用的是EWARM3.BIN


    我用串口软件下载:
    flash1.jpg



    下载后,我按了下MCU这边的复位,过了半分钟,LED1亮了,因为我以前联过网所以这次就直接上网了。反正LED1始终亮着。

    那么效果如何呢:
    以下是开LED666和并LED666的效果,由于本人很懒就中用LED了,用万用表量一下:

    IMG_0062.JPG



    IMG_0063.JPG


    我发现LED的开关正好同APP相反


    回复

    使用道具 举报

    主题

    好友

    1万

    积分

    翰林

  • TA的每日心情
    开心
    7 小时前
  • 签到天数: 1842 天

    连续签到: 104 天

    [LV.Master]伴坛终老

    发表于 2018-2-15 17:08:50 |显示全部楼层
    MDK和IAR编译出来的程序都差不多,不会出现MDK编译不正确的,用IAR就一定能正确。
    如果出现MDK编译不正确,IAR能正确,那只能说明MDK相关选项设置不正确。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    关闭

    站长推荐上一条 /4 下一条

    手机版|爱板网

    GMT+8, 2018-12-14 07:30 , Processed in 0.084614 second(s), 14 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-5   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001056号

    Powered by Discuz!

    返回顶部