热度 2
2024-1-15 10:46
592 次阅读|
0 个评论
创建工程 选择 New project wizard 点击next 双击empty c project。 选择copy contents 点finish 进入software component,添加外设组件。 外设VCOM install swo usart Automatic Device Initialization Services: IO Stream: USARTInstall 创建一个vcom实例 Services :IO Stream: Retarget STDIOInstall 导入以下头文件到app.c #include #include #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 tiny printf GPIOLed 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_PortOutToggle Toggle pins in GPIO port data out register. GPIO_PinOutGet Get 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);//时钟使能 port, pin, gpioModePushPull , 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());