EFR32FG1开发教程1--点亮LED

前言:EFR32芯片开发工具主要有两个,Simplicity Studio、IAR FOR ARM。个人习惯和不喜欢Simplicity Studio代码生成工具生成许多没有作用的文件和代码原因,采用IAR作为开发工具。

1. 开发文件准备:在工程目录下建立CMSIS文件夹

1.1复制软件Simplicity Studio安装目录的emlib文件夹到工程目录SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\v2.2\platform\emlib  

1.2复制EFR32FG1P文件夹到工程目录CMSIS文件夹下

SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\v2.2\platform\Device\SiliconLabs\EFR32FG1P

1.3复制Include文件夹到工程目录CMSIS文件夹下

SimplicityStudio\v4\developer\sdks\gecko_sdk_suite\v2.2\platform\CMSIS\Include

1.4工程目录下建立BSPUSER文件夹,如下图所示:

2. IAR建立工程

2.1选取对应型号,如下图


2.2 在工程目录中添加main.c和CMSIS\EFR32FG1P\Source下的system_efr32fg1p.c和CMSIS\EFR32FG1P\SourceIAR下的startup_efr32fg1p.s文件,并添加库函数到工程中,如下图


2.3 工程头文件路径添加,并添加全局宏定义EFR32FG1P132F128GM48  如下图所示

$PROJ_DIR$\USER

$PROJ_DIR$\CMSIS\EFR32FG1P\Include

$PROJ_DIR$\CMSIS\Include

$PROJ_DIR$\emlib\inc


3.正式编写程序

/**
  ******************************************************************************
  * @file    main.c
  * @author  Garen
  * @version V1.0.0
  * @date    2018-05-21
  * @brief   程序入口main函数所在文件
  *
  ******************************************************************************
  */
/* Includes ------------------------------------------------------------------*/
#include "em_chip.h"
#include "em_cmu.h"
#include "em_emu.h"
#include "em_gpio.h"
/* extern  variables ---------------------------------------------------------*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
/* Private macro -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
/* Private functions ---------------------------------------------------------*/

/**
  * @brief  时钟初始化
  * @retval None
  */
void BSP_ClocksInit(void)
{
  // Device errata
  CHIP_Init();
  // Initialize the system clocks //时钟采用外部晶振38.4M
  CMU_HFXOInit_TypeDef hfxoInit = CMU_HFXOINIT_DEFAULT;
  CMU_HFXOInit(&hfxoInit);
  SystemHFXOClockSet(38400000UL);
  // Enable HFXO oscillator, and wait for it to be stable
  CMU_OscillatorEnable(cmuOsc_HFXO, true, true);
  // Use HFXO as high frequency clock
  CMU_ClockSelectSet(cmuClock_HF, cmuSelect_HFXO);
  // HFRCO not needed when using HFXO
  CMU_OscillatorEnable(cmuOsc_HFRCO, false, false);
  CMU_ClockSelectSet(cmuClock_LFA, cmuSelect_LFRCO);
  CMU_ClockSelectSet(cmuClock_LFB, cmuSelect_LFRCO);
  CMU_ClockSelectSet(cmuClock_LFE, cmuSelect_LFRCO);
  // Default to LFRCO, it's the only option always present,
  // the code below will pick a better option if available
  CMU_Osc_TypeDef lowFrequencyClockSource = cmuOsc_LFRCO;
  CMU_Select_TypeDef lowFrequencyClockSelect = cmuSelect_LFRCO;
  if (CMU->STATUS & CMU_STATUS_LFXOENS) 
  {
    lowFrequencyClockSource = cmuOsc_LFXO;
    lowFrequencyClockSelect = cmuSelect_LFXO;
  }
  // Enable necessary clocks and set clock selections
  CMU_ClockEnable(cmuClock_CORELE, true);
  CMU_OscillatorEnable(lowFrequencyClockSource, true, true);
  CMU_ClockSelectSet(cmuClock_LFA, lowFrequencyClockSelect);
  CMU_ClockSelectSet(cmuClock_LFB, lowFrequencyClockSelect);
  CMU_ClockSelectSet(cmuClock_LFE, lowFrequencyClockSelect);
}

/**
  * @brief  初始化led对应的IO
  * @retval None
  */
void BSP_LedInit(void)
{
  CMU_ClockEnable(cmuClock_HFPER, true);
  CMU_ClockEnable(cmuClock_GPIO, true);
  GPIO_PinModeSet(gpioPortC,11, gpioModePushPull, 1);
}

/**
  * @brief  点亮LED
  * @retval None
  */
void BSP_LedOn(void)
{
  GPIO_PinOutClear(gpioPortC, 11);
}

/**
  * @brief  程序总入口main()函数
  * @retval int
  */
int main(void)
{
  //Initialize the system clocks
  BSP_ClocksInit();
  // Initialize the LEDs on the board
  BSP_LedInit();
  //led on
  BSP_LedOn();
  while(1)
  {
  
  }
}


  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值