STM32F103VE,ADC1,SCAN模式,DMA,第一个结果不对

[复制链接]
1593|5
 楼主| 戈卫东 发表于 2013-11-5 19:14 | 显示全部楼层 |阅读模式
谁知道是为什么?
香水城主 发表于 2013-11-5 20:27 | 显示全部楼层
没有任何信息,不知道为什么。
feilusia 发表于 2013-11-5 20:29 | 显示全部楼层
本帖最后由 feilusia 于 2013-11-5 20:31 编辑

我用SPI的DMA时候也出现过第二次接收时的第一个字节出错,第三次以后数据全错。
这是因为DMA的接收和发送中断是在最后一个字节的第一位刚发/收完就进中断,在中断函数里还需要判断DMA数据是否完全接收完。

参考下我没用中断时的判断数据是否传完的函数:
u8 SPI2_ReceiveSendByte_Completed(void)
{
u32 timeout = 0;                       //超时
/******等待DMA接收完毕*********/
timeout = TIMEOUT;
while((DMA1->ISR & (1<<13)) == 0)               //等待通道4传输完成  
{
  if((timeout--) == 0)
   return(SPI2_RecieveSend_Error);
}

timeout = TIMEOUT;
while((DMA1->ISR & (1<<17)) == 0)               //等待通道5传输完成
{
  if((timeout--) == 0)
   return(SPI2_RecieveSend_Error);
}

timeout = TIMEOUT;
while((SPI2->SR) & (1 << 7))                 //判断BSY是否忙
{
  if((timeout--) == 0)
   return(SPI2_RecieveSend_Error);
}

/******清除DMA传输完成标志位*********/
  DMA1->IFCR |= 1 << 13;                    //清DMA第4通道传输完成标志
  DMA1->IFCR |= 1 << 17;                    //清DMA第5通道传输完成标志  

return(STM32_OK);
}
 楼主| 戈卫东 发表于 2013-11-5 20:46 | 显示全部楼层
弄明白了. SQR1寄存的计数值+1才是转换数,开始没注意看,改了就对了.
puchuang 发表于 2013-11-5 21:00 | 显示全部楼层
本帖最后由 puchuang 于 2013-12-1 09:42 编辑

问题解决了就好      香主   惭愧    前几天   在坛子里乱逛    没有好好看楼上的帖子    对不住    版主    惭愧   改进
香水城 发表于 2013-11-6 12:45 | 显示全部楼层
puchuang 发表于 2013-11-5 21:00
不是很了解这一块   帮你顶一个   看看别人的意见如何   呼唤版主

LS的tx灌水挺起劲的:),人家LZ都已经回帖说自己弄明白了,你还在那里“不是很了解这一块,帮你顶”。:L
您需要登录后才可以回帖 登录 | 注册

本版积分规则

136

主题

11708

帖子

75

粉丝
快速回复 在线客服 返回列表 返回顶部