问答

汇集网友智慧,解决技术难题

21ic问答首页 - TAG - DMA
  • MM32SPIN系列使用dma spi clk始终8位之间有一个时间间隔 sos

    我使用MM32SPIN27PF 使用dma与硬件spi进行开发 初始化代码如下: RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); //SPI2 clk enable RCC_APB2PeriphClockCmd(RCC_APB2Periph_SPI1, ENABLE); //SPI_NSS GPIO_PinAFConfig(GPIOA, GPIO_PinSource4, GPIO_AF_0); //SPI_SCK GPIO_PinAFConfig(GPIOA, GPIO_PinSource5, GPIO_AF_0); //SPI_MISO GPIO_PinAFConfig(GPIOA, GPIO_PinSource6, GPIO_AF_0); //SPI_MOSI GPIO_PinAFConfig(GPIOA, GPIO_PinSource7, GPIO_AF_0); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_7; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, &GPIO_InitStructure); SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_DataWidth = SPI_DataWidth_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low; SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; // SPI_InitStructure.SPI_NSS = SPI_NSS_Hard; SPI_InitStructure.SPI_BaudRatePrescaler = spi_baud_div; SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_LSB; SPI_Init(SPIx, &SPI_InitStructure); SPI_Cmd(SPIx, ENABLE); SPIM_TXEn(SPIx); SPIM_RXEn(SPIx); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); //ʹÄÜDMA´«Êä //spi1 rx channel 2 DMA_DeInit(DMA1_Channel2); //½«DMAµÄͨµÀ2¼Ä´æÆ÷ÖØÉèΪȱʡֵ DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) & (SPI1->RXREG); //DMAÍâÉèADC»ùµØÖ· DMA_InitStructure.DMA_MemoryBaseAddr = rx; //DMAÄÚ´æ»ùµØÖ· DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC ; //Êý¾Ý´«Êä·½Ïò£¬´ÓÄÚ´æ¶ÁÈ¡·¢Ë͵½ÍâÉè DMA_InitStructure.DMA_BufferSize = rxbuffSize; //DMAͨµÀµÄDMA»º´æµÄ´óС DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; //ÍâÉèµØÖ·¼Ä´æÆ÷²»±ä DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; //ÄÚ´æµØÖ·¼Ä´æÆ÷µÝÔö DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; //Êý¾Ý¿í¶ÈΪ8λDMA_PeripheralDataSize_Byte DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; //Êý¾Ý¿í¶ÈΪ8λDMA_MemoryDataSize_Byte DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; //¹¤×÷ÔÚÕý³£»º´æģʽ DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; //DMAͨµÀ xÓµÓÐÖÐÓÅÏȼ¶ DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; //DMAͨµÀxûÓÐÉèÖÃΪÄÚ´æµ½ÄÚ´æ´«Êä DMA_Init(DMA1_Channel2, &DMA_InitStructure); //¸ù¾ÝDMA_InitStructÖÐÖ¸¶¨µÄ²ÎÊý³õʼ»¯DMAµÄͨµÀUSART1_Tx_DMA_ChannelËù±êʶµÄ¼Ä´æÆ÷ //spi1 tx channel 3 DMA_DeInit(DMA1_Channel3); //spi1 tx channel 3 DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t) & (SPI1->TXREG); //UART2_DMA_TX????J??? DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)tx; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;//?????memory?????? DMA_InitStructure.DMA_BufferSize = txbuffSize;//SPI1_DMA_TX??????? DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable; DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_VeryHigh; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel3, &DMA_InitStructure);//SPI1 tX?DMA???3 SPI_DMACmd(SPI1,SPI_DMAReq_EN,ENABLE); 请问有人遇到过这种情况吗? 请问这是芯片设计导致的正常情况吗?

    DMA spi ni ST IO struct

    2493浏览量 0回复量 关注量
  • 灵动微MM32F103串口空闲中断怎么设置?

    最近用MM32F103RET6跑UCOSII,功能实现了,但是串口用的例程里的,不知道怎么设置串口空闲中断方式接收数据,网上有人说用DMA+串口实现固定长度的数据接收。请教一下大家都是怎么接收数据的?我想一帧一帧的接收处理。

    mm32f103 串口 DMA os 串口实现 数据接收

    3816浏览量 2回复量 关注量
  • i2sextx基地址问题

    最近在使用at32f403a系列单片机做i2s全双工通讯,使用DMA接收时需设置外设地址i2sext2,手册上没找到介绍,请技术人员给与解答

    se DMA 全双工 单片机 通讯 系列单片机

    3275浏览量 1回复量 关注量
  • hc32L072的dma串口配置

    DMA方式接收不定长字节的配置,或者配置demo,不胜感激

    DMA 串口 HC DM demo

    2999浏览量 5回复量 关注量
  • AT32 如何读取 pdm 数字麦克风

    AT32 如何读取 pdm 数字麦克风 ,i2s 和DMA 如何配置,是否可以给出一个历程

    麦克风 数字麦克风 pd DM DMA

    2736浏览量 1回复量 关注量
  • MM32通过DMA传输到蓝牙,再传输到手机的数据丢失的问题

    请问我想用MM32向蓝牙模块HC05传输数据,然后用手机接受,但是传输的数据丢包,并且只传输第一位数据(类似HCO5:1111111111),用的DMA传输到蓝牙, t = KEY_Scan(0); //get key value if( t == KEY3_PRES ) { sprintf((char*)sendbuf,"12345678 %d\r\n",sendcnt); printf("%s",sendbuf);//显示发送数据 u2_printf("2346789abcdefgh %d\r\n",sendcnt); //发送到蓝牙模块 sendcnt++; if(sendcnt>99)sendcnt=0; t=0; LED2_ON(); DELAY_Ms(100); LED2_OFF(); } (主循环里的), void u2_printf(char* fmt,...) { va_list ap; va_start(ap,fmt); vsprintf((char*)USART3_TX_BUF,fmt,ap); va_end(ap); while(DMA_GetCurrDataCounter(DMA1_Channel2)!=0); //等待通道2传输完成 UART_DMA_Enable(DMA1_Channel2,strlen((const char*)USART3_TX_BUF)); //通过dma发送出去 } 这是传输函数

    蓝牙 手机 DMA se printf print

    6431浏览量 2回复量 关注量
  • GD32F130F4P6替换STM32F030F4P6 sos

    我用STM32F030F4P6的程序直接烧录到GD32F130F4P6,代码都不需要修改,基本功能都能用,FLASH读写也没问题,串口也能收发,唯独就是ADC+DMA读取不到数据,各位有谁做过吗,希望能指导一下,感激不尽

    GD32F130 STM32F030f4p6 AD DMA flash 串口

    1359浏览量 0回复量 关注量
  • 请问华大的FAE为什么F460的I2S读数据总是0 sos

    [i=s] 本帖最后由 wenleileilei 于 2021-4-25 18:23 编辑 [/i] 用的PA12,参考了ddl里的i2s_record_wm8731_exck_dma例程,但改成了内部时钟输出,现在就是读wm8974总是0,示波器测量所有管脚波形都正常,单独控制PA12输出或者读取电平状态也正常,不论在主函数里循环读还是在接收中断里读或者在DMA里自动读,永远都是0。I2S写倒是正常,如果同时读写I2S,读出来的数据就是写进去的数据,好奇怪,有知道原因的高手吗?

    DMA DM wm8731 wm8974 示波器测量 record

    1420浏览量 0回复量 关注量
  • 我问一下GD32F405RGT6对应的DMA映射表能发我一下吗 sos

    我问一下GD32F405RGT6对应的DMA映射表能发我一下吗,手机号15600595231(微信号),qq邮箱:[email]1654473463@qq.com[/email]

    MUC DMA 映射 GD32F405 COM 信号

    1457浏览量 0回复量 关注量
  • gd32f103rct spi0从机 DMA发送异常

    gd32f103rct spi0从机 DMA发送一包数据的时候,有个别字节的最高位本来是1的,发送出来是0。 MISO没加上拉电阻。

    mcu DMA spi rc gd32F103 ISO

    690浏览量 2回复量 关注量
  • GD32使用DMA发送问题 sos

    [i=s] 本帖最后由 tyw 于 2021-3-8 14:02 编辑 [/i] [font=Consolas, "][color=#000000][backcolor=white]void u3_printf(char* fmt,...) { va_list ap; va_start(ap,fmt); vsprintf((char*)USART3_TX_BUF,fmt,ap); va_end(ap); dma_channel_disable(DMA0,DMA_CH1); dma_memory_address_config(DMA0,DMA_CH1,(uint32_t)USART3_TX_BUF); dma_transfer_number_config(DMA0,DMA_CH1,strlen((const char*)USART3_TX_BUF)); dma_channel_enable(DMA0,DMA_CH1); usart_dma_transmit_config(USART2, USART_DENT_ENABLE);//使能串口DMA发送 while(RESET == dma_flag_get(DMA0, DMA_CH1, DMA_FLAG_FTF)){}; /* wait DMA Channel transfer complete */ memset(USART3_TX_BUF,0,USART3_MAX_SEND_LEN); } [/backcolor][/color][/font] 如上代码:第一次发送正常,第二次发送,对端只能收到相应长度的空字符怀疑是第二次发送的时候没有从首地址开始发送,同样代码stm32是正常的

    DMA SAR USART AN ST

    1010浏览量 0回复量 关注量
  • AT32F403A 使用ADC时候出的问题。

    使用ADC 双模式时,程序卡在判断CAL 控制位为零的循环中,在使用ADC双模式时,由于硬件不会清除CAL控制位,可能导致程序会卡在ADC校准函数 while(ADC_GetCalibrationStatus(ADC1)); 我没有双使用ADC,还事卡住。 #define Channel_Num 2 #define Sample_Num 1 u16 ADC_ConvertedValue[Sample_Num][Channel_Num]; void ADC_DMA_Config(void) { DMA_InitTypeDef DMA_InitStructure; RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); DMA_DeInit(DMA1_Channel1); DMA_InitStructure.DMA_PeripheralBaseAddr = (uint32_t)&ADC1->DR; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)&ADC_ConvertedValue; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = Sample_Num*Channel_Num; DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;//外设地址不变 DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;//内存地址递增 DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord; DMA_InitStructure.DMA_Mode = DMA_Mode_Circular; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Disable; DMA_Init(DMA1_Channel1, &DMA_InitStructure); //DMA_Cmd(DMA1_Channel1,ENABLE); DMA_ClearITPendingBit(DMA1_IT_TC1);//清除DMA通道x中断待处理标志位 DMA_ITConfig(DMA1_Channel1,DMA_IT_TC, ENABLE); } //ADC配置函数 void ADC_Configuration(void) { u16 i; ADC_InitTypeDef ADC_InitStructure; RCC_ADCCLKConfig(RCC_PCLK2_Div6); //第二步:设置分频因子 ADC最大速率14M 72/6=12M ADC_DeInit(ADC1); //将外设 ADC1 的全部寄存器重设为默认值 //配置ADC1 ADC_InitStructure.ADC_Mode=ADC_Mode_Independent; //独立模式 ADC_InitStructure.ADC_ScanConvMode=ENABLE; //扫描 ADC_InitStructure.ADC_ContinuousConvMode=ENABLE; //ADC_InitStructure.ADC_ContinuousConvMode=DISABLE; ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//无外部触发,即软件触发 ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right; ADC_InitStructure.ADC_NbrOfChannel=Channel_Num;//规则转换通道数量 ADC_Init(ADC1,&ADC_InitStructure); //ADC1通道采样配置,使用规则通道1-3 //测试使用中断方式读数据,采样周期不能太小.实际使用时考虑加DMA处理 ADC_RegularChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_41Cycles5);//ADC8配置为通道1,周期239.5+12.5 ADC_RegularChannelConfig(ADC1,ADC_Channel_3,2,ADC_SampleTime_41Cycles5);//ADC8配置为通道1,周期239.5+12.5 //初始化AD缓冲 for(i=0;i<4;i++) { AD_value[i]=0; } //使能ADC1的DMA模式 ADC_DMACmd(ADC1,ENABLE); /* Enable ADC1 */ ADC_Cmd(ADC1,ENABLE); DELAY_1ms();//14*ADCCLK ADC_ExternalTrigConvCmd(ADC1, DISABLE); //禁止外部出发ADC转换 //清除ADC1校准值 ADC_ResetCalibration(ADC1); //等待清除完成 while(ADC_GetResetCalibrationStatus(ADC1)); //开始ADC1校准 ADC_StartCalibration(ADC1); //等待校准完成 //while(ADC_GetCalibrationStatus(ADC1)); DELAY_10ms(); DELAY_10ms(); DMA_Cmd(DMA1_Channel1,ENABLE); //开始ADC1转换 ADC_SoftwareStartConvCmd(ADC1,ENABLE); // ADC_ClearFlag(ADC1,ADC_FLAG_EOC);//清除中断标志 // ADC_ITConfig(ADC1,ADC_IT_EOC,ENABLE);//使能中断 }

    ADC DMA DM ni ST

    1213浏览量 2回复量 关注量
  • GD32F450如何配置通过定时器触发DMA内存到内存的传输 sos

    我想配置通过定时器触周期性发DMA内存到内存的传输,求教

    DMA 内存 定时器 触发 GD32F450

    341浏览量 0回复量 关注量
  • 从存储器到外设还是从存储器到存储器?

    想实现一块RAM到FSMC的DMA传输,DMA传输请求由TIM8_TRIG触发,那FSMC是外设还是存储器,我该选择DMA_InitStructure.DMA_DIR是从存储器到外设还是从存储器到存储器?

    存储器 DMA DM SMC FSMC

    341浏览量 19回复量 关注量
  • 有没有使用GD32单片机的,使用DMA遇到问题

    问题是这样的:我使用GD32E23芯片,M0+内核,用GD的库函数,在使用USART和SPI的DMA方式传输数据时,每次数据传输完成都必须初始化DMA,否则无法完成下一次传输。但是初始化是很耗费时间的,就不能想ST那样直接清标志位实现下一次传输吗?搜索 [align=left]复制[/align]

    DMA 32单片机 spi gd32e23 pi

    1155浏览量 4回复量 关注量
12下一页