CH32V307VCT6

void ws281x_init(void)

{
??? GPIO_InitTypeDef GPIO_InitStructure;
??? SPI_InitTypeDef? SPI_InitStructure;
??? DMA_InitTypeDef DMA_InitStructure;

??? RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC | RCC_APB2Periph_AFIO, ENABLE); //PORTA時(shí)鐘使能
??? RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI3, ENABLE); //SPI3時(shí)鐘使能
??? RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE);?? //使能DMA傳輸

??? GPIO_PinRemapConfig(GPIO_Remap_SPI3, ENABLE);

??? /* PC12? SPI3_MOSI */
??? GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
??? GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
??? GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
??? GPIO_Init(GPIOC, &GPIO_InitStructure);

??? SPI_InitStructure.SPI_Direction = SPI_Direction_1Line_Tx;? //設(shè)置SPI單向或者雙向的數(shù)據(jù)模式:SPI設(shè)置為雙線雙向全雙工
??? SPI_InitStructure.SPI_Mode = SPI_Mode_Master;??????????????? //設(shè)置SPI工作模式:設(shè)置為主SPI
??? SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;??????????????? //設(shè)置SPI的數(shù)據(jù)大小:SPI發(fā)送接收8位幀結(jié)構(gòu)
??? SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;??????????????? //串行同步時(shí)鐘的空閑狀態(tài)為低電平
??? SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;??????? //串行同步時(shí)鐘的第2個(gè)跳變沿(上升或下降)數(shù)據(jù)被采樣
??? SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;??????????????? //NSS信號(hào)由硬件(NSS管腳)還是軟件(使用SSI位)管理:內(nèi)部NSS信號(hào)有SSI位控制
??? SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;??????????????? //定義波特率預(yù)分頻的值:波特率預(yù)分頻值為16
??? SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;??????? //指定數(shù)據(jù)傳輸從MSB位還是LSB位開(kāi)始:數(shù)據(jù)傳輸從MSB位開(kāi)始
??? SPI_InitStructure.SPI_CRCPolynomial = 7;??????? //CRC值計(jì)算的多項(xiàng)式
??? SPI_Init(SPI3, &SPI_InitStructure);? //根據(jù)SPI_InitStruct中指定的參數(shù)初始化外設(shè)SPIx寄存器

??? SPI_Cmd(SPI3, ENABLE); //使能SPI外設(shè)
??? SPI_I2S_DMACmd(SPI3, SPI_I2S_DMAReq_Tx, ENABLE);

??? DMA_DeInit(DMA1_Channel5);?? //將DMA的通道5寄存器重設(shè)為缺省值
??? DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) &(SPI3 -> DATAR); //cpar;? //DMA外設(shè)ADC基地址
??? DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)pixelBuffer; //cmar;? //DMA內(nèi)存基地址
??? DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;? //數(shù)據(jù)傳輸方向,從內(nèi)存讀取發(fā)送到外設(shè)
??? DMA_InitStructure.DMA_BufferSize = PIXEL_NUM * 24; //cndtr;? //DMA通道的DMA緩存的大小
??? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;? //外設(shè)地址寄存器不變
??? DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;? //內(nèi)存地址寄存器遞增
??? DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;? //數(shù)據(jù)寬度為8位
??? DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Byte; //數(shù)據(jù)寬度為8位
??? DMA_InitStructure.DMA_Mode = DMA_Mode_Normal;? //工作在正常緩存模式
??? DMA_InitStructure.DMA_Priority = DMA_Priority_Medium; //DMA通道 x擁有中優(yōu)先級(jí)
??? DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;? //DMA通道x沒(méi)有設(shè)置為內(nèi)存到內(nèi)存?zhèn)鬏?br>??? DMA_Init(DMA1_Channel5, &DMA_InitStructure);? //根據(jù)DMA_InitStruct中指定的參數(shù)初始化DMA的通道USART1_Tx_DMA_Channel所標(biāo)識(shí)的寄存器

??? DMA_ClearFlag(DMA1_FLAG_TC5);

??? ws281x_closeAll();? //關(guān)閉全部的燈
??? Delay_Ms(100); //關(guān)閉全部的燈需要一定的時(shí)間
}



void ws281x_show(void)
{
??? static uint8_t sendflag = 0;
??? if (!sendflag)
??? {
??????? printf("send new\r\n");
??????? DMA_Cmd(DMA1_Channel5, DISABLE );
??????? DMA_ClearFlag(DMA1_FLAG_TC5);
??????? DMA_SetCurrDataCounter(DMA1_Channel5, 24 * PIXEL_NUM);
??????? DMA_Cmd(DMA1_Channel5, ENABLE);
??????? sendflag = 1;
??? }
??? else {
??????? if (DMA_GetFlagStatus(DMA1_FLAG_TC5) == RESET)
??????? {
??????????? sendflag = 0;
??????????? printf("send over\r\n");
??????? }
??? }

}



引腳PC12沒(méi)有數(shù)據(jù)輸出啊?這個(gè)是為什么?


熱門(mén)產(chǎn)品 : USB3.0 HUB控制器:CH634

您好,SPI3的輸出引腳對(duì)應(yīng)的DMA通道應(yīng)該是DMA2通道2,如下圖,你可以修改試一下。

image.png


只有登錄才能回復(fù),可以選擇微信賬號(hào)登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频