NRF51. Cоздание простого проекта

Общие сведения

В последнее время, становится всё популярнее стандарт передачи данных Bluetooth Low Energy (BLE). BLE по сути несколько упрощенный протокол Bluetooth. Основное назначение BLE это обмен небольшим объемом данных с различными низкопотрбляющими устройствами (датчики, фитнес браслеты, велокомпьютеры и т.д.).

У многих производителей уже есть микроконтроллеры с интегрированной радиочастотной частью. Подобные чипы есть у ведущих производителей: Silabs, Texas Instuments, Cypress и т.д. Но как следует из названия статьи речь пойдет о МК фирмы Nordic. Мой выбор МК этой фирмы объясняется довольно просто — это доступность отладочного набора и самого чипа. Стоит сказать, что доступность довольно относительная, чипы и отладочные платы богато представлены на aliexpress, а в наших магазинах только под заказ. Для меня это не является недостатком, тем более стоимость чипов и плат , значительно ниже конкурентов. Поэтому NRF51 отлично подойдет для каких-то домашних поделок с использованием стека BLE.

Модуль NRF51822 и плата расширения BLE400

Описание железа.

На аликспресс продаются модули на основе чипа NRF51822, к ним для удобства работы можно купить плату расширения BLE400. Так же очень полезным приобретением будет сниффер BLE  — PCA10031. PCA10031 — официальное название платы сниффера от Nordic, на али можно найти его дешевую копию. Сниффер позволяет просматривать BLE пакеты с помощью популярной программы Wireshark. Более подробно я опишу работу с данным устройством в другой статье.

Блок схема NRF51

NRF51822 представляет из себя микроконтроллер с ядром Cortex-M0 с объемом ПЗУ 256Кb, а объем ОЗУ составляет 32Кб. Имеет на борту стандартную периферию GPIO, таймеры,  UART и т.д. Самое интересное это конечно блок RF, также стоит отметить встроенный понижающий DC-DC преобразователь. Возможно, в некоторых случаях он поможет сэкономить на внешнем  преобразователе и сделать плату максимально компактной.

Большой плюс данного МК в том, что есть открытое описание RF части, поэтому теоретически можно использовать свой протокол передачи данных. Пример создания со стеком BLE проекта я опишу в отдельной статье.

Чип программируется по SWD протоколу. В качестве программатор я использую дешевый  китайский программатор J-link OB.

Создание простейшего проекта.

Перейдем к созданию проекта в среде Keil uVision 5 с использованием Software Packs. В данном примере я покажу, как использовать NRF51822 в качестве обычного микроконтролера т.е. не используя RF часть. Дело в том, что с использованием стека BLE есть тонкости. Как сделать проект с поддержкой RF я расскажу в отдельной статье. А в данном примере я покажу, как скачать софт пакеты для поддержки чипа микровиженом и создания проекта моргалки светодиодами. И так приступим к делу.

Первое, что мы должны сделать, это скачать софт пакеты с поддержкой нашего чипа.  Я не стал экономить и скачал все пакеты относящийся к семейству NRF51. Суть софт пакетов в том, что с их помощью можно автоматом подцепить различный исходные или бинарные файлы. Например, драйвера периферийных устройств, стек LWIP, библиотеку для работы со стеком BLE и т.д. Пакеты поддерживаются производителем и периодически обновляются. Также подгружаются и примеры (вкладка Examples).

 

Вызов Pack Installer

Установленный пакеты

Теперь стандартным способом создадим новый проект. Я назвал свой BLE400_blinky, чип выбираем NRF51822_xxAC. Теперь перед нами появится окно с нашими софт пакетами. Давайте сейчас добавим только самые необходимые пакеты, чтобы потом посмотреть, как можно добавлять и удалять пакеты из уже созданного проекта.

Выберем:

  • CMSIS -> CORE
  • Device -> Startup
  • Device -> StartupConfig

Теперь создадим файл main.c со следующем кодом.

#include <stdbool.h>
#include <stdint.h>
#include "nrf_delay.h"//функции задержки
#include "nrf_gpio.h"//драйвер gpio

#define LED0 (18)//в скобках номер пина
#define LED1 (19)//пины подключены к светодиодам
#define LED2 (20)//на плате BE400
#define LED3 (21)
#define LED4 (22)
 
 int main(void)
{
  //Выводы на выход
  nrf_gpio_cfg_output(LED0);
  nrf_gpio_cfg_output(LED1);
  nrf_gpio_cfg_output(LED2);
  nrf_gpio_cfg_output(LED3);
  nrf_gpio_cfg_output(LED4);
  
  while(true)
  {
    nrf_gpio_pin_clear(LED0);
    nrf_gpio_pin_set(LED1);
    nrf_gpio_pin_clear(LED2);
    nrf_gpio_pin_set(LED3);
    nrf_gpio_pin_clear(LED4);
    
    nrf_delay_ms(500);
   
    nrf_gpio_pin_set(LED0);
    nrf_gpio_pin_clear(LED1);
    nrf_gpio_pin_set(LED2);
    nrf_gpio_pin_clear(LED3);
    nrf_gpio_pin_set(LED4);
    
    nrf_delay_ms(500);
  }
}

При попытке сборки проекта закономерно получим ошибку:

main.c(3): error: #5: cannot open source input file «nrf_delay.h»: No such file or directory

Давайте добавим соответствующий пакет к проекту. Manage Run-Time Environment -> nRF_Drivers -> nrf_delay, в этом же разделе добавим nrf_gpio. Новая попытка сборки должна окончится успешно. Прошиваем и наслаждаемся красочным переключениям светодиодов. Думаю описание кода не требуется, по названиям функций легко понять из каких софт пакетов они взяты.

Проект на GitHub

Wiki BLE400

BLE400 схема

NRF51-Reference manual