BLE基础外设使用

zsbyg   2024-1-16 19:16 楼主

创建工程

选择 New project wizard
191512rl9vv1d66zhv9yv0.png
点击next
191512xkbfrebge3acepi4.png
双击empty c project。
191512wl6fj2hr6zkiiiji.png
选择copy contents
点finish
进入software component,添加外设组件。

外设

VCOM

install
Platform->driver->swo
Platform->peripheral->usart
Services->peripheral-> Automatic Device Initialization
Services: IO Stream: USARTInstall
创建一个vcom实例
191512u9xnnhmhefml666p.png
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));
191512d5vy7z7m5r0z5vgf.png
这样就可以用l_iostream_write写入数据到串口

Printf 重定向

在software component搜索tiny printf
在third party ->unitl->tiny printf
191512d5vy7z7m5r0z5vgf.png
191512n119hq11z76cqslm.png

GPIO

Led

Platform:driver:led:Generic LED API
191512w53yjc3zgvc6pjtt.png
点击install
191512j2wuw6uf50633y7l.png 点击done创建一个实例
191512ytuuwbv533tvvrv4.png
#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实例
191512xui4rbddyddmcnpz.png
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驱动程序使用低频实时时钟外设提供软件定时器、延迟、计时和日期功能。睡眠定时器使用一个硬件定时器并创建多个软件定时器实例。睡眠定时器可用于创建与电源管理紧密集成的定时器。电源管理器需要精确的计时,以使所有时钟按时准备就绪,因此唤醒发生得更早一点,为系统在正确的时间做好准备。
191512qcp9bpspztzr76cy.png
191512zep2zaw80bd3822w.png
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。
191512ejk7kcaarxta2drp.png
导入 #include "tempdrv.h"
TEMPDRV_Init();
printf("TEMPDRV_GetTemp %d\r\n",TEMPDRV_GetTemp());

回复评论 (6)

感谢分享,不过希望楼主可以使用编辑器的高级模式,该模式有专门的代码块编辑,会使代码看起来更方便简洁,像下面这样

import os

def hello():
	print('Hello World!')

hello()

 

点赞  2024-1-19 11:41
引用: 极限零 发表于 2024-1-19 11:41 感谢分享,不过希望楼主可以使用编辑器的高级模式,该模式有专门的代码块编辑,会使代码看起来更方便简洁, ...

有高级模式的截图吗

 

点赞  2024-1-19 19:44
引用: zsbyg 发表于 2024-1-19 19:44 有高级模式的截图吗  

发贴时可以直接用,点完了直接粘代码就行,操作很简单

图片.png   回贴时有高级模式,进入之后和上面的是一样的

图片.png  

点赞  2024-1-20 13:03
引用: 极限零 发表于 2024-1-20 13:03 发贴时可以直接用,点完了直接粘代码就行,操作很简单   回贴时有高级模式,进入之后和上面的是 ...

好的

点赞  2024-1-20 13:10

不用高级模式也可以贴代码的,选择代码,要不然这样看起来太累了,有需要的人cp也不方便

点赞  2024-1-21 22:40

感谢

点赞  2024-8-21 13:34
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复