Вт май 19, 2020 16:13:17
void SPI_INIT (void)
{
RCC->AHB1ENR |= (1<<RCC_AHB1ENR_GPIOAEN_Pos);
RCC->AHB1ENR |= (1<<RCC_AHB1ENR_GPIOBEN_Pos);
RCC->APB2ENR |= (1<<RCC_APB2ENR_SPI1EN_Pos);
GPIOA->MODER |= (0x01<<GPIO_MODER_MODER15_Pos);
GPIOA->OSPEEDR|= (0x03<<GPIO_OSPEEDR_OSPEED15_Pos);
GPIOB->MODER |= (0x02<<GPIO_MODER_MODER3_Pos)
| (0x02<<GPIO_MODER_MODER4_Pos)
| (0x02<<GPIO_MODER_MODER5_Pos);
GPIOB->OSPEEDR|= (0x03<<GPIO_OSPEEDR_OSPEED3_Pos)
| (0x03<<GPIO_OSPEEDR_OSPEED5_Pos);
GPIOB->AFR[0] |= (0x05<<GPIO_AFRL_AFSEL3_Pos)
| (0x05<<GPIO_AFRL_AFSEL4_Pos)
| (0x05<<GPIO_AFRL_AFSEL5_Pos);
SPI1->CR1 |= (0x05<<SPI_CR1_BR_Pos)
| (1<<SPI_CR1_MSTR_Pos);
SPI1->CR1 |= (1<<SPI_CR1_SPE_Pos);
}
void SPI_WR(int data)
{
while (1)
{
if (SPI1->SR & SPI_SR_TXE)
break;
}
SPI1->DR = data;
delay_us(10000);
while (1)
{
if (SPI1->SR & SPI_SR_TXE)
break;
}
}