打印
[STM8]

搞了一天都没搞通

[复制链接]
701|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
jiajs|  楼主 | 2016-10-26 23:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
ADC, AD, dc, ADC1, ST

void Init_ADC(void)
{
        GPIO_Init(GPIOB, GPIO_PIN_0, GPIO_MODE_IN_FL_NO_IT);
        ADC1_DeInit();
ADC1_Init(ADC1_CONVERSIONMODE_SINGLE, ADC1_CHANNEL_0, ADC1_PRESSEL_FCPU_D2, ADC1_EXTTRIG_TIM, DISABLE, ADC1_ALIGN_RIGHT, ADC1_SCHMITTTRIG_ALL, ENABLE);
ADC1_Cmd(ENABLE);
}
void main(void)
{
  FlagStatus flag_status;
                u16 u16_adc1_value;
                Init_UART2();
                Init_ADC();
/* Infinite loop */
  while (1)
  {
                //Send(0xf0);
                ADC1_StartConversion();
                do{
                        flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
                }
                while(flag_status == RESET); // SET or RESET
                    u16_adc1_value = ADC1_GetConversionValue();
                                ADC1_ClearFlag(ADC1_FLAG_EOC);
                                flag_status = ADC1_GetFlagStatus(ADC1_FLAG_EOC);
                                UART2_sendhex((u16_adc1_value>>8));
                    UART2_sendhex((u16_adc1_value&0xff));
                    UART2_sendstr("\r\n");
  }
  
}
单片机买的淘宝stm8s105k4t6核心板,debug时u16_adc1_value的值,我用可调电源输入大于2.1v时就是1023,小于2.1v就是0。flag_status的值一直是128,ADC1_ClearFlag(ADC1_FLAG_EOC)语句之后还是128不变。ADC1_SCHMITTTRIG_ALL, ENABLE改成ENABLE后情况一样,郁闷
沙发
jiajs|  楼主 | 2016-10-26 23:06 | 只看该作者
ADC1_SCHMITTTRIG_ALL, ENABLE改成DISABLE

使用特权

评论回复
板凳
jiaxw| | 2016-10-26 23:08 | 只看该作者
初学者建议买开发板来学习。
while(1)
{
    if (ADC1_GetFlagStatus(ADC1_FLAG_EOC) != 0)   // ADC 转换结束
    {
        u16_adc1_value = ADC1_GetConversionValue();   // 获取AD值
        ADC1_ClearFlag(ADC1_FLAG_EOC);   // 清除ADC转换完成标志位
        ADC1_StartConversion();   // 启动ADC的下一次转换

        /****发送到串口***/
        UART2_sendhex((u16_adc1_value>>8));
        UART2_sendhex((u16_adc1_value&0xff));
        UART2_sendstr("\r\n");

    }   
}

使用特权

评论回复
地板
liliang9554| | 2016-10-26 23:10 | 只看该作者
设置成DISABLE

使用特权

评论回复
5
jiajs|  楼主 | 2016-10-26 23:13 | 只看该作者
设置成DISABLE还是一样的情况。调试的时候flash_state 的值一直是128不知为啥没被清零

使用特权

评论回复
6
zhanghqi| | 2016-10-26 23:14 | 只看该作者
ADC1_GetConversionValue();这个函数简直看不懂,明明是10bitAD,出来的值常常大于1024!!

使用特权

评论回复
7
heweibig| | 2016-10-28 17:21 | 只看该作者
ADC设置全是默认的最简单设置,单个通道单次转换,左端对齐模式,

使用特权

评论回复
8
jiajs|  楼主 | 2016-10-28 17:26 | 只看该作者
这个问题真的无解了吗?换了几个版本的例程代码结果都一样,核心板上PB0接到vcc就是910左后,也没有到1023,接到gnd是0.接到可调电源也是这样,后来用个电位器测试结果一样,debug观察寄存器都正常,郁闷了。

使用特权

评论回复
9
shimx| | 2016-10-28 17:28 | 只看该作者
难道是adc下载的时候要设置选项字节?

使用特权

评论回复
10
jiaxw| | 2016-10-28 17:30 | 只看该作者
感觉STM8直接写寄存器反而方便,搞成库很啰嗦

使用特权

评论回复
11
liliang9554| | 2016-10-28 17:32 | 只看该作者
flag_status 是不是跟其他文件中变量有冲突,所以一直是128;单步执行看看这个值什么时候变128的。

使用特权

评论回复
12
jiajs|  楼主 | 2016-10-28 17:34 | 只看该作者
问题找到了,核心板vdda没有接供电,犯了个低级错误。

使用特权

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

本版积分规则

940

主题

11975

帖子

6

粉丝