Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: SPI stm32f103 и stm32f100
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
GMVM
Здравствуйте! Имеются 2 мк stn32f103rb и f100c8. f103 - мастер. Необходимо передавать массив с данными в f100с8. Как я понял аппаратного nss нет, поэтому реализую таким образом

Инициализация мастера
Код
void SPI_config(void)
{
SPI2->CR1 |= SPI_CR1_BR_0|SPI_CR1_BR_1|SPI_CR1_BR_2;
SPI2->CR1 |= SPI_CR1_SSI;
SPI2->CR1 |= SPI_CR1_SSM;    
SPI2->CR1 |= SPI_CR1_SPE|SPI_CR1_MSTR;    
}

Инициализация slave
Код
void SPI_config(void)
{
SPI1->CR1 |= SPI_CR1_SSM;
SPI1->CR2 |= SPI_CR2_RXNEIE;
SPI1->CR1 |= SPI_CR1_SPE;    
}

Функция передачи массива
Код
void SPI_send(unsigned char *s)
{
while((*s)!=0xFF)
{
    while(!((SPI2->SR)&SPI_SR_TXE));
    NSS=0;
    SPI2->DR=*s;
    s++;  
}
SPI2->DR=0xFF;
while(!((SPI2->SR)&SPI_SR_TXE));
NSS=1;
}


Функция приема массива
Код
void SPI1_IRQHandler(void)
{
temp=SPI1->DR;
if(temp!=0xFF)
{
  RX_buffer[rx_counter]=temp;
  rx_counter++;
}
else
{
  rx_counter=0;
  gotoxy(0,0);
  putstr((unsigned char*)RX_buffer);
}
}

Собственно 0xFF означает конец посылки буфера.

На выходе в регистре все правильно, но Slave принимает совсем другие числа. Совсем запутался в настройке NSS, скиньте пожалуйста рабочий код настройки SPI(только не с библиотек ST). Может устанавливать NSS в 1 после посылки каждого байта?

З.Ы. Если отправлять по 1 символу то все норм, т.е коннект правильный.

GMVM
Вроде заработало. Снизил скорость и добавил задержку. Судя по всему проблема была в приемнике(не успевал считывать байты). Но почему приходили другие числа не понятно, ведь данные со сдвигового регистра копируются в буфер по окончании приема байта. Тогда были бы просто пропуски байтов, а не прием ошибочных данных.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.