【华大测评】+ 环境搭建,点灯、按键等

今天搭建开发板开发环境,keil+JLink,其实论坛很多 人都写过了,坑也填的差不多了,这里就不多废话了,我搭建和顺利,基本没出现什么问题。这里只说一个我踩到的雷,估计大多数人都碰不到。对一个自己之前没有用过的开发板,搭建工程时,我不太喜欢使用提供的Project Sample,一般我都会从头搭建,顺便熟悉下库文件及文件放置的规律。我是在官网上下载的资料,开始搭建,同时为了驱动LCD,我也下载了论坛上的驱动LCD的样例程序,这里犯了一个严重的错误,CPU相关的库文件及配置文件我在搭建时混着用了,编译出错了,然后我用BC进行了对比,发现库文件中的定义不同,如下:

当时没反应过来,我就编译了下LCD的代码,OK,心里想不会是官方的例程编不过吧,对比了两个库文件下的readme,才发现官网的比较新,这才意识到文件混用了,马上改正后编译顺利通过,这里浪费了一些时间,这里建议大家直接用官网的例程就可以了,不会出现我出现的问题,这里是个小插曲。
言归正传,按照例程copy LED代码,使能System tick定时器,驱动LED闪烁,写Key读取代码(这里是单个按键,矩阵按键准备等下次再弄)并驱动LED闪烁,

  1. #define  LED0_PORT        (PortE)   // LED1
  2. #define  LED0_PIN         (Pin06)
  3. #define  LED1_PORT        (PortA)   // LED2
  4. #define  LED1_PIN         (Pin07)
  5. #define  LED2_PORT        (PortB)   // LED3
  6. #define  LED2_PIN         (Pin05)
  7. #define  LED3_PORT        (PortB)   // LED4
  8. #define  LED3_PIN         (Pin09)

复制代码

  1. /* LED0~3 toggle definition */
  2. #define  LED0_TOGGLE()    (PORT_Toggle(LED0_PORT, LED0_PIN))
  3. #define  LED1_TOGGLE()    (PORT_Toggle(LED1_PORT, LED1_PIN))
  4. #define  LED2_TOGGLE()    (PORT_Toggle(LED2_PORT, LED2_PIN))
  5. #define  LED3_TOGGLE()    (PORT_Toggle(LED3_PORT, LED3_PIN))

复制代码

  1. static void SysClkInit(void)
  2. {
  3. en_clk_sys_source_t     enSysClkSrc;
  4. stc_clk_sysclk_cfg_t    stcSysClkCfg;
  5. stc_clk_xtal_cfg_t      stcXtalCfg;
  6. stc_clk_mpll_cfg_t      stcMpllCfg;
  7. MEM_ZERO_STRUCT(enSysClkSrc);
  8. MEM_ZERO_STRUCT(stcSysClkCfg);
  9. MEM_ZERO_STRUCT(stcXtalCfg);
  10. MEM_ZERO_STRUCT(stcMpllCfg);
  11. /* Set bus clk div. */
  12. stcSysClkCfg.enHclkDiv = ClkSysclkDiv1;   // Max 168MHz
  13. stcSysClkCfg.enExclkDiv = ClkSysclkDiv2;  // Max 84MHz
  14. stcSysClkCfg.enPclk0Div = ClkSysclkDiv1;  // Max 168MHz
  15. stcSysClkCfg.enPclk1Div = ClkSysclkDiv2;  // Max 84MHz
  16. stcSysClkCfg.enPclk2Div = ClkSysclkDiv4;  // Max 60MHz
  17. stcSysClkCfg.enPclk3Div = ClkSysclkDiv4;  // Max 42MHz
  18. stcSysClkCfg.enPclk4Div = ClkSysclkDiv2;  // Max 84MHz
  19. CLK_SysClkConfig(&stcSysClkCfg);
  20. /* Switch system clock source to MPLL. */
  21. /* Use Xtal32 as MPLL source. */
  22. stcXtalCfg.enMode = ClkXtalModeOsc;
  23. stcXtalCfg.enDrv = ClkXtalLowDrv;
  24. stcXtalCfg.enFastStartup = Enable;
  25. CLK_XtalConfig(&stcXtalCfg);
  26. CLK_XtalCmd(Enable);
  27. /* MPLL config. */
  28. stcMpllCfg.pllmDiv = 1u;
  29. stcMpllCfg.plln =42u;
  30. stcMpllCfg.PllpDiv = 2u;
  31. stcMpllCfg.PllqDiv = 2u;
  32. stcMpllCfg.PllrDiv = 2u;
  33. CLK_SetPllSource(ClkPllSrcXTAL);
  34. CLK_MpllConfig(&stcMpllCfg);
  35. /* flash read wait cycle setting */
  36. EFM_Unlock();
  37. EFM_SetLatency(EFM_LATENCY_5);
  38. EFM_Lock();
  39. /* Enable MPLL. */
  40. CLK_MpllCmd(Enable);
  41. /* Wait MPLL ready. */
  42. while(Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))
  43. {
  44. ;
  45. }
  46. /* Switch system clock source to MPLL. */
  47. CLK_SetSysClkSource(CLKSysSrcMPLL);
  48. }

复制代码

  1. #define  ACTIVE_LEVEL_LOW   (0)
  2. #define  ACTIVE_LEVEL_HIGH  (1)
  3. #define  KEY_ACTIVE_LEVEL   ACTIVE_LEVEL_LOW
  4. #define  KEY_PORT           (PortD)
  5. #define  KEY1_PIN           (Pin03)
  6. #define  KEY2_PIN           (Pin04)
  7. #define  KEY3_PIN           (Pin05)
  8. #define  KEY4_PIN           (Pin06)

复制代码

然后编译,烧写后看到开发板Green LED 灯周期闪烁,Blue LED 在SW2每按下一次状态翻转一次,收工。

(0)

相关推荐