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