zephyr版本:1.10
硬件:采用青风nrf52832开发板
开发环境:虚拟机Ubuntu16.04编译+Windows7 64bit烧录
 
使用的是 zephyr-zephyr-v1.10.0/samples/bluetooth/peripheral_hr 例程
由于1.10版本采用的是cmake,所以编译指令和之前Kbuild有所区别:
1、export两个环境变量:(参考doc文件下的入门文档)
 export ZEPHYR_GCC_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk

2、编译

 cd samples/bluetooth/peripheral
cmake -DBOARD=nrf52_pca10040 -H. -Bbuild
cd build
make menuconfig
make
这样编译生成的固件,使用nRF Toolbox可以模拟心跳,APP中的HRM功能
但是我们要电亮led,所以,下面,写代码
首先拿到GPIO设备驱动的指针
 gpio_dev = device_get_binding(CONFIG_GPIO_NRF5_P0_DEV_NAME);
其中CONFIG_GPIO_NRF5_P0_DEV_NAME是在make menuconfig中配置
Device Drivers  --->
    [*] GPIO Drivers  --->
         -*-  Nordic Semiconductor nRF5X-based GPIO driver  ---> 
                 [*]  nRF5x GPIO Port P0 options                                          
                (myGPIO) GPIO Port P0 Device Name                        
               (1)    GPIOTE P0 interrupt priority 

第二步,配置下gpio端口的四个pin,p0.17,p0.18,p0.19,p0.20,我是配置成了上拉输出:
 (void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP));
(void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP));
(void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP));
(void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP));

下面就可以操作gpio了,我们按pin来操作

 gpio_pin_write(gpio_dev,  + (gpio_delay_pin % ), gpio_delay % );
总结:gpio操作的接口函数在include/gpio.h中定义,刚学习这个RTOS,设备驱动慢慢搞,点个灯先test下
 
贴上完整代码:
 #include <zephyr/types.h>
#include <stddef.h>
#include <string.h>
#include <errno.h>
#include <misc/printk.h>
#include <misc/byteorder.h>
#include <zephyr.h> #include <bluetooth/bluetooth.h>
#include <bluetooth/hci.h>
#include <bluetooth/conn.h>
#include <bluetooth/uuid.h>
#include <bluetooth/gatt.h> #include <gatt/hrs.h>
#include <gatt/dis.h>
#include <gatt/bas.h> #include <device.h>
#include <board.h>
#include <gpio.h> #define DEVICE_NAME CONFIG_BT_DEVICE_NAME
#define DEVICE_NAME_LEN (sizeof(DEVICE_NAME) - 1) struct bt_conn *default_conn; static const struct bt_data ad[] = {
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
BT_DATA_BYTES(BT_DATA_UUID16_ALL, 0x0d, 0x18, 0x0f, 0x18, 0x05, 0x18),
}; static const struct bt_data sd[] = {
BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
}; static void connected(struct bt_conn *conn, u8_t err)
{
if (err) {
printk("Connection failed (err %u)\n", err);
} else {
default_conn = bt_conn_ref(conn);
printk("Connected\n");
}
} static void disconnected(struct bt_conn *conn, u8_t reason)
{
printk("Disconnected (reason %u)\n", reason); if (default_conn) {
bt_conn_unref(default_conn);
default_conn = NULL;
}
} static struct bt_conn_cb conn_callbacks = {
.connected = connected,
.disconnected = disconnected,
}; static void bt_ready(int err)
{
if (err) {
printk("Bluetooth init failed (err %d)\n", err);
return;
} printk("Bluetooth initialized\n"); hrs_init(0x01);
bas_init();
dis_init(CONFIG_SOC, "Manufacturer"); err = bt_le_adv_start(BT_LE_ADV_CONN, ad, ARRAY_SIZE(ad),
sd, ARRAY_SIZE(sd));
if (err) {
printk("Advertising failed to start (err %d)\n", err);
return;
} printk("Advertising successfully started\n");
} static void auth_cancel(struct bt_conn *conn)
{
char addr[BT_ADDR_LE_STR_LEN]; bt_addr_le_to_str(bt_conn_get_dst(conn), addr, sizeof(addr)); printk("Pairing cancelled: %s\n", addr);
} static struct bt_conn_auth_cb auth_cb_display = {
.cancel = auth_cancel,
}; void main(void)
{
int err;
int gpio_delay = ;
int gpio_delay_pin = ;
struct device *gpio_dev; err = bt_enable(bt_ready);
if (err) {
printk("Bluetooth init failed (err %d)\n", err);
return;
} bt_conn_cb_register(&conn_callbacks);
bt_conn_auth_cb_register(&auth_cb_display); /*
* 添加个人测试代码,LED闪烁测试
*/ gpio_dev = device_get_binding(CONFIG_GPIO_NRF5_P0_DEV_NAME); (void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP));
(void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP));
(void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP));
(void) gpio_pin_configure(gpio_dev,
,
(GPIO_DIR_OUT | GPIO_PUD_PULL_UP)); /* Implement notification. At the moment there is no suitable way
* of starting delayed work so we do it here
*/
while () {
k_sleep(MSEC_PER_SEC); gpio_delay++;
gpio_delay = gpio_delay % ;
gpio_pin_write(gpio_dev, + (gpio_delay_pin % ), gpio_delay % );
if(gpio_delay == )
{
gpio_delay_pin++;
} /* Heartrate measurements simulation */
hrs_notify(); /* Battery level simulation */
bas_notify();
}
}

青风nrf52832跑zephyr——点亮LED的更多相关文章

  1. 第7章 使用寄存器点亮LED灯

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  2. 第7章 使用寄存器点亮LED灯—零死角玩转STM32-F429系列

    第7章     使用寄存器点亮LED灯 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com/fir ...

  3. Arduino 极速入门系列–1 点亮 LED

    本篇内容为,使用 Arduino 点亮 LED 的做法示范.很简单的一个入门示范.我们让 LED 闪. 本篇使用到的工具和材料 Arduino Mini Pro 1 PCS Mini USB 数据线 ...

  4. STM32学习笔记——点亮LED

    STM32学习笔记——点亮LED 本人学习STM32是直接通过操作stm32的寄存器,使用的开发板是野火ISO-V2版本: 先简单的介绍一下stm32的GPIO: stm32的GPIO有多种模式: 1 ...

  5. STM32F407第一步之点亮LED

    STM32F407第一步之点亮LED. 要点亮LED,首先了解一下F4的GPIO模块.首先看一下STM32F4数据手册,GPIO模块的内部结构图 看上去有点复杂,不要怕,慢慢理解就可以了.对外引脚那里 ...

  6. ARM学习篇一 点亮LED

    要点亮LED,先决条件是什么,当然得有相应的硬件设施.板子的整个电路图比较大,我就直接取相关部分. 给发光二级管加上3.3v电压后,通过1k电阻,直接与S3C2440连接.至于为什么要加电阻,大家应该 ...

  7. zigbee学习之路(二)点亮LED

    一.前言 今天,我来教大家如何点亮led,这也是学习开发板最基础的步骤了. 二.原理分析 cc2530芯片跟虽然是51的内核,但是它跟51单片机还是有区别的,51单片机不需要对IO口进行配置,而cc2 ...

  8. MSP430F5438点亮led

    今天只是想点亮一个led灯,因为没有视频,搞得很多的东西都是自己摸,下午本来讲和咨询店家,TMD说好给一点技术支持,结果一点也不给,我真想草泥马了,其实代码早就写出来了,只是哥哥不知道这款开发板还有接 ...

  9. JZ2440开发笔记(5)——通过按键点亮LED

    在JZ2440中,点亮LED就是给LED的控制位设置为输出,数据位设置为低电平,而通过按键点亮LED,就需要将按键对应的控制位设置为输出. 下面是JZ2440的3个LED电路图: 下面是JZ2440的 ...

随机推荐

  1. 【转】C++ 资源大全中文版

    转自:http://www.cnblogs.com/liuliu-NoGirl/p/5802765.html  感谢作者发布这么东西 我想很多程序员应该记得 GitHub 上有一个 Awesome – ...

  2. Nova Conductor 与 Versioned Object Model 机制

    目录 文章目录 目录 Nova Conductor 数据库访问代理机制 Versioned Object Model 机制 Nova Conductor Conductor 服务作为 Nova 核心部 ...

  3. spring 过滤器- 过滤登陆请求路径(过滤静态资源跳转到登陆页面)

    public class LoginedFilter implements Filter { /** * 排除的地址 */ private Map<String, Boolean> ign ...

  4. flask 学习(二)

    安装了flask扩展 以及flask-bootstrap 默认情况下,flask在template文件夹寻找模板. flask 加载的是Jinja2模板,该模板引擎在flask中由函数render_t ...

  5. linux常用命令(19)find xargs

    在使用 find命令的-exec选项处理匹配到的文件时, find命令将所有匹配到的文件一起传递给exec执行.但有些系统对能够传递给exec的命令长度有限制,这样在find命令运行几分钟之后,就会出 ...

  6. SAS数据挖掘实战篇【一】

    SAS数据挖掘实战篇[一] 1数据挖掘简介 1.1数据挖掘的产生 需求是一切技术之母,管理和计算机技术的发展,促使数据挖掘技术的诞生.随着世界信息技术的迅猛发展,信息量也呈几何指数增长,如何从巨量.复 ...

  7. VMWare虚拟机->锁定文件失败,打不开磁盘的解决办法

    VMWare虚拟机提示:锁定文件失败,打不开磁盘的解决办法   如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提示:“锁定文件失败,打不开磁盘...或它所依赖的某个快照 ...

  8. 基于Bootstrap 3可预览的HTML5文件上传插件

    前端常用资源地址: http://www.htmleaf.com/ http://www.htmleaf.com/html5/html5muban/201505091801.html 源代码地址 ht ...

  9. java:redis(java代码操作redis,实体类mapper生成器(generator))

    1.redis_demo Maven  ItemMapper.xml: <?xml version="1.0" encoding="UTF-8" ?> ...

  10. Postman接口测试:自动获取登录后的cookie并设置环境变量

    在对网站进行接口测试的时候,很多请求往往是需要带登录的cookie才能请求成功的,一般来说,可以用抓包软件(fiddler,浏览器的F12)来查看登录后的cookie,并把它设置到postman的环境 ...