打印

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

[复制链接]
1211|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才是转换数,开始没注意看,改了就对了.

使用特权

评论回复
5
puchuang| | 2013-11-5 21:00 | 只看该作者
本帖最后由 puchuang 于 2013-12-1 09:42 编辑

问题解决了就好      香主   惭愧    前几天   在坛子里乱逛    没有好好看楼上的帖子    对不住    版主    惭愧   改进

使用特权

评论回复
6
香水城| | 2013-11-6 12:45 | 只看该作者
puchuang 发表于 2013-11-5 21:00
不是很了解这一块   帮你顶一个   看看别人的意见如何   呼唤版主

LS的tx灌水挺起劲的:),人家LZ都已经回帖说自己弄明白了,你还在那里“不是很了解这一块,帮你顶”。:L

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

136

主题

11708

帖子

75

粉丝