你的浏览器版本过低,可能导致网站不能正常访问!为了你能正常使用网站功能,请使用这些浏览器。
安 发表于 2016-11-7 16:40 等我找个板子测试一下103下面,DMA的采集。
zbber 发表于 2016-11-7 18:11 楼主用的哪个CPU
查看全部评分
五哥1 发表于 2016-11-8 11:24 根据楼主的情况,结合以往,绝大多数的问题都是提出问题的楼主自行解决的,因为所有发言的人都是在你提供的 ...
有结果了吗
STM32f072C8
我用F439的DMA例程 改
就改了这么一句 DMA_ITConfig(DMA_STREAM, DMA_IT_HT, ENABLE);
void DMA_STREAM_IRQHANDLER(void)
{
/* Test on DMA Stream Transfer Complete interrupt */
if(DMA_GetITStatus(DMA_STREAM, DMA_IT_HTIF0))
{
if((DST_Buffer[0]!=0xffffffff)&&(DST_Buffer[BUFFER_SIZE-1]!=0xffffffff))
{
Errno=1;
}
DST_Buffer[0]=0xffffffff;
DST_Buffer[BUFFER_SIZE-1]=0xffffffff;
if((DST_Buffer[0]!=0xffffffff)&&(DST_Buffer[BUFFER_SIZE-1]!=0xffffffff))
{
Errno=2;
}
/* Clear DMA Stream Transfer Complete interrupt pending bit */
DMA_ClearITPendingBit(DMA_STREAM, DMA_IT_HTIF0);
printf("\n\rwww.armjishu.com STM32 DMAÊý¾Ý´«ÊäÍê³É\r\n");
/* Turn LED3 on: End of Transfer */
STM_EVAL_LEDOn(LED3);
}
}
执行结果,还是每次中断,整个buff都更新,Errno始终等于1,实在没办法理解了
今天有测试了一下,
u8 Test_Flag=0,Errno=0;
u32 DataCnt=0;
void DMA1_Channel1_IRQHandler(void)
{
DataCnt = DMA_GetCurrDataCounter(DMA1_Channel1);
Errno=0;
if(DataCnt>250)
{
Errno=1;
}
if(DMA_GetITStatus(DMA_IT_HT)==SET)
{
DMA_ClearITPendingBit(DMA1_IT_HT1);
if(Test_Flag)
{
Test_Flag=0;
SDA_H;
}
else
{
Test_Flag=1;
SDA_L;
}
}
}
结果发现DataCnt每次都等于250,BUFF的一半,也就是说是传输个半个BUFF,但是却发现,每次中断的时间,和全部传输完成的中断时间是一样的,而且数组里面仍然是全部更新。实际上还是全部传输中断,这到底为什么.
评分
查看全部评分
同意这个说法
如果在HT产生时加了中断,总是看到TC的产生的中断,这样测试并不准确,DMA处理数据速度快,导致仿真中断时,数据已经处理完成,才看到TC的中断产生,建议楼主用串口调试输出,这样准确一些。