摘部分相关代码:
int mian()
{
RCC->AHBENR|=RCC_AHBENR_GPIOAEN|RCC_AHBENR_GPIOBEN;
RCC->APB1ENR|=RCC_APB1ENR_SPI2EN|RCC_APB1ENR_TIM2EN|RCC_APB1ENR_DACEN;//enabe SPI2 and TIME2 clock and DAC 0x01;//|(1<<18));
GPIOB->MODER|=0xaa000000; //Pb12 13,14,15 SPI2 comm
GPIOB->MODER|=0x00000a80; //PB3,Pb4,Pb5 Af
while(1)
{
Spi2Send(0xa5);
DelayMs(10);
}
}
void Spi2Init(void)
{
SPI2->CR2&=0x70ff;//SPI_DataSize_8b;
SPI2->CR2|=SPI_DataSize_8b;
SPI2->CR2|=1<<2;
SPI2->CR1&=0xffc7;
SPI2->CR1|=SPI_BaudRatePrescaler_256|SPI_FirstBit_MSB|SPI_NSS_Hard;//7<<3; //Spi Clock =fosc/256
SPI2->CR1|=(SPI_CPOL_High|SPI_CR1_MSTR|SPI_CPHA_2Edge); //Spi Clock =fosc/256
SPI2->CR2|=1<<3;
SPI2->CR1|=1<<9;
SPI2->CR2&=~(1<<12);
SPI2->CR1|=1<<13;
SPI2->CRCPR=0x07;
SPI2->CR1|=SPI_CR1_SPE;
}
void Spi2Send(unsigned char TxData)
{unsigned char retry=0;
while(SPI2->SR&(1<<1)==0)
{
retry++;
if (retry>=200)
{
retry=0;
return;
}
}
SPI2->DR=TxData;
}
波形就是16 CLOCK,数据对应高字节。这样一来看起来就变成了0Xa500
|