【华大测评】+ 环境搭建,点灯、按键等
今天搭建开发板开发环境,keil+JLink,其实论坛很多 人都写过了,坑也填的差不多了,这里就不多废话了,我搭建和顺利,基本没出现什么问题。这里只说一个我踩到的雷,估计大多数人都碰不到。对一个自己之前没有用过的开发板,搭建工程时,我不太喜欢使用提供的Project Sample,一般我都会从头搭建,顺便熟悉下库文件及文件放置的规律。我是在官网上下载的资料,开始搭建,同时为了驱动LCD,我也下载了论坛上的驱动LCD的样例程序,这里犯了一个严重的错误,CPU相关的库文件及配置文件我在搭建时混着用了,编译出错了,然后我用BC进行了对比,发现库文件中的定义不同,如下:
当时没反应过来,我就编译了下LCD的代码,OK,心里想不会是官方的例程编不过吧,对比了两个库文件下的readme,才发现官网的比较新,这才意识到文件混用了,马上改正后编译顺利通过,这里浪费了一些时间,这里建议大家直接用官网的例程就可以了,不会出现我出现的问题,这里是个小插曲。
言归正传,按照例程copy LED代码,使能System tick定时器,驱动LED闪烁,写Key读取代码(这里是单个按键,矩阵按键准备等下次再弄)并驱动LED闪烁,
- #define LED0_PORT (PortE) // LED1
- #define LED0_PIN (Pin06)
- #define LED1_PORT (PortA) // LED2
- #define LED1_PIN (Pin07)
- #define LED2_PORT (PortB) // LED3
- #define LED2_PIN (Pin05)
- #define LED3_PORT (PortB) // LED4
- #define LED3_PIN (Pin09)
复制代码
- /* LED0~3 toggle definition */
- #define LED0_TOGGLE() (PORT_Toggle(LED0_PORT, LED0_PIN))
- #define LED1_TOGGLE() (PORT_Toggle(LED1_PORT, LED1_PIN))
- #define LED2_TOGGLE() (PORT_Toggle(LED2_PORT, LED2_PIN))
- #define LED3_TOGGLE() (PORT_Toggle(LED3_PORT, LED3_PIN))
复制代码
- static void SysClkInit(void)
- {
- en_clk_sys_source_t enSysClkSrc;
- stc_clk_sysclk_cfg_t stcSysClkCfg;
- stc_clk_xtal_cfg_t stcXtalCfg;
- stc_clk_mpll_cfg_t stcMpllCfg;
- MEM_ZERO_STRUCT(enSysClkSrc);
- MEM_ZERO_STRUCT(stcSysClkCfg);
- MEM_ZERO_STRUCT(stcXtalCfg);
- MEM_ZERO_STRUCT(stcMpllCfg);
- /* Set bus clk div. */
- stcSysClkCfg.enHclkDiv = ClkSysclkDiv1; // Max 168MHz
- stcSysClkCfg.enExclkDiv = ClkSysclkDiv2; // Max 84MHz
- stcSysClkCfg.enPclk0Div = ClkSysclkDiv1; // Max 168MHz
- stcSysClkCfg.enPclk1Div = ClkSysclkDiv2; // Max 84MHz
- stcSysClkCfg.enPclk2Div = ClkSysclkDiv4; // Max 60MHz
- stcSysClkCfg.enPclk3Div = ClkSysclkDiv4; // Max 42MHz
- stcSysClkCfg.enPclk4Div = ClkSysclkDiv2; // Max 84MHz
- CLK_SysClkConfig(&stcSysClkCfg);
- /* Switch system clock source to MPLL. */
- /* Use Xtal32 as MPLL source. */
- stcXtalCfg.enMode = ClkXtalModeOsc;
- stcXtalCfg.enDrv = ClkXtalLowDrv;
- stcXtalCfg.enFastStartup = Enable;
- CLK_XtalConfig(&stcXtalCfg);
- CLK_XtalCmd(Enable);
- /* MPLL config. */
- stcMpllCfg.pllmDiv = 1u;
- stcMpllCfg.plln =42u;
- stcMpllCfg.PllpDiv = 2u;
- stcMpllCfg.PllqDiv = 2u;
- stcMpllCfg.PllrDiv = 2u;
- CLK_SetPllSource(ClkPllSrcXTAL);
- CLK_MpllConfig(&stcMpllCfg);
- /* flash read wait cycle setting */
- EFM_Unlock();
- EFM_SetLatency(EFM_LATENCY_5);
- EFM_Lock();
- /* Enable MPLL. */
- CLK_MpllCmd(Enable);
- /* Wait MPLL ready. */
- while(Set != CLK_GetFlagStatus(ClkFlagMPLLRdy))
- {
- ;
- }
- /* Switch system clock source to MPLL. */
- CLK_SetSysClkSource(CLKSysSrcMPLL);
- }
复制代码
- #define ACTIVE_LEVEL_LOW (0)
- #define ACTIVE_LEVEL_HIGH (1)
- #define KEY_ACTIVE_LEVEL ACTIVE_LEVEL_LOW
- #define KEY_PORT (PortD)
- #define KEY1_PIN (Pin03)
- #define KEY2_PIN (Pin04)
- #define KEY3_PIN (Pin05)
- #define KEY4_PIN (Pin06)
复制代码
然后编译,烧写后看到开发板Green LED 灯周期闪烁,Blue LED 在SW2每按下一次状态翻转一次,收工。
赞 (0)