Код
void SPI_init(void)
{
// Òàêòèðîâàíèå àëüòåðíàòèâíûõ ôóíêöèé GPIO.
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
//âêëþ÷åíèå òàêòèðîâàíèÿ SPI1
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
//íàñòðîéêà âûâîäîâ
//NSS -PA4 -out
GPIOB->CRL |=GPIO_CRL_MODE4;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
GPIOB->CRL &=~GPIO_CRL_CNF4;
GPIOB->CRL |=GPIO_CRL_CNF4_1;
//CLK -PA5 -out
GPIOB->CRL |=GPIO_CRL_MODE5;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
GPIOB->CRL &=~GPIO_CRL_CNF5;
GPIOB->CRL |=GPIO_CRL_CNF5_1;
//MISO -PA6 -in
GPIOB->CRL &=~GPIO_CRL_MODE6;
GPIOB->CRL &=~GPIO_CRL_CNF6;
GPIOB->CRL |=GPIO_CRL_CNF6_1;
//MOSI -PA7 -out
GPIOB->CRL |=GPIO_CRL_MODE7;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
GPIOB->CRL &=~GPIO_CRL_CNF7;
GPIOB->CRL |=GPIO_CRL_CNF7_1;
//íàñòðàèâàåì àëüòåíðíàòèâíûå ôóíêöèè ââîäîâ
AFIO->MAPR &=~AFIO_MAPR_SPI1_REMAP;
//buard detect
SPI1->CR1&=~SPI_CR1_BR_0;
SPI1->CR1&=~SPI_CR1_BR_1;
SPI1->CR1&=~SPI_CR1_BR_2;
//CHOL=1
SPI1->CR1|=SPI_CR1_CPOL;
//CPHA=1
SPI1->CR1|=SPI_CR1_CPHA;
//DFF
SPI1->CR1&=~SPI_CR1_DFF;
//íàïðàâëåíèå ñäâèãà
SPI1->CR1&=~SPI_CR1_LSBFIRST;
//óïðàâëåíèå íîãîé NSS
SPI1->CR1&=~SPI_CR1_SSM;
SPI1->CR2|=SPI_CR2_SSOE;
//âèä óñòðîéñòâà ìàñòåð
SPI1->CR1|=SPI_CR1_MSTR;
//ðàçðåøàåì ïðåðûâàíèÿ ïî ïðèåìó è ïåðåäà÷è
//SPI1->CR2|=SPI_CR2_TXEIE;
//SPI1->CR2|=SPI_CR2_RXNEIE;
//NVIC->ISER[1] |= ena_SPI1; // Ðàçðåøèòü ïðåðûâàíèå SPI1_IRQn â NVIC.
//çàïóñê SPI
SPI1->CR1|=SPI_CR1_SPE;
}
{
// Òàêòèðîâàíèå àëüòåðíàòèâíûõ ôóíêöèé GPIO.
RCC->APB2ENR |= RCC_APB2ENR_AFIOEN;
//âêëþ÷åíèå òàêòèðîâàíèÿ SPI1
RCC->APB2ENR |= RCC_APB2ENR_SPI1EN;
//íàñòðîéêà âûâîäîâ
//NSS -PA4 -out
GPIOB->CRL |=GPIO_CRL_MODE4;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
GPIOB->CRL &=~GPIO_CRL_CNF4;
GPIOB->CRL |=GPIO_CRL_CNF4_1;
//CLK -PA5 -out
GPIOB->CRL |=GPIO_CRL_MODE5;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
GPIOB->CRL &=~GPIO_CRL_CNF5;
GPIOB->CRL |=GPIO_CRL_CNF5_1;
//MISO -PA6 -in
GPIOB->CRL &=~GPIO_CRL_MODE6;
GPIOB->CRL &=~GPIO_CRL_CNF6;
GPIOB->CRL |=GPIO_CRL_CNF6_1;
//MOSI -PA7 -out
GPIOB->CRL |=GPIO_CRL_MODE7;//áûò ÿâëÿåòñÿ âûõîäíûì ñ ÷àñòîòîé ïåðåêëþ÷åíèÿ 50 MHz
GPIOB->CRL &=~GPIO_CRL_CNF7;
GPIOB->CRL |=GPIO_CRL_CNF7_1;
//íàñòðàèâàåì àëüòåíðíàòèâíûå ôóíêöèè ââîäîâ
AFIO->MAPR &=~AFIO_MAPR_SPI1_REMAP;
//buard detect
SPI1->CR1&=~SPI_CR1_BR_0;
SPI1->CR1&=~SPI_CR1_BR_1;
SPI1->CR1&=~SPI_CR1_BR_2;
//CHOL=1
SPI1->CR1|=SPI_CR1_CPOL;
//CPHA=1
SPI1->CR1|=SPI_CR1_CPHA;
//DFF
SPI1->CR1&=~SPI_CR1_DFF;
//íàïðàâëåíèå ñäâèãà
SPI1->CR1&=~SPI_CR1_LSBFIRST;
//óïðàâëåíèå íîãîé NSS
SPI1->CR1&=~SPI_CR1_SSM;
SPI1->CR2|=SPI_CR2_SSOE;
//âèä óñòðîéñòâà ìàñòåð
SPI1->CR1|=SPI_CR1_MSTR;
//ðàçðåøàåì ïðåðûâàíèÿ ïî ïðèåìó è ïåðåäà÷è
//SPI1->CR2|=SPI_CR2_TXEIE;
//SPI1->CR2|=SPI_CR2_RXNEIE;
//NVIC->ISER[1] |= ena_SPI1; // Ðàçðåøèòü ïðåðûâàíèå SPI1_IRQn â NVIC.
//çàïóñê SPI
SPI1->CR1|=SPI_CR1_SPE;
}
Код
void main(void)
{
//èíèöèëèçàöèÿ ÷àñòîòû ðàáîòû
SystemInit();
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
SPI_init();
SPI1->DR=0x45;
while(1)
{
tmp=SPI1->SR;
if((tmp&0x80) == SPI_SR_BSY)
{
tmp=SPI1->SR;
}
else
{
//++++++++++
tmp=SPI1->DR;
tmp=SPI1->SR;
//++++++++++
SPI1->DR=0x45;
tmp=SPI1->SR;
}
}
{
//èíèöèëèçàöèÿ ÷àñòîòû ðàáîòû
SystemInit();
RCC->APB2ENR |= RCC_APB2ENR_IOPAEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPBEN;
RCC->APB2ENR |= RCC_APB2ENR_IOPCEN;
SPI_init();
SPI1->DR=0x45;
while(1)
{
tmp=SPI1->SR;
if((tmp&0x80) == SPI_SR_BSY)
{
tmp=SPI1->SR;
}
else
{
//++++++++++
tmp=SPI1->DR;
tmp=SPI1->SR;
//++++++++++
SPI1->DR=0x45;
tmp=SPI1->SR;
}
}
статусный регистр меняется правильно. когда я передаю. в нем стоит 0х80. мониторю флаг BSY. если его нет то считываю статусный регистр. где уже 0x03. вижу что новые данные пришли. хотя я нечего и не принимаю. он так работает. если из регистра выталкивается то что то в него заталкивается. (странно то что при приеме получаю FE). снова смотрю статус там уже 0х02. записываю новые данные и в статусном снова 0х80.
но осцильником хочу посмотреть частоту и нечего(((( смотрел и другие пины. там тоже пусто.