Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: помогите разобраться с SPI на STM32
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
123kill12
настроил 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
может нужно включать SPI перед передачей и выключать после?
AHTOXA
Насколько я помню, нога NSS толком не работает. Там какая-то бага, короче, никак. Управляйте чипселектами вручную.
123kill12
https://my.st.com/public/STe2ecommunities/m...rrentviews=8018

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

так вот вопрос. есть ли решение? я точно не понял что там предложили с подтягивающем резистором. а так же там есть предложение по управлению программно. но у меня проблема в другом чтоб нет свободных выводов. как мне сделать так чтоб вывод NSS что тушится аппаратным SPI стал управлением через буффер ввода вывода порта?
вообще кто с этим сталкивался поделитесь своими креативными решениями. они должны быть. этой проблеме скоро 3 год.
AHTOXA
Цитата(123kill12 @ May 4 2011, 00:51) *
я прочитал эту тему. и так и не понял что нужно сделать чтоб NSS заработал как надо.

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

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

Ну NSS-то есть? Вот им и управляйте программно.
Взведите биты SPI_CR1_SSM и SPI_CR1_SSI в SPIx->CR1, и работайте с ногой NSS как с обычным GPIO.
123kill12
Нажмите для просмотра прикрепленного файла
у меня получилось что при частоте в 9 MHz CS опускается за 200нс и поднимается с опозданием в 250нс.
у кого лучше время получилось. то на передачу одного данного 1,5мкс тратить не прикольно. если надо читать 50кб данных
OlegH
Ну так взведите ее один раз и передавайте 50 кб... программу видимо нужно реструктурировать немного - вынести управление NSS из функции передачи байта
alinka-blondinka
знаю, что не в тему((..я тоже программирую stm32 и мне очень нужен zip к аn1823 (он за 2004 год, поэтому на st.com его уже нет) если у кого есть, скиньте пожалуйста, буду очень признательна!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.