打印

读AD问题

[复制链接]
1029|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wufei9601114|  楼主 | 2020-7-1 21:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
AD, ADC, dc, rc, pi
哪位大神帮个忙,程序如下,就是读的不对。
/**********************************************************************************/
int main(void)
{
        uint32_t sj;
        FlagStatus bz=0;
       
        systick_config();
        rcu_deinit();  //复位RCU
        rcu_system_clock_source_config(RCU_CKSYSSRC_PLL);  //系统时钟CK_SYS为PLL时钟 最高108M
        rcu_pll_config(RCU_PLLSRC_HXTAL,8);  //外部晶振作为PLL时钟,8倍频 12*8
        rcu_ahb_clock_config(RCU_AHB_CKSYS_DIV1); //系统时钟1分频作为AHB时钟
        rcu_apb2_clock_config(RCU_APB2_CKAHB_DIV1);  //AHB时钟1分频作为APB2时钟
        rcu_osci_on(RCU_HXTAL);
        rcu_osci_on(RCU_PLL_CK);
       
       
        rcu_periph_clock_enable(RCU_GPIOE);  //使能外设时钟 GPIOE
        gpio_init(GPIOE,GPIO_MODE_OUT_PP,GPIO_OSPEED_50MHZ,GPIO_PIN_3);  //GPIO参数初始化
        adcInit();
        while(1)
        {

                adc_software_trigger_enable(ADC1, ADC_REGULAR_CHANNEL);  //启动转换
                while(!bz)
                        bz=adc_flag_get(ADC1,ADC_FLAG_EOC);  //获取转换结束标志位
                sj=adc_regular_data_read(ADC1);
                adc_flag_clear(ADC1,ADC_FLAG_STRC);  //清除转换开始标志位
                if(sj>1000)
                        gpio_bit_set(GPIOE,GPIO_PIN_3);
                else
                        gpio_bit_reset(GPIOE,GPIO_PIN_3);
       
                delay_1ms(1);
    }
}
/******************************************************************/
void adcInit(void)
{
        rcu_adc_clock_config(RCU_CKADC_CKAPB2_DIV12);  //配置ADC时钟 最大14M  APB2时钟12分频为8M
        rcu_periph_clock_enable(RCU_ADC1);  //使能ADC1时钟
        gpio_init(GPIOA,GPIO_MODE_AIN,GPIO_OSPEED_10MHZ,GPIO_PIN_2);  //PA2模拟输入
       
        adc_deinit(ADC1);   //复位ADC外设
        adc_special_function_config(ADC1,ADC_CONTINUOUS_MODE, DISABLE);  //禁止连续模式
        adc_special_function_config(ADC1,ADC_SCAN_MODE, DISABLE);  //禁止扫描模式
        adc_discontinuous_mode_config(ADC1,ADC_CHANNEL_DISCON_DISABLE,1); //间断模式禁能
        adc_external_trigger_source_config(ADC1, ADC_REGULAR_CHANNEL, ADC0_1_2_EXTTRIG_REGULA  R _NONE); //配置ADC外部触发源  软件触发
    adc_external_trigger_config(ADC1, ADC_REGULAR_CHANNEL, ENABLE); //配置ADC外部触发 规则通道组 使能
        adc_data_alignment_config(ADC1, ADC_DATAALIGN_RIGHT); //配置ADC数据对齐方式  低位对齐
        adc_channel_length_config(ADC1, ADC_REGULAR_CHANNEL, 1); //配置规则通道组或注入通道组的长度(1路AD)   规则通道组
        adc_regular_channel_config(ADC1, 0, ADC_CHANNEL_2, ADC_SAMPLETIME_55POINT5);  //配置ADC规则通道组  通道2 采样时间55.5周期
       
        adc_mode_config(ADC_MODE_FREE); //配置ADC模式  ADC0和ADC1运行在独立模式
        adc_enable(ADC1);   //使能ADC外设
        delay_1ms(1);  //使能后必须不少于20us的延时
        adc_calibration_enable(ADC1); //ADC校准复位
        //adc_dma_mode_enable(ADC1); //ADC_DMA请求使能
}
/******************************************************************/

使用特权

评论回复
沙发
wufei9601114|  楼主 | 2020-7-1 21:50 | 只看该作者
国产的感觉太啰嗦了,搞了一天了

使用特权

评论回复
板凳
sonicll| | 2020-7-2 09:16 | 只看该作者
你配置PA2的时候,没有使能GPIOA的时钟。
劝楼主多一分细心,少一分浮躁,你即使用ST的芯片,操作ADC也要做这些步骤,不要总对国产抱有偏见

使用特权

评论回复
地板
zeshoufx| | 2020-7-3 14:28 | 只看该作者
这是哪款单片机,,,感觉不用那么复杂吧

使用特权

评论回复
5
wufei9601114|  楼主 | 2020-7-9 20:34 | 只看该作者
sonicll 发表于 2020-7-2 09:16
你配置PA2的时候,没有使能GPIOA的时钟。
劝楼主多一分细心,少一分浮躁,你即使用ST的芯片,操作ADC也要做 ...

把PA2当AD口用也要使能IO口的时钟吗

使用特权

评论回复
6
sonicll| | 2020-7-10 08:53 | 只看该作者
wufei9601114 发表于 2020-7-9 20:34
把PA2当AD口用也要使能IO口的时钟吗

使能时钟是必须操作,绝大部分外设,如果不使能时钟,寄存器是不能写入的

使用特权

评论回复
7
wiba| | 2020-8-3 18:11 | 只看该作者
能描述一下偏差吗

使用特权

评论回复
8
zljiu| | 2020-8-3 18:11 | 只看该作者
这是什么型号的啊

使用特权

评论回复
9
coshi| | 2020-8-3 18:11 | 只看该作者
看的我头疼

使用特权

评论回复
10
aoyi| | 2020-8-3 18:11 | 只看该作者
帮楼主顶一下

使用特权

评论回复
11
drer| | 2020-8-3 18:12 | 只看该作者
楼主问题解决了吗

使用特权

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

本版积分规则

11

主题

23

帖子

0

粉丝