Делаю адаптер SPI-CAN на основе stm32f103c8t6 для RPi 3 и столкнулся с рядом проблем и вопросов.
1) Программа на RPi. Для работы с SPI использую библиотеку bcm2835-spi. Вся программа зависает при попытке отправки сообщения:
#include <QCoreApplication>
#include </home/pi/CAN_Process/src/bcm2835.h>
#include <sys/types.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <string.h>
#include <stdio.h>
int main(void)
{
//SPI INIT
if (!bcm2835_init())
{
printf("bcm2835_init failed. Are you running as root??\n");
return 1;
}
bcm2835_spi_begin();
bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST); // The default
bcm2835_spi_setDataMode(BCM2835_SPI_MODE0); // The default
bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_64); // 64 прескаллер
bcm2835_spi_chipSelect(BCM2835_SPI_CS0); // The default
bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW); // the default
uint8_t spi_write[11];
uint8_t spi_read[11];
//infinite
while(1){
for(uint8_t i=0;i<11;i++)spi_write=i;//Просто заполнение массива
bcm2835-spi-transfern(spi_write,11);//Строчка на которой всё зависает
}
bcm2835_spi_end();
bcm2835_close();
return 1;
}
Если у кого то есть готовый рецепт SPI для библиотеки WiringPI, то готов с радостью на неё перейти.
2) Настройка SPI. Так как частота процессора RPi 3 400 МГц и для тактирования SPI можно выбрать прескаллеры только кратные двум, а частота кварца Stm32 8 МГц и частоту SPI тоже нельзя выбрать любую, то нельзя выбрать одинаковые частоты. Я выбрал частоту SPI на RPi 6.250MHz. А на stm32 максимальную (18 Мбит/с), понадеявшись, что он всё равно будет синхронизироваться по шине CLK. Правильно это или нет?
3) Программа на stm32. Работаю через CubeMX и библиотеку HAL. При инициализации SPI, не инициализируется ножка для выбора Slave. Я понимаю, что у нас stm32 работает в качестве ведомого, но как тогда правильно реализовать работу шины CE со стороны stm32? У меня на эту шину SPI всего один ведомый, значит ли это, что выбор slave со стороны stm32 можно никак не обрабатывать? Большущее спасибо.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Согласно спецификации функция LoadString принимает среди параметров уникальный целочисленный идентификатор строкиЧто это такое? Каким значением...
Visual Studio ни в какую не хочет работать с функцией rand()Пишу на C++