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

 
 
 
Reply to this topicStart new topic
> помогите разобраться с SPI на STM32
123kill12
сообщение May 3 2011, 08:37
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



настроил SPI так.
1) разрешил тактирование портов ввода вывода
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
2)настроил ремап
AFIO->MAPR &=~AFIO_MAPR_SPI1_REMAP;
3) разрешил тактирование алтернативных функций
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
4) разрешил тактирование SPI1
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
5) настроил выводы
//NSS -PA4 -out
GPIOA->CRL |=GPIO_CRL_MODE4;
GPIOA->CRL &=~GPIO_CRL_CNF4;
GPIOA->CRL |=GPIO_CRL_CNF4_1;
//CLK -PA5 -out
GPIOA->CRL |=GPIO_CRL_MODE5;
GPIOA->CRL &=~GPIO_CRL_CNF5;
GPIOA->CRL |=GPIO_CRL_CNF5_1;
//MISO -PA6 -in
GPIOA->CRL &=~GPIO_CRL_MODE6;
GPIOA->CRL &=~GPIO_CRL_CNF6;
GPIOA->CRL |=GPIO_CRL_CNF6_1;
//MOSI -PA7 -out
GPIOA->CRL |=GPIO_CRL_MODE7;
GPIOA->CRL &=~GPIO_CRL_CNF7;
GPIOA->CRL |=GPIO_CRL_CNF7_1;
6)устанавливаю частоту
SPI1->CR1&=~SPI_CR1_BR_0;
SPI1->CR1|=SPI_CR1_BR_1;
SPI1->CR1&=~SPI_CR1_BR_2;
7) тип работы
//CHOL=0
SPI1->CR1&=~SPI_CR1_CPOL;
//CPHA=0
SPI1->CR1&=~SPI_CR1_CPHA;
8) размер слова для передачи
SPI1->CR1&=~SPI_CR1_DFF;
9) направление сдвига
SPI1->CR1&=~SPI_CR1_LSBFIRST;
10) настроиваю ножку NSS
SPI1->CR1&=~SPI_CR1_SSM;
SPI1->CR2|=SPI_CR2_SSOE;
11) перевожу устройство в мастер
SPI1->CR1|=SPI_CR1_MSTR;
12)запускаю SPI
SPI1->CR1|=SPI_CR1_SPE;


передаю простое данное. все работает хорошо как видно на картинке
Прикрепленное изображение

но нога NSS ведет себя не так как хочу. (постоянно в нуле)

в мануале написано:
NSS output is enabled: when the STM32F10xxx are operating as a Master and
the NSS output is enabled through the SSOE bit in the SPI_CR2 register, the NSS
pin is driven low and all the NSS pins of devices connected to the Master NSS pin
see a low level and become slaves when they are configured in NSS hardware
mode. When an SPI wants to broadcast a message, it has to pull NSS low to
inform all others that there is now a master for the bus. If it fails to pull NSS low,
this means that there is another master communicating, and a Hard Fault error
occurs.

все понятно. если она в низком состоянии то данные передаются. но как сделать так чтоб она поднималась и опускалась?
ну вела себя как Chip Select(опускалась в ноль только на момент передачи)

Сообщение отредактировал 123kill12 - May 3 2011, 08:38
Go to the top of the page
 
+Quote Post
123kill12
сообщение May 3 2011, 18:17
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



может нужно включать SPI перед передачей и выключать после?
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 3 2011, 18:28
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Насколько я помню, нога NSS толком не работает. Там какая-то бага, короче, никак. Управляйте чипселектами вручную.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
123kill12
сообщение May 3 2011, 18:51
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



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

я прочитал эту тему. и так и не понял что нужно сделать чтоб NSS заработал как надо.
по ходу темы можно было понять что поддержка ST просто отшучивается стандартными фразами а нечего не делает.
люди там ругаются на мануал. но тема умерла в ноябре 2009. у меня мануал от апреля 2010. и там все рано ляпы.
тема на этом форуме умерла даже раньше.

так вот вопрос. есть ли решение? я точно не понял что там предложили с подтягивающем резистором. а так же там есть предложение по управлению программно. но у меня проблема в другом чтоб нет свободных выводов. как мне сделать так чтоб вывод NSS что тушится аппаратным SPI стал управлением через буффер ввода вывода порта?
вообще кто с этим сталкивался поделитесь своими креативными решениями. они должны быть. этой проблеме скоро 3 год.
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение May 4 2011, 06:13
Сообщение #5


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(123kill12 @ May 4 2011, 00:51) *
я прочитал эту тему. и так и не понял что нужно сделать чтоб NSS заработал как надо.

По-моему, очевидно - никак.

Цитата(123kill12 @ May 4 2011, 00:51) *
но у меня проблема в другом чтоб нет свободных выводов.

Ну NSS-то есть? Вот им и управляйте программно.
Взведите биты SPI_CR1_SSM и SPI_CR1_SSI в SPIx->CR1, и работайте с ногой NSS как с обычным GPIO.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
123kill12
сообщение May 4 2011, 07:17
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 96
Регистрация: 12-05-10
Пользователь №: 57 217



Прикрепленное изображение

у меня получилось что при частоте в 9 MHz CS опускается за 200нс и поднимается с опозданием в 250нс.
у кого лучше время получилось. то на передачу одного данного 1,5мкс тратить не прикольно. если надо читать 50кб данных
Go to the top of the page
 
+Quote Post
OlegH
сообщение May 6 2011, 02:49
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 186
Регистрация: 14-01-06
Из: Украина, г.Харьков
Пользователь №: 13 168



Ну так взведите ее один раз и передавайте 50 кб... программу видимо нужно реструктурировать немного - вынести управление NSS из функции передачи байта
Go to the top of the page
 
+Quote Post
alinka-blondinka
сообщение Jun 16 2011, 06:24
Сообщение #8





Группа: Новичок
Сообщений: 5
Регистрация: 16-06-11
Пользователь №: 65 723



знаю, что не в тему((..я тоже программирую stm32 и мне очень нужен zip к аn1823 (он за 2004 год, поэтому на st.com его уже нет) если у кого есть, скиньте пожалуйста, буду очень признательна!!
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:30
Рейтинг@Mail.ru


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