1回答

1收藏

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

物联网 物联网 5110 人阅读 | 1 人回复 | 2018-02-15

真的很高兴发这贴,不是因为今天是年三十了,也不是因为今天天气晴朗。而是我发现了一个重大问题。

1,烦得很

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


我看了下论坛里的贴子,也没看原理图我决定用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



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


打开编译后的主文件BIN

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

提示你是否把原来覆盖:


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


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


我用串口软件下载:



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

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






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


http://shop34182318.taobao.com/
https://shop436095304.taobao.com
分享到:
回复

使用道具 举报

回答|共 1 个

倒序浏览

沙发

toofree

发表于 2018-2-15 17:08:50 | 只看该作者

MDK和IAR编译出来的程序都差不多,不会出现MDK编译不正确的,用IAR就一定能正确。
如果出现MDK编译不正确,IAR能正确,那只能说明MDK相关选项设置不正确。
您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

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