注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
zsbyg的个人空间 https://home.eeworld.com.cn/space-uid-1278566.html [收藏] [复制] [分享] [RSS]
日志

BLE基础外设使用

已有 342 次阅读2024-1-16 19:16 |个人分类:BLE

创建工程



选择 New project wizard




点击next




双击empty c project。




选择copy contents


点finish


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


外设



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写入数据到串口


Printf 重定向



在software component搜索tiny printf


在third party ->unitl->tiny printf






GPIO



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);


配置引脚


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的输入电平


time



sleeptimer


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);//重写写定时回调函数 执行定时任务


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());

本文来自论坛,点击查看完整帖子内容。

全部作者的其他最新日志
评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章