找回密码
 立即注册
查看: 152|回复: 2

从入门到放弃☞ ..\\STC8H1K16的adc标志位不清零导致看门口复位

[复制链接]
  • TA的每日心情
    无聊
    2024-3-22 00:13
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    4

    主题

    13

    回帖

    74

    积分

    注册会员

    积分
    74
    发表于 2024-3-14 18:00:41 | 显示全部楼层 |阅读模式

    问题
    <1>程序逻辑 上电初始化所有外设 包括adc

    <2>初始化阶段去掉等待标志位的语句 程序正常
    <3> 上电读取一段adc值存在数组里 所以需要再初始化以后开始执行
    为啥只有去掉等待标志位的语句    while (!(ADC_CONTR & ADC_FLAG));
        ADC_CONTR &=~ADC_FLAG; 程序才能正常 而主循环里 不去掉这个    while (!(ADC_CONTR & ADC_FLAG));
        ADC_CONTR &=~ADC_FLAG;又可以正常运行
    看截图 我准备了两个函数uint16_t adc_result(uint8_t CH) 和 uint16_t adc_no_wait_flag(uint8_t CH)来解决问题 但这不是正常的办法 肯定是哪里问题我不知道




    1.png
    2.png
    回复 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 08:59
  • 签到天数: 143 天

    [LV.7]常住居民III

    27

    主题

    1343

    回帖

    4187

    积分

    论坛元老

    积分
    4187
    发表于 2024-3-15 09:03:29 | 显示全部楼层
    请打包上传可以复现问题的简化项目,这样方便排查。
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    无聊
    2024-3-22 00:13
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    4

    主题

    13

    回帖

    74

    积分

    注册会员

    积分
    74
     楼主| 发表于 2024-3-16 22:59:38 | 显示全部楼层
    乘风飞扬 发表于 2024-3-15 09:03
    请打包上传可以复现问题的简化项目,这样方便排查。

    uint16_t adc_wait_3ms_flag(uint8_t CH)
    {
        uint16_t result = 0;
        ADC_CONTR = ADC_POWER | ADC_START | CH;
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        while (!(ADC_CONTR & ADC_FLAG))
        {
          
            if (tm0.adc_ms_wait_ticks > 5)
            {
                              tm0.adc_ms_wait_ticks = 0;
                // 超过 3ms 未检测到标志位,自动设置标志位并跳出循环
                            //infoss("Indeed, no ADC flag position 1 was detected within 3ms. I forced it to be 1","adc_wait_3ms_flag(4)");
                            infols("Indeed, no ADC flag position 1 was detected within 3ms. I forced it to be 1");
                ADC_CONTR |= ADC_FLAG;
                break;
            }
        }
        if (ADC_CONTR & ADC_FLAG)
        {
            ADC_CONTR &= ~ADC_FLAG;
            result = ADC_RES << 8 | ADC_RESL;
        }
        return result;
    }没认真研究为什么了 定时器定时3ms 标志位等不到 强行置1
    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-5-18 12:32 , Processed in 0.075693 second(s), 40 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表