Документация на программы для микроконтроллеров

Всегда пишите документацию на программы для микроконтроллеров. Добавьте в каталог проекта файл README.

Содержимое README:

  • тип микроконтроллера,
  • устройство в которое этот микроконтроллер встраивается,
  • среда проектирования (название, версия, настройки),
  • библиотеки (название, версия, ссылка на скачивание),
  • пути поиска подключаемых файлов,
  • список подключаемых файлов *.c,
  • тактовые частоты,
  • распределение ресурсов (например: светодиод: порт PB3, таймер TIM1),
  • изменения.
Реклама

STM32 Communication peripheral application library (CPAL)

CPAL — это библиотека предоставляющая высокоуровневый программный интерфейс к I2C микроконтроллеров STM32.

Существует две версии библиотеки: CPAL (CPAL v1) и CPAL v2.

CPAL v1 поддерживает следующие микроконтроллеры:

  • STM32F10x
  • STM32F2xx
  • STM32L1xx

CPAL v2 поддерживает следующие микроконтроллеры:

  • STM32F0xxxx
  • STM32F3xxxx

CPAL v2 входит в SPL (Standard Peripherals library) соответствующих микроконтроллеров.

CPAL v1 предоставляется отдельно.

Документация:

Подключение CPAL v1 к проекту

  1. Из библиотеки в свой проект скопировать два файла:
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/inc/cpal_conf_template.h
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/src/cpal_usercallback_template.c
  2. Переименовать скопированные файлы, убрав из имени «_template».
  3. Необходимо указать следующие пути поиска подключаемых фалов:
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/devices/stm32f10x
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/devices/stm32f2xx
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/devices/stm32l1xx
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/inc
    • путь к файлу cpal_conf.h
  4. Добавить следующие модули в сборку:
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/src/cpal_hal.c
    • STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/src/cpal_i2c.c
    • Из каталога STM32_I2C_CPAL_V1.1.0/Libraries/STM32_CPAL_Driver/devices:
      • /stm32f10x/cpal_i2c_hal_stm32f10x.c
      • /stm32f2xx/cpal_i2c_hal_stm32f2xx.c
      • /stm32l1xx/cpal_i2c_hal_stm32l1xx.c
    • cpal_usercallback.c
  5. Где нужно использовать библиотеку, подключить файл cpal_i2c.h:
    #include "cpal_i2c.h"

Продолжение следует…

Поддержка ввода двоичных чисел в Си

Людям, занимающимся низкоуровневым программированием, часто хочется непосредственно ввести двоичную константу, но Си такой возможности не предоставляет. Только некоторые компиляторы поддерживают соответствующее расширение языка. Но если пользоваться таким расширением, то код становится непереносимым.

Чтобы иметь возможность ввода двоичных чисел и сохранить переносимость, вам пригодится этот заголовочный файл: bit.h.

Файл содержит код следующего вида:

#ifndef BIT_H
#define BIT_H

#define b0000_0000 0
#define b0000_0001 1
#define b0000_0010 2
// ...
#define b1111_1110 254
#define b1111_1111 255

#define b0000_0000_1 0
// ...
#define b1111_1111_1 65280

#define b0000_0000_2 0
// ...
#define b1111_1111_2 16711680

#define b0000_0000_3 0
// ...
#define b1111_1111_3 4278190080

#endif

Просто подключаем bit.h:

#include "bit.h"

и вводим двоичные числа, используя префикс b и разделяя тетрады подчеркиванием. Например:

#define BIT_MASK b0001_0101 // 21
const int a = b0011_1110;
...

При задании многобайтового значения такое число задаст только первый байт.
Чтобы задавать многобайтовые значения, требуется в конце двоичного числа ставить суффикс:

  • _1 — для смещения числа на 1 байт влево, то есть задания второго байта,
  • _2 — для смещения числа на 2 байта влево, то есть задания третьего байта,
  • _3 — для смещения числа на 3 байта влево, то есть задания четвертого байта,

при этом между числами требуется производить операцию или (|).

Например:

// 0xFF00FF00
uint32_t mask = b1111_1111_3 | b0000_0000_2 | b1111_1111_1 | b0000_0000;
...

Можно задавать один какой-то байт или несколько байт идущих не по порядку, например:

uint32_t mask = b1111_1111_3 | b1111_1111_1; // 0xFF00FF00
...

ST-Link + MDK-ARM + Linux

Пользователям Linux, желающим программировать микроконтроллеры фирмы STM.

Будем использовать:

MDK-ARM прекрасно работает под wine. Чтобы не было проблем с кодировкой при комментировании в своей программе, надо в uVision в меню Edit выбрать пункт «Configuration…» и на вкладке «Editor» выбрать кодировку (Encoding) UTF-8: «Encode in UTF-8 without signature».

Чтобы разобраться с texane/stlink, скачаем его для начала:

  1. если не установлен git (кто не знает: система контроля версий, должна быть у каждого программиста), установим:
    sudo apt-get install git
    
  2. скачиваем texane/stlink с помощью git:
    git clone git://github.com/texane/stlink.git
    

Теперь собираем:

  1. Удовлетворяем зависимости:
    sudo apt-get install libusb-1.0 pkg-config libtool autoconf
    
  2. Собираем:
    cd stlink
    ./autogen.sh
    ./configure
    make
    

Не выходя из каталога stlink выполним пару команд:

sudo cp 49-stlinkv1.rules 49-stlinkv2.rules /etc/udev/rules.d
sudo udevadm control --reload-rules

чтобы у нас всегда был доступ к программатору ST-Link без прав суперпользователя.

Команда, чтобы прошить микроконтроллер:

~/stlink/st-flash write путь адрес

где:

  • путь — путь к двоичному файлу прошивки (*.bin),
  • адрес — шестнадцатеричный адрес в памяти (например, начало флеш-памяти в STM32: 0x08000000).

Утилита st-flash позволяет также считывать данные, если вместо write задать read и указать поcле адреса объем данных в байтах.

Получить двоичный файл можно средствами MDK-ARM. Чтобы при сборке проекта генерировался двоичный файл, добавляем в настройках проекта на вкладке User в секцию «Run User Programm After Build/Rebuild» строку:

FromElf.exe --bin --output путь_к_bin путь_к_axf

где:

  • путь_к_bin — путь к двоичному файлу, который будет генерироваться,
  • путь_к_axf — путь к стандартному файлу прошивки, который по умолчанию генерируется при сборке проекта.

На панели uVision имеется кнопка «Load» для загрузки прошивки в микроконтроллер. Настроим поведение этой кнопки. В настройках проекта на вкладке Utilities выбираем «Use external Tool for Flash programming» и в поле «Command» добавляем: load-firmware.sh. Ставим галочку «Run Independent», чтобы интерфейс не зависал. В папке проекта создаем файл load-firmware.sh и добавляем в него следующие строки:

#!/bin/bash
~/stlink/st-flash write путь адрес

подставив путь к двоичному файлу и адрес начала флеш-памяти программируемого микроконтроллера. Файл необходимо сделать исполняемым.

Способ зачистки шлейфа

Чтобы зачистить шлейф достаточно провести лезвием канцелярского ножа с обоих сторон шлейфа и снять изоляцию руками. Смотрим видео: