打印
[国产单片机]

【东软载波ESF0654 PDS开发板活动】ADC

[复制链接]
564|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ES32F0654单片机的 ADC为12bit的逐次逼近型,最多可以测量16 个外部信号、两个内部参考电压和一个1/2 VDD 电压。通道的转换可选择单次、连续、扫描或不连续等采样模式,其采样结果存储在16 位数据寄存器,数据存储格式可以选择左对齐或右对齐存储。ADC 模块具有模拟看门狗特性,允许应用程序检测输入电压是否超过了用户设定的阈值上限或下限。

主要特点如下:

可配置的转换精度(6/8/10/12 位)
支持单次或连续工作模式
在标准转换、插入转换结束后以及发生模拟看门狗或溢出事件时产生中断
用于自动将通道0 转换为通道“n”的扫描模式
可配置的数据对齐方式
可独立设置各通道采样时间
可配置外部触发器选项,可为标准转换和插入转换配置极性
支持不连续采样模式
可配置的参考源选择
可配置的转换时钟分频
支持标准数据转换的DMA 请求标准

原理框图:



下面进行最简单的单通道单次转换实验。
#include "main.h"
#include "usart.h"
#include "md_usart.h"
#include "timer.h"
#include "exti.h"
#include "key.h"
#include "speed.h"
#include "md_adc.h"
#include "adc.h"
#include "stdio.h"

uint16_t key1_cnt=0;
uint16_t key2_cnt=0;

/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  This function configures GPIO
  * @param  None
  * @retval None
  */
void config_gpio(void)
{
       
        md_gpio_set_pin_function(LED1_GPIO_PORT, LED1_GPIO_PIN, GPIO_FUNC_1);
        md_gpio_set_pin_push_pull(LED1_GPIO_PORT, LED1_GPIO_PIN);
        md_gpio_set_pin_mode_output(LED1_GPIO_PORT, LED1_GPIO_PIN);
       
        md_gpio_set_pin_function(LED2_GPIO_PORT, LED2_GPIO_PIN, GPIO_FUNC_1);
        md_gpio_set_pin_push_pull(LED2_GPIO_PORT, LED2_GPIO_PIN);
        md_gpio_set_pin_mode_output(LED2_GPIO_PORT, LED2_GPIO_PIN);
}

/**
  * @brief  Test main function
  * @retval Status.
  */
extern uint16_t test;
float adc_value=0;
int main()
{       
       
        md_init_1ms_tick();
        config_gpio();
        usart_init();
        timer_init();//定时器初始化
        exti_init();//外部中断初始化
        key_init();
       
        /* Initialize adc pin */
        adc_pin_init();//初始化ad口,PB0

        /* Initialize ADC0 */
        md_adc_struct_init(&h_adc);
        md_adc_init(ADC0, &h_adc);//初始化adc

        /* Initialize normal convert channel */
        md_adc_set_normal_1st_conv_ns1(ADC0, ADC_NC_RANK_14);//设置通道,PB0对应14通道
        md_adc_set_smpt1_cht(ADC0, ADC_SAMPLETIME_4);//设置采样时间
       
        /* Enable ADC0 and start normal convert */
        md_adc_converter_enable_adcen(ADC0);//使能ADC
       
       
        while (1)
        {
        md_adc_set_normal_channel_conv_start_ichtrg(ADC0);//启动转换
       
        /* Wait convert finish */
        while (md_adc_get_stat_nche(ADC0) == 0);//等待转换完成
       
        /* Read normal convert result */
        nm_value = md_adc_get_normal_channel_val(ADC0);        //获取转换结果
        adc_value=5.0/4096*nm_value;//转换为电压值
                printf("adc电压值:%.2fV\r\n\r\n",adc_value);//打印输出
                md_delay_1ms(1000);
                //send_str("usart0 test...");
        }
}

/**
  * @}
  */
/**
  * @}
  */

输出结果:




使用特权

评论回复

相关帖子

沙发
lsc201600| | 2020-1-8 09:11 | 只看该作者
   写的好,有时间申请个玩一玩。

使用特权

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

本版积分规则

68

主题

240

帖子

1

粉丝