新手上路
- 积分
- 44
- 金钱
- 44
- 注册时间
- 2023-10-24
- 在线时间
- 6 小时
|
void RGB_Init(void)
{
RGB_GPIO_Init();
RGB_Driver_Init();
}
static void RGB_GPIO_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_AHB1PeriphClockCmd(Colorful_RCC, ENABLE);
GPIO_InitStructure.GPIO_Pin = Colorful_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
GPIO_InitStructure.GPIO_OType =GPIO_OType_PP;
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(Colorful_PORT, &GPIO_InitStructure);
GPIO_PinAFConfig(Colorful_PORT, GPIO_PinSource5, GPIO_AF_SPI3 );
GPIO_ResetBits(Colorful_PORT, Colorful_PIN);
}
static void RGB_Driver_Init(void)
{
#if RGB_DRV_SPI
RGB_Spi_Init();
#else
RGB_Timer_Pwm_Init();
#endif
RGB_DMA_Init();
}
static void RGB_Spi_Init(void)
{
SPI_InitTypeDef SPIInitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE);
SPIInitStructure.SPI_Direction = SPI_Direction_1Line_Tx;
SPIInitStructure.SPI_Mode = SPI_Mode_Master;
SPIInitStructure.SPI_DataSize = SPI_DataSize_8b;
SPIInitStructure.SPI_CPOL = SPI_CPOL_Low;
SPIInitStructure.SPI_CPHA = SPI_CPHA_2Edge;
SPIInitStructure.SPI_NSS = SPI_NSS_Soft;
SPIInitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_8;
SPIInitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
SPIInitStructure.SPI_CRCPolynomial = 7;
SPI_Init(SPI3, &SPIInitStructure);
SPI_Cmd(SPI3, ENABLE);
SPI_CalculateCRC(SPI3, DISABLE);
SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Tx, ENABLE);
}
static void RGB_DMA_Init(void)
{
DMA_InitTypeDef DMA_InitStructure;
RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_DMA1,ENABLE);
DMA_DeInit(DMA1_Stream5);
DMA_InitStructure.DMA_Channel=DMA_Channel_0;
DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)(&SPI3->DR); // 外设地址: SPIx DR
DMA_InitStructure.DMA_Memory0BaseAddr = (uint32_t)RGB_Byte_Buffer; // 待发送数据的地址
DMA_InitStructure.DMA_DIR = DMA_DIR_MemoryToPeripheral; // 传送方向,从内存到寄存器
DMA_InitStructure.DMA_BufferSize = 0; // 发送的数据长度,初始化可设置为0,发送时修改
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; // 外设地址不增加
DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; // 内存地址自动增加1
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte; // 外设数据宽度
DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; // 内存数据宽度
DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; // 发送模式,只发一次
DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; // DMA传送优先级为高
DMA_Init(DMA1_Stream5, &DMA_InitStructure);
DMA_Cmd(DMA1_Stream5, DISABLE);
} |
|