请问一下STM32F103C8T6的Hardwar NSS Output ENABLE后cs持续拉低是为什么
STM32G0B1
为什么DMA搬运数据只搬运最后1个字节的数?
为什么STM32H7的DMA第一次启动延时较长?
STM32u575 USART 用GPDMA接收,DMA中断,usart 中断正常来,ROR数据正确,接收缓冲却不变
请教STM32F103的DMA空闲接收问题
stm32h7 定时器输出比较模式+dma,生成脉冲异常
STM32H725VGT3内存不足问题
STM32H7A3 怎样配置MDMA的硬件触发MDMA_REQUEST_DMA1_Stream0_TC将数据再次转运
串口DMA收发出现ORE错误
微信公众号
手机版
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