настроил 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(опускалась в ноль только на момент передачи)