stm32之奇葩adc

2019-03-23 19:02发布

改变adc输入引脚电压后,串口打印的电压值不更新,只有重新打开串口后才更新,有朋友遇到过这种情况吗? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
ltbytyn
1楼-- · 2019-03-25 10:14
void disp_adc2(u16 d)
{
    float temp = d*3.3/4096;
        unsigned char s = (unsigned char)(temp * 10);

//        USART_SendData(USART1 , table[s/10]);
//        while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
//        USART_SendData(USART1 , '.');
//        while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
//        USART_SendData(USART1 , table[s%10]);
//        while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);

//        USART_SendData(USART1 , ' ');
//        while(USART_GetFlagStatus(USART1, USART_FLAG_TC)==RESET);
}
既然没有开串口,为什么不屏蔽串口应用呢?你程序一直在检测串口发送这里的while停留。难怪不刷信AD值,要是变化了才怪。
dzgcsj_hz
2楼-- · 2019-03-25 13:53
ddllxxrr 发表于 2013-12-29 22:20
这句总是得取整数部分,并且还是CHAR,言外之意,就是基本上值 不变

temp取值范围在0到3.3之间 ,乘以10之后转换成char,s范围是0到33,怎么会不变你?
dzgcsj_hz
3楼-- · 2019-03-25 14:06
 精彩回答 2  元偷偷看……
ltbytyn
4楼-- · 2019-03-25 15:39
dzgcsj_hz 发表于 2013-12-30 19:57
我是每发送一个字符才等待的,一次电压值发送完成之后,怎么会停留在while里呢?

抱歉,那一块我看错了。
下一次的ADC采样,你在什么地方启动了?
ddllxxrr
5楼-- · 2019-03-25 16:40
ADC_SoftwareStartConvCmd(ADC1, ENABLE);        

  while (1)
  {
                while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC) == RESET);
                res = ADC_GetConversionValue(ADC1);
                disp_adc2(res);
                ADC_ClearFlag(ADC1, ADC_FLAG_EOC);  
  }
}

应把最上一句加到while中第一句

  
dzgcsj_hz
6楼-- · 2019-03-25 20:45
 精彩回答 2  元偷偷看……

一周热门 更多>