
多DMA数据流问题
STM32407 使用串口闲时中断+DMA方式接收最大接收字节是多少
STM32L433VCT6 进入STOP模式2之后,功耗依然和正常运行模式没有差别,请教大神
定时器使用DMA突发传输功能时,传入指针从常量数组改为变量数组后,传输功能异常。测试官方用例一样,是何原因?
STM32U3 IIC通信后,SPI+GPDMA 进入循环发送,DMA无法使能 寄存器USEF=1
分享一个PWM+DMA的BUG
STM32的TIM触发SPI的DMA发送使用NSS时MSSI的问题
PWM+DMA求助
STM32H743使用EXIT0触发SPI的DMA发送数据
STM32F373 SDAC1+DMA,数据只能更新一次?
hdma_spi3_tx.Instance = DMA1_Stream5;
hdma_spi3_tx.Init.Channel = DMA_CHANNEL_0;
hdma_spi3_tx.Init.Direction = DMA_MEMORY_TO_PERIPH;
hdma_spi3_tx.Init.PeriphInc = DMA_PINC_DISABLE;
hdma_spi3_tx.Init.MemInc = DMA_MINC_ENABLE;
hdma_spi3_tx.Init.PeriphDataAlignment = DMA_PDATAALIGN_HALFWORD;
hdma_spi3_tx.Init.MemDataAlignment = DMA_MDATAALIGN_HALFWORD;
hdma_spi3_tx.Init.Mode = DMA_CIRCULAR;
hdma_spi3_tx.Init.Priority = DMA_PRIORITY_LOW;
hdma_spi3_tx.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
hdma_spi3_tx.Init.MemBurst = DMA_MBURST_SINGLE;
hdma_spi3_tx.Init.PeriphBurst = DMA_PBURST_SINGLE;
中断处理函数内容:
void DMA1_Stream5_IRQHandler(void)
{
rollback();
UBaseType_t uxSavedInterruptStatus;
static uint32_t count = 2;
BaseType_t xHigherPriorityTaskWoken;
xHigherPriorityTaskWoken = pdFALSE;
uxSavedInterruptStatus = pdFALSE;
xSemaphoreTakeFromISR(isrSwitchTaskSem,&xHigherPriorityTaskWoken);
if(__HAL_DMA_GET_FLAG(&hdma_spi3_tx,DMA_FLAG_TCIF1_5)!=RESET) //DMA传输完成
{
__HAL_DMA_CLEAR_FLAG(&hdma_spi3_tx,DMA_FLAG_TCIF1_5); //清除DMA传输完成中断标志位
if(DMA1_Stream5->CR&(1<<19)) //填数据buf1
{
printf("2\r\n");
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
if(count%3 == 0)
{
//wav_pack1_buf = recvpack2;
for(int i = 0 ; i<(WAV_BUF_SIZE/2) ;i++)
{
wav_pack1_buf = audio1khz;
}
count++;
}
else if(count%3 == 1)
{
//wav_pack1_buf = recvpack3;
for(int i = 0 ; i<(WAV_BUF_SIZE/2) ;i++)
{
wav_pack1_buf = audio1khz;
}
count++;
}
else if(count%3 == 2)
{
//wav_pack1_buf = recvpack4;
for(int i = 0 ; i<(WAV_BUF_SIZE/2) ;i++)
{
wav_pack1_buf =audio1khz;
}
count++;
}
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
}
else //buf2
{
printf("3\r\n");
uxSavedInterruptStatus = taskENTER_CRITICAL_FROM_ISR();
if(count%3 == 0)
{
//wav_pack2_buf = recvpack2;
for(int i = 0 ; i<(WAV_BUF_SIZE/2) ;i++)
{
wav_pack2_buf = audio1khz;
}
count++;
}
else if(count%3 == 1)
{
//wav_pack2_buf = recvpack3;
for(int i = 0 ; i<(WAV_BUF_SIZE/2) ;i++)
{
wav_pack2_buf = audio1khz;
}
count++;
}
else if(count%3 == 2)
{
//wav_pack2_buf = recvpack4;
for(int i = 0 ; i<(WAV_BUF_SIZE/2) ;i++)
{
wav_pack2_buf = audio1khz;
}
count++;
}
taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
}
//-----------------------------------------------
//taskEXIT_CRITICAL_FROM_ISR(uxSavedInterruptStatus);
}
portYIELD_FROM_ISR( xHigherPriorityTaskWoken );
}
,其链接是 https://mp.weixin.qq.com/s?__biz=MzA3OTIxMjQyNQ==&mid=2650949270&idx=1&sn=9e2cc8f4f355ee54a93ae5ed963acc34&chksm=84401c70b337956675c3b6dd6807a8e7a946506614e1f1edd0b03b3393da80c61f282d70d7b5&token=1260899245&lang=zh_CN#rd 主要了解下相关配置及函数用法。
https://mp.weixin.qq.com/s?__biz=MzA3OTIxMjQyNQ==&mid=2650949270&idx=1&sn=9e2cc8f4f355ee54a93ae5ed963acc34&chksm=84401c70b337956675c3b6dd6807a8e7a946506614e1f1edd0b03b3393da80c61f282d70d7b5&token=1260899245&lang=zh_CN#rd