stm32l152 SPI master mode

Кто любит RISC в жизни, заходим, не стесняемся.
Ответить
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Сообщение jazz393 »

Всем добрый день. настроил на работу в мастере L152RB , на осциле всё вижу, всё передаётся, но смущает 1 вещь - сигнал SS висит в 0 постоянно, точнее он висит в 1 до первой посылки, после чего падает в 0,и байты всёравно отправляются, но SS аппаратно в 1 не возвращается. Подтягивающий резистор 1К на SS от 3.3В есть, настроен он на аппаратную работу. Хочется понять - почему аппаратно он не возвращается в 1, так что программный вариант не предлагать)

Код: Выделить всё

// PB12 - SS
// PB13 - SCK
// PB14 - MISO
// PB15 - MOSI
void init_spi()
	{
	// тактирование SPI2
	RCC->APB1ENR|=RCC_APB1ENR_SPI2EN;
	// режим работы порта - alternative function
	GPIOB->MODER|=GPIO_MODER_MODER12_1 | GPIO_MODER_MODER13_1 | GPIO_MODER_MODER14_1 | GPIO_MODER_MODER15_1;
	// выбираем саму альтернативную функцию AF5
	GPIOB->AFR[1]|=(5<<16)|(5<<20)|(5<<24)|(5<<28);
	// скорость
	GPIOB->OSPEEDR|=GPIO_OSPEEDER_OSPEEDR12_0 | GPIO_OSPEEDER_OSPEEDR13_0 | GPIO_OSPEEDER_OSPEEDR14_0 | GPIO_OSPEEDER_OSPEEDR15_0 |GPIO_OSPEEDER_OSPEEDR12_1 | GPIO_OSPEEDER_OSPEEDR13_1 | GPIO_OSPEEDER_OSPEEDR14_1 | GPIO_OSPEEDER_OSPEEDR15_1;
	SPI2->CR1|=(1<<4) | SPI_CR1_MSTR;
	// SPI2->CR1|=SPI_CR1_CPOL;
    SPI2->CR2|=SPI_CR2_SSOE;
	// включаем SPI
    SPI2->CR1|=SPI_CR1_SPE;
	}

void send_spi2(u8 *data)
	{
	u8 flag=1,i=0;
	while(flag)
		{
		SPI2->DR=data[i];
		while( !(SPI2->SR & SPI_SR_RXNE))
			{}
    	if(data[i]==0x03)
    		flag=0;
    	i++;
      	}
    }
Реклама
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Сообщение HHIMERA »

Нет в этом камне хардварного управления SS...
Такая фича есть в F0...

Код: Выделить всё

Bit 3 NSSP: NSS pulse management
This bit is used in master mode only. it allow the SPI to generate an NSS pulse between two
consecutive data when doing continuous transfers. In the case of a single data transfer, it
forces the NSS pin high level after the transfer.
It has no meaning if CPHA = ’1’, or FRF = ’1’.
0: No NSS pulse
1: NSS pulse generated
"Я не даю готовых решений, я заставляю думать!"(С)
Реклама
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Сообщение jazz393 »

Configuring the SPI in master mode
------
5. If the NSS pin is required in input mode, in hardware mode, connect the NSS pin to a
high-level signal during the complete byte transmit sequence. In NSS software mode,
set the SSM and SSI bits in the SPI_CR1

это из Reference manual STM32L151xx and STM32L152xx advanced ARM-based 32-bit MCUs.
А то что привели вы мне не знакомо, я там этого не встречал.
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

jazz393, у твоих периферия старая, нет хардварной NSS ногодрыгалки , да и не нужна она...
Реклама
Эиком - электронные компоненты и радиодетали
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Сообщение jazz393 »

dosikus писал(а):jazz393, у твоих периферия старая, нет хардварной NSS ногодрыгалки , да и не нужна она...
старая?o_0=((
ну то что можно и без неё обойтись да...просто по максимуму же хочется аппаратные фишки юзать...=(
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3604
Зарегистрирован: Пн июл 28, 2008 22:12:01

Сообщение dosikus »

jazz393 писал(а): старая?o_0=((
У F4, F3 и F0 новая ...
Реклама
Встал на лапы
Сообщения: 118
Зарегистрирован: Ср фев 05, 2014 18:54:39

Сообщение jazz393 »

спасибо, жаль....странно, почему тогда про него в документации написано....вообщем хрен с ним...
Ответить

Вернуться в «ARM»