STM32——ADC篇(基于stm32f103)

技术笔记!
一、ADC简介(了解)

1.1,什么是ADC

1.2,常见的ADC类型

1.3,并联比较型工作示意图

1.4,逐次逼近型工作示意图

1.5,ADC的特性参数

1.6,STM32各系列ADC的主要特性

二、ADC工作原理(掌握)

2.1,ADC框图简介

2.2,参考电压/模拟部分电压

2.3,输入通道

2.4,转换序列

2.5,触发源

2.6,转换时间

 

2.7,数据寄存器

2.8,中断

2.9,单次转换模式和连续转换模式

2.10,扫描模式

三、单通道ADC采集实验(熟悉)

3.1,实验简要(了解)

3.2,ADC寄存器介绍(了解)

3.3,单通道ADC采集实验配置步骤(掌握)

3.4,编程实战:单通道ADC采集实验(掌握)

mian.c

int main(void)
{
    uint16_t adcx;
    float temp;
    
    HAL_Init();                             /* 初始化HAL库 */
    sys_stm32_clock_init(RCC_PLL_MUL9);     /* 设置时钟, 72Mhz */
    delay_init(72);                         /* 延时初始化 */
    usart_init(115200);                     /* 串口初始化为115200 */
    led_init();                             /* 初始化LED */
    //lcd_init();                             /* 初始化LCD */
    adc_init();                             /* 初始化ADC */

    //lcd_show_string(30, 50, 200, 16, 16, "STM32", RED);
    //lcd_show_string(30, 70, 200, 16, 16, "ADC TEST", RED);
    //lcd_show_string(30, 90, 200, 16, 16, "ATOM@ALIENTEK", RED);
    //lcd_show_string(30, 110, 200, 16, 16, "ADC1_CH1_VAL:", BLUE);
    //lcd_show_string(30, 130, 200, 16, 16, "ADC1_CH1_VOL:0.000V", BLUE); /* 先在固定位置显示小数点 */

    while (1)
    {
        adcx = adc_get_result();
        //lcd_show_xnum(134, 110, adcx, 5, 16, 0, BLUE);  /* 显示ADCC采样后的原始值 */
        printf("原始值:%d\n",adcx);
 //void lcd_show_xnum(uint16_t x, uint16_t y, uint32_t num, uint8_t len, uint8_t size, uint8_t mode, uint16_t color)
        temp = (float)adcx * (3.3 / 4096);              /* 获取计算后的带小数的实际电压值,比如3.1111 */
        adcx = temp;                                    /* 赋值整数部分给adcx变量,因为adcx为u16整形 */
        //lcd_show_xnum(134, 130, adcx, 1, 16, 0, BLUE);  /* 显示电压值的整数部分,3.1111的话,这里就是显示3 */
        printf("电压值(整数):%d\n",adcx);
        temp -= adcx;                                   /* 把已经显示的整数部分去掉,留下小数部分,比如3.1111-3=0.1111 */
        temp *= 1000;                                   /* 小数部分乘以1000,例如:0.1111就转换为111.1,相当于保留三位小数。 */
        //lcd_show_xnum(150, 130, temp, 3, 16, 0X80, BLUE);/* 显示小数部分(前面转换为了整形显示),这里显示的就是111. */
        printf("电压值(小数):%d\n",(int)temp);
        LED0_TOGGLE();
        delay_ms(100);
    }
}

adc.c

ADC_HandleTypeDef g_adc_handle;     //句柄

/* ADC单通道 */
void adc_init(void)
{
    ADC_ChannelConfTypeDef adc_ch_conf;         //通道

    g_adc_handle.Instance = ADC1;               //基地址
    g_adc_handle.Init.DataAlign = ADC_DATAALIGN_RIGHT;      //数据对齐方式
    g_adc_handle.Init.ScanConvMode = ADC_SCAN_DISABLE;      //扫描模式
    g_adc_handle.Init.ContinuousConvMode = DISABLE;         //连续模式
    g_adc_handle.Init.NbrOfConversion = 1;                  //转换数量
    g_adc_handle.Init.DiscontinuousConvMode = DISABLE;      //间断模式
    g_adc_handle.Init.NbrOfDiscConversion = 0;              //间断数量
    g_adc_handle.Init.ExternalTrigConv = ADC_SOFTWARE_START;//外部触发源选择
    HAL_ADC_Init(&g_adc_handle);                //ADC初始化
    
    HAL_ADCEx_Calibration_Start(&g_adc_handle);  //ADC校验
    
    adc_ch_conf.Channel = AD
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值