Перейти к содержанию
    

STM32 SPI(NSS - Hardware NSS mode)

Привет, Всем.

 

Уже несколько часов не могу заставить аппаратно дергать пином PB12 (SPI2_NSS). У кого получилось, скажите че за там особенность или пожалуйста дайте примерчик кода инициализации. Спасибо!

 

Данные из SPI2 валят, синхронизацию тоже идет, а NSS на 0 и все.

Изменено пользователем Danis

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а NSS на 0 и все.

 

Может ты NSS не сделал PushPull? Если OK не подпереть резистором наверх, будешь мерять 0.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может ты NSS не сделал PushPull? Если OK не подпереть резистором наверх, будешь мерять 0.

 

Делал так

// Configure SPI2 pins: NSS

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

И так:

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

Все одно, не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Делал так

И так:

 

А сам SPI2 как инициализирован? Может в режим БЕЗ NSS?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А сам SPI2 как инициализирован? Может в режим БЕЗ NSS?

 

#define First_String_SPI SPI2

#define First_String_SPI_NSS_PIN GPIO_Pin_12

#define First_String_SPI_SCK_PIN GPIO_Pin_13

#define First_String_SPI_MISO_PIN GPIO_Pin_14

#define First_String_SPI_MOSI_PIN GPIO_Pin_15

 

 

void SPI2_init(void)

{

 

// Enable the , SPI2 Interrupt

NVIC_InitTypeDef NVIC_InitStructure;

 

NVIC_InitStructure.NVIC_IRQChannel = SPI2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 4;

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

 

GPIO_InitTypeDef GPIO_InitStructure;

 

RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB, ENABLE);

 

 

RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE);

 

// Configure First_String_SPI pins: SCK

GPIO_InitStructure.GPIO_Pin = First_String_SPI_SCK_PIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

// Configure First_String_SPI pins: MISO

GPIO_InitStructure.GPIO_Pin = First_String_SPI_MISO_PIN;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

// Configure First_String_SPI pins: MOSI

GPIO_InitStructure.GPIO_Pin = First_String_SPI_MOSI_PIN;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

// Configure First_String_SPI pins: NSS

GPIO_InitStructure.GPIO_Pin = First_String_SPI_NSS_PIN;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

//GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

GPIO_Init(GPIOB, &GPIO_InitStructure);

 

SPI_InitTypeDef SPI_InitStructure;

 

// SPI configuration

SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

SPI_InitStructure.SPI_DataSize = SPI_DataSize_16b;

 

// SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;

 

SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;

 

 

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;

SPI_InitStructure.SPI_NSS = SPI_NSS_Hard;

SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_16;

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStructure.SPI_CRCPolynomial = 7;

SPI_Init(First_String_SPI, &SPI_InitStructure);

 

/* Enable SPI_MASTER NSS output for master mode */

SPI_SSOutputCmd(First_String_SPI, ENABLE);

 

// Enable the I2S3 RxNE interrupt

SPI_I2S_ITConfig(First_String_SPI, SPI_I2S_IT_RXNE, ENABLE);

 

// Enable the SPI

SPI_Cmd(First_String_SPI, ENABLE);

}

//******************************************************************************

 

 

Если у Вас работает NSS аппаратно, пожалуста скиньте свой код.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если у Вас работает NSS аппаратно, пожалуста скиньте свой код.

Кода пока нет :rolleyes:.

Остается одно: выбился порт процессора, либо "сопля" на плате, и порт сидит аппаратно на "земле". Прозвоните тестером.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пользуетесь стандартными функциями? Они могут быть криво написаны криворукими индусами. В примерах от кейла и и библиотеках ST встречаются ошибки.

Докопайтесь до самих регистров, или после вызова вашего конфигуратора пропишите руками нужные регистры . Вам всего их штук 5 от силы понадобится.

Обратите внимание также на ремап.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пользуетесь стандартными функциями?

Все это так, пользуюсь и стандартными функциями и так регистры тоже заполнять могу, просто, скорее всего, это детская, глупая ошибка где то. Если честно мне и программно устанавливать этот пин можно, ниче не потеряю. Пока так и сделал. Ошибки в периферийной библиотеке есть и будут. И в папке с примерами SPI от STM32 есть пример по работе с NSS аппаратно, только нифига не работает. Я просто прошу, у кого есть кусок кода с аппаратной установкой NSS, скиньте плиз, не хочу потратить пару дней на такую туфту. После успешной настройки скину свои коды, они (проверенные на практике) бывают очень полезны. Примеры есть примеры, там и наврать можно, но то что мы пишем, за то ответим!

Они могут быть криво написаны криворукими индусами.

Люди разные бывают, зато они шахматы придумали :laughing:

 

Остается одно: выбился порт процессора, либо "сопля" на плате, и порт сидит аппаратно на "земле". Прозвоните тестером.

Скорее всего, нет. Программно все работает.

 

 

Вообще создать бы ветку отдельно по STM32 и выкладывать туда здравые куски кода, вот чудно бы было, вместе бы и победили…..

Изменено пользователем Danis

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если мне не изменяет память, то эта тема обсуждалась на форуме STM32 на сайте ST. Поищите там. Подробностей, к сожалению, не помню.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если мне не изменяет память, то эта тема обсуждалась на форуме STM32 на сайте ST. Поищите там. Подробностей, к сожалению, не помню.

 

Вот блин, а я ведь уже натыкался на этот форум:

https://my.st.com/public/STe2ecommunities/m...rrentviews=8018

 

теперь прочитал еще раз, внимательно. Ну и пускай не работает.... Хотя обидно однако, хотел SPI на DMA посадить и аппаратно данные слать :crying:

Изменено пользователем Danis

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...