Хм. Пример проекта на ассемблере побольше. Добавились модули SPI и поверх него протокол работы с акселерометром LIS302DL. И краткий файл регистров периферии STM32F4xx (немного RCC, GPIO, SPI).
Светодиоды индицируют ускорения на отдельных осях, плюс один — нажатие кнопки.
читать дальше
Что можно сказать про акселерометр? Общается по SPI в данном проекте, хотя ещё умеет I2C.
Протокол прост.
Запись регистра: сначала посылается байт адреса регистра, потом его значение.
Чтение регистра: сначала посылается байт адреса регистра (с выставленным старшим битом), потом 0. Во буфере приёма смотрим, что пришло.
Регистров много. Но самых главных три:
1. Регистр идентификации LIS302DL_WHO_AM_I_ADDR (0x0F). При чтении должен выдавать 0x3B.
2. Регистр настройки 1 LIS302DL_CTRL_REG1_ADDR (0x20). Тут настройки функционирования акселерометра (включён, частота опроса, работающие оси).
3. Регистр настройки 2 LIS302DL_CTRL_REG2_ADDR (0x21). Тут настраивается фильтрация показаний акселерометра. Для убирания влияния притяжения земли.
Ну и, конечно, регистры измерений:
1. Ось Х LIS302DL_OUT_X_ADDR (0x29).
2. Ось Y LIS302DL_OUT_Y_ADDR (0x2B).
3. Ось Z LIS302DL_OUT_Z_ADDR (0x2D).
Посылается число в дополнительном коде, 1 байт. Знаковое, естественно. В программе берётся модуль этого числа (abs8).
Распиновка SPI:
SCK: A.5 50МГц альтернативная функция
MISO: A.6 50МГц альтернативная функция
MOSI: A.7 50МГц альтернативная функция
CS: E.3 50МГц цифровой выход
Настройка SPI обычная:
1. Включение тактирования модулей SPI и портов (А и Е).
2. Настройка альтернативных функций выводов 5-7 на порту А на функцию под номером 5. AF5 (SPI1).
3. Настройка выводов 5-7 порта А: 50 МГц, альтернативная функция.
4. Настройка вывода 3 порта E: 50 МГц, цифровой вывод.
5. Инициализация SPI: мастер, программный NSS, и т.д.
Потом напишу отдельно про SPI, уже на си.
Отправка байта тоже проста.
1. Ждём освобождения буфера (бит TXE в SPI->SR).
2. Записываем байт в SPI->DR.
3. Ждём приёма байта (бит RXNE в SPI->SR).
А при общении с акселерометром не забывать опускать линию CS (SpiSelect) перед чтением/записью, ну и поднимать её после (SpiDeselect).
Новое:
main.s
led.s
stm32f4xx.inc
spi.inc
spi.s
lis302dl.inc
accel.inc
accel.s
math.inc
math.s
<< Предыдущее Следующее >>
@темы:
arm,
программизмы,
электроника,
ассемблер,
stm32f4discovery,
stm32