Siliconlabs BLE入门篇:基础外设使用 [复制链接]

1、创建工程

选择 New project wizard

点击next

双击empty c project。

选择copy contents

点finish

2、添加外设组件

进入software component,添加外设组件。

2.1 添加串口输出和printf

2.1.1 增加外设 VCOM

install

Platform->driver->swo

Platform->peripheral->usart

Services->peripheral-> Automatic Device Initialization

Services: IO Stream: USARTInstall

创建一个vcom实例

Services :IO Stream: Retarget STDIOInstall

导入以下头文件到app.c

#include <stdio.h>

#include <string.h>

#include "em_chip.h"

#include "sl_iostream.h"

#include "sl_iostream_init_instances.h"

#include "sl_iostream_handles.h"

const char str1[] = "IOstream USART example\r\n\r\n";

sl_iostream_write(sl_iostream_vcom_handle, str1, strlen(str1));

这样就可以用l_iostream_write写入数据到串口

2.1.2 Printf 重定向

software component搜索tiny printf

third party ->unitl->tiny printf

2.2 增加外设GPIO

2.2.1 Led

Platform:driver:led:Generic LED API

点击install

 点击done创建一个实例

#include "sl_simple_led.h"里是led的功能函数

sl_simple_led_init(&simple_led0_context);初始化

sl_simple_led_turn_on点灯

sl_simple_led_turn_off关灯

sl_simple_led_toggle反转

sl_simple_led_get_state获取灯的状态

typedef struct {

GPIO_Port_TypeDef port; ///< LED port

uint8_t pin; ///< LED pin

sl_led_polarity_t polarity; ///< Initial state of LED

} sl_simple_led_context_t;//LED初始化结构体

底层头文件

#include "em_gpio.h

GPIO_PinOutClear()Set bits in DOUT register for a port to 0. GPIO_PortOutSet Set bits GPIO data out register to 1.

GPIO_PortOutToggleToggle pins in GPIO port data out register.

GPIO_PinOutGetGet current setting for a pin in a GPIO port data out regisl_simple_led_context_t *led = context;ster.

初始化过程配置引脚

sl_simple_led_context_t simple_led0_context = {

.port = SL_SIMPLE_LED_LED0_PORT,

.pin = SL_SIMPLE_LED_LED0_PIN,

.polarity = SL_SIMPLE_LED_LED0_POLARITY,

};初始化结构体

sl_simple_led_context_t *led = context;

CMU_ClockEnable(cmuClock_GPIO, true);//时钟使能

GPIO_PinModeSet(led->port,

led->pin,

gpioModePushPull,

!led->polarity);

2.2.2 Button

Platform:driver:led:Generic LED button API

创建一个button实例

void button_init()

{

CMU_ClockEnable(cmuClock_GPIO, true);

GPIO_PinModeSet(gpioPortB,

                    2,

                    gpioModeInput,

                    0);

//初始化输入模式

//浮空输入gpioModeInput,

gpioModeInputPull,上来下拉由第四个参数决定 1上拉/0下拉

}

GPIO_PinInGet(gpioPortB,2)获取b2的输入电平

2.2.3  sleeptimer (app_timer)

service:time:sleeptimer

Sleepimer驱动程序使用低频实时时钟外设提供软件定时器、延迟、计时和日期功能。睡眠定时器使用一个硬件定时器并创建多个软件定时器实例。睡眠定时器可用于创建与电源管理紧密集成的定时器。电源管理器需要精确的计时,以使所有时钟按时准备就绪,因此唤醒发生得更早一点,为系统在正确的时间做好准备。

sl_sleeptimer_init();//初始化睡眠定时器

sl_sleeptimer_timer_handle_t handle;

sl_sleeptimer_start_periodic_timer(&handle,1000,timecallback,NULL,0,true);开启定时周期回调

void timecallback()//回调函数

{

printf("1");

printf("sl_simple_button_get_state %d\r\n",GPIO_PinInGet(gpioPortB,2));

}

Silicon lab的定时器有用了app_timer封装了一层sleeptime使用

用法一样只不过少了初始化步骤

static app_timer_t app_periodic_timer;

    sc = app_timer_start(&app_periodic_timer,

                         SL_BT_HT_MEASUREMENT_INTERVAL_SEC * 1000,

                         app_periodic_timer_cb,

                         NULL,

                         true);//开启定时器

  app_periodic_timer_cb(&app_periodic_timer, NULL);//重写写定时回调函数 执行定时任务

2.2.4 temp

platform:driver:tempdev

温度驱动器使用一些EFR32和EFM32设备上的EMU内部温度传感器测量温度。特定于应用程序的回调函数可以注册,并将在给定的温度阈值上调用。EMU内部温度传感器在EM0-EM4H中运行,能够在温度变化时唤醒核心。EMU温度传感器连续运行,每250毫秒进行一次测量。对于适用勘误表EMU_E201的设备,温度驱动器执行一种变通方法,根据测量的温度调整EMU设置。有关此勘误表解决方法的更多信息,请参阅应用说明AN1027。

导入 #include "tempdrv.h"

TEMPDRV_Init();

printf("TEMPDRV_GetTemp %d\r\n",TEMPDRV_GetTemp());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值