Итак, снова SPI и снова акселерометр.
Про регистры акселерометра я уже говорил.
читать дальшеSPI инициализируется примерно так (на примере SPI1 для самого обычного режима):
1. Тактирование, в регистре RCC_APB2ENR устанавливаем флаг RCC_APB2ENR_SPI1EN;
2. Настройка выводов. Альтернативная функция 5 (см. даташит) на выводы PA5-PA7 (SCK/MISO/MOSI);
3. Настройка скорости (поле BR в регистре SPI_CR1), предделитель;
4. Программное управление выбором ведомого SS (нужно модулю дать знать, что он управляет линией): в регистре SPI_CR1 установить флаги SSI и SSM, физически мы будем использовать GPIO для выбора CS;
5. Скажем ему ещё раз, что он главный и что работать можно: в регистре SPI_CR1: флаги MSTR и SPE.
Отправка и приём данных таков:
1. В регистр SPI_DR записываем байт, который отправляем;
2. Ждём, пока он отправится (не появится флаг RXNE в регистре SPI_SR);
3. Читаем принятый байт из того же регистра данных SPI_DR.
Приём и отправка при использовании двух однонаправленных линий происходят одновременно. Но модуль умеет работать и с оной двунаправленной линией данных.
Собственно, работа с акселерометром посредством SPI:
Вот, настройка вся уже была, тут она такая же, как и в ассемблерном проекте, см. код.
В примере светодиоды пытаются показать, где у платы в данный момент верх. На ровной поверхности они не светятся, при повороте светятся те светодиоды, которые выше.
Файлы:
test2.c
spi.c
spi.h
accel.c
accel.h
lis302dl.h
Файлы эти между собой так сразу не стыкуются, тут spi упрощённый, полную версию см. в проекте.
Проект целиком.
<< Предыдущее Следующее >>
STM32F4. SPI
Итак, снова SPI и снова акселерометр.
Про регистры акселерометра я уже говорил.
читать дальше
<< Предыдущее Следующее >>
Про регистры акселерометра я уже говорил.
читать дальше
<< Предыдущее Следующее >>