реклама на сайте
подробности

 
 
> SPI stm32f103 и stm32f100
GMVM
сообщение Aug 12 2011, 10:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 30
Регистрация: 4-07-10
Пользователь №: 58 276



Здравствуйте! Имеются 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 символу то все норм, т.е коннект правильный.

Go to the top of the page
 
+Quote Post

Сообщений в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 09:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01331 секунд с 7
ELECTRONIX ©2004-2016