使用STM32F4的SPI1和SPI2分别驱动21个级联的WS2812B小灯。
SPI初始化:
已知主频为168Mhz,APB2的频率为84Mhz,84/32=2.6Mhz,一个时钟周期为384ns,两个时钟周期为768ns,符合芯片的传输时间范围。
(这里有一个坑,就是SPI1和SPI2的时钟分别来源于APB2和APB1,需要注意两个时钟的频率,两个SPI的配置不能完全相同)
//SPI口初始化
//这里针是对SPI1的初始化
void SPI1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
SPI_InitTypeDef SPI_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE); //使能GPIOB时钟
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); //使能SPI1时钟
//GPIOFB3,4,5初始化设置
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5; //PB3,4,5复用功能输出,3-SCK脚 4-MISO脚 5-MOSI脚
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;