打印
[AT32F405]

[AT32F405] 【AT-START-F405测评】+ADC

[复制链接]
3116|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
输出结果:
代码:
int main(void)
{
    system_clock_config();//系统时钟初始化
    nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);//设置中断分组
    at32_board_init();//延时函数初始化
    crm_clocks_freq_get(&clocks_struct);
    USART_init(115200);//串口初始化函数
    ADC_init();//ADC初始化函数
   
    printf("test code.....!!!!\r\n");
   
    printf("software_trigger_repeat \r\n");
   
    while(1)
    {
        while(adc_flag_get(ADC1, ADC_CCE_FLAG) == RESET);//等待转换完成
        adc_result = adc_ordinary_conversion_data_get(ADC1);
        adc_value = adc_result * 3.3 / 4095;
        printf("voltage = %0.2f\r\n", adc_value);
        delay_ms(2000);
    }
}
初始化:
void ADC_init(void)
{
    gpio_init_type gpio_initstructure;
    adc_base_config_type adc_base_struct;
    crm_periph_clock_enable(CRM_ADC1_PERIPH_CLOCK, TRUE);
    crm_periph_clock_enable(CRM_GPIOA_PERIPH_CLOCK, TRUE);
    gpio_default_para_init(&gpio_initstructure);//GPIO默认参数初始化
    /* config adc pin as analog input mode */
    gpio_initstructure.gpio_mode = GPIO_MODE_ANALOG;//模拟输入
    gpio_initstructure.gpio_pins = GPIO_PINS_1;//ADC1通道1
    gpio_init(GPIOA, &gpio_initstructure);
   
    adc_clock_div_set(ADC_DIV_16);//ADC时钟16分频
   
    adc_base_default_para_init(&adc_base_struct);//ADC默认参数初始化
    adc_base_struct.sequence_mode = TRUE;//序列模式
    adc_base_struct.repeat_mode = TRUE;//开启反复模式 每次触发转换一组通道  连续模式
    adc_base_struct.data_align = ADC_RIGHT_ALIGNMENT;//数据右对齐
    adc_base_struct.ordinary_channel_length = 1;//普通通道序列长度  1   3
    adc_base_config(ADC1, &adc_base_struct);
    /* ADC1初始化普通通道  1:将通道1放在ADC转换菜单的第一个位置 */
    adc_ordinary_channel_set(ADC1, ADC_CHANNEL_1, 1, ADC_SAMPLETIME_41_5);//ADC采样时间41.5个周期
    //    adc_ordinary_channel_set(ADC1, ADC_CHANNEL_5, 2, ADC_SAMPLETIME_41_5);//2:通道5放在ADC转换菜单的第二个位置
    //    adc_ordinary_channel_set(ADC1, ADC_CHANNEL_6, 3, ADC_SAMPLETIME_41_5);//3:通道6放在ADC转换菜单的第三个位置
    /* 普通通道转换组触发模式使能及触发事件选择 */
    adc_ordinary_conversion_trigger_set(ADC1, ADC12_ORDINARY_TRIG_SOFTWARE, TRUE);//使用软件触发
    /* adc enable */
    adc_enable(ADC1, TRUE);//ADC1使能
    /* adc calibration */
    adc_calibration_init(ADC1);//ADC初始化校准
    while(adc_calibration_init_status_get(ADC1));//初始化校准状态获取
    adc_calibration_start(ADC1);//ADC校准开始
    while(adc_calibration_status_get(ADC1));//ADC校准状态获取
    /* 反复转换模式打开:软件触发使能之后会一直进行转换 */
    /* 反复转换模式关闭:软件触发使能之后会转换一次就结束了 */
    adc_ordinary_software_trigger_enable(ADC1, TRUE);//软件触发使能打开
}

使用特权

评论回复
沙发
ADC的配置比较麻烦,直接用代码生成工具会很方便

使用特权

评论回复
板凳
gangong| | 2024-10-29 16:28 | 只看该作者
谢谢分享

使用特权

评论回复
地板
可怜的小弗朗士| | 2024-11-9 18:55 | 只看该作者
可以加一下DMA吗

使用特权

评论回复
5
呐咯密密| | 2024-11-19 10:08 | 只看该作者
多通道采集应该怎么设置

使用特权

评论回复
6
zhjb1| | 2024-11-19 14:38 | 只看该作者
楼主,您好,在您的初始化中设置了3个ADC转换通道,按照您的获取方式:
adc_result = adc_ordinary_conversion_data_get(ADC1);
得到的是那个通道转换的结果呢?默认是ADC通道1吗?
如果想何获得另外两个通道的ADC数值?
谢谢

使用特权

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

本版积分规则

认证:东莞晟鼎精密仪器有限公司
简介:一名做大功率电源的工程,一直在学习,一直在进步。厚积薄发,志在千里!

12

主题

61

帖子

0

粉丝