打印

stm32 紧急求助

[复制链接]
1953|19
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
kuyu20|  楼主 | 2012-9-19 11:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
第一个问题: 使用dma读取ADC1的转换结果,循环读取,读到规定的个数后就关闭了adc1,再需要读时,重新设置dma,后再开启adc1。出现的问题是:重新设置dma后必须延时一段时间再开adc1才能正常读取,否则就永远读不到了。
  重设置dma:
  DMA_Cmd(DMA1_Channel1, DISABLE);
  DMA1_Channel1->CNDTR = count;
  DMA_ClearITPendingBit(DMA1_IT_GL1);
  DMA_Cmd(DMA1_Channel1, ENABLE);
重开adc:
  ADC_Cmd(ADC1, ENABLE);       //ADC1上电
   ADC_ResetCalibration(ADC1);  
   while(ADC_GetResetCalibrationStatus(ADC1));   
  ADC_StartCalibration(ADC1);   
  while(ADC_GetCalibrationStatus(ADC1));   
  ADC_Cmd(ADC1, ENABLE);       //使能ADC1
  ADC_SoftwareStartConvCmd(ADC1, ENABLE);

第二个问题:usart3部分重定位到pc10,pc11,接收和发送数据都不对,比如发0x55到串口监视工具,收到的DB,FD.
串口3的设置:
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No ;
USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  USART_InitStructure.USART_BaudRate = 19200;
  USART_Init(USART3, &USART_InitStructure);
  USART_Cmd(USART3, ENABLE);
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);      USART_ClearFlag(USART3, USART_FLAG_TC);
沙发
lvjing880907| | 2012-9-19 15:52 | 只看该作者
这个不会!我帮你顶下

使用特权

评论回复
板凳
airwill| | 2012-9-19 19:45 | 只看该作者
没有这么用过. 不知道楼主所说的延时要多久?
不过按照数据手册的说法, 这样使用不应该有问题.
请香主验证一下, 这算不算是一个 BUG.

使用特权

评论回复
地板
kuyu20|  楼主 | 2012-9-19 19:59 | 只看该作者
延时1ms目前还没出现问题。

感觉这不是根本的解决办法,可能有错误隐藏在里面。还不是很熟悉,还望了解的兄弟帮忙。

使用特权

评论回复
5
kuyu20|  楼主 | 2012-9-19 20:23 | 只看该作者
本帖最后由 kuyu20 于 2012-9-19 20:24 编辑

用的是103R6T6和R8T6,都需要等一会才能开adc,现在用1mS,还能正常工作。

USART3的问题,用的是R8T6的芯片,单片机、232芯片都换过了,都不行。这个3重定位是不是有什么需要注意的? 让它自发自收的时候,收到的数是对的。但是向串口调试工具发和从串口接收,都是错的。

使用特权

评论回复
6
figo20042005| | 2012-9-19 20:27 | 只看该作者
这个有待香主等大牛来解决

使用特权

评论回复
7
kuyu20|  楼主 | 2012-9-20 09:55 | 只看该作者
有人能证实一下103r8t6的usart3部分重定义到pc10 pc11是能用的吗?

使用特权

评论回复
8
香水城| | 2012-9-20 11:47 | 只看该作者
在关闭ADC的时候,有没有试过调用ADC_DeInit()和DMA_DeInit()

使用特权

评论回复
9
kuyu20|  楼主 | 2012-9-20 12:14 | 只看该作者
多谢香版主的回复,这就试试。

另外,usart3的事情确实很头疼,是不是大家用的时候都没有问题?

首选怀疑的就是自己的人品不行,但是现在没查到证据。

使用特权

评论回复
10
kuyu20|  楼主 | 2012-9-20 12:23 | 只看该作者
调用了ADC_DeInit()和DMA_DeInit()后,再使用adc和dma就要对其重新初始化吧?

使用特权

评论回复
11
kuyu20|  楼主 | 2012-9-20 13:11 | 只看该作者
调用了也不行。
每次重新启用的时候直接全部重新初始化都不行。
还是的加1mS延时,好像还不能太少,具体需要多少时间没试。

使用特权

评论回复
12
kuyu20|  楼主 | 2012-9-20 13:14 | 只看该作者
被这个和usatr3折磨死了,唉!

使用特权

评论回复
13
IJK| | 2012-9-20 13:39 | 只看该作者
usart3部分重定位到pc10,pc11,接收和发送数据都不对
问题多半是因为波特率。其实用示波器看看就清楚了。

使用特权

评论回复
14
IJK| | 2012-9-20 13:42 | 只看该作者
DMA的问题,看上去象DMA用了FIFO,但FIFO没有清掉,造成的。
LZ的STM32型号是什么?

使用特权

评论回复
15
kuyu20|  楼主 | 2012-9-20 19:59 | 只看该作者
谢谢楼上,按你说的再试验试验看看。

使用特权

评论回复
16
kuyu20|  楼主 | 2012-9-20 20:07 | 只看该作者
测了一下晶振的频率,没有错误。
那么还有什么情况会在设置没错误,但是实际出来的波特率还会不对呢。

使用特权

评论回复
17
kuyu20|  楼主 | 2012-9-20 20:08 | 只看该作者
用的是103R8和103R6

使用特权

评论回复
18
kuyu20|  楼主 | 2012-9-20 20:17 | 只看该作者
用了2400的波特率,一位应该是417uS吧?但是实测一位是600uS

使用特权

评论回复
19
kuyu20|  楼主 | 2012-9-20 20:33 | 只看该作者
实测证明,2400的比特率要设置成3600才是2400的。差了一半。

是不是那个地方要特别设置

使用特权

评论回复
20
kuyu20|  楼主 | 2012-9-22 09:37 | 只看该作者
我*,ADC用的那个DMA通道设置为最高优先级就不需要延时了。

就用了这一个dma通道,难道还有别的和他抢?

使用特权

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

本版积分规则

14

主题

65

帖子

1

粉丝