STM32标准库ADC读取摇杆电压值

目录

前言:

一、ADC介绍

二、DMA介绍

 三、代码编写 ——不使用DMA进行数据转运

1.开启对应的时钟以及ADCCLK的配置

2.初始化输入引脚

3.ADC的基本配置

4.ADC校准

5.读取ADC转换数据

6.ADC部分全部代码

7、主函数代码及运行现象

现象:

四、代码编写——使用DMA配合ADC进行数据采集

1.开启对应的时钟:

2.初始化ADC采集引脚,并配置采样通道

 3.配置ADC结构体

4.ADC上电,并开启DMA至ADC的转运通道

 5.设置全局变量接收DMA转运的数据

 6.配置DMA,DMA上电

 7.ADC校准,并通过软件触发ADC

8.ADC+DMA所有代码

9.主函数编写

最终的效果

前言:

        填坑:在完成纯软件实现贪吃蛇后,CLION 基于Easyx的贪吃蛇小游戏(链表)CLION 基于EasyX的贪吃蛇小游戏,开始将代码移植到STM32上使用硬件实现贪吃蛇,项目分成两部分,一部分先介绍ADC读取摇杆值,第二部分再将贪吃蛇具体的落实到硬件上,现在先进行第一部分记录。

一、ADC介绍

        STM32上的ADC为12位ADC,且输入电压只能是0~3.3V,所以后期在给摇杆上电时要格外注意,摇杆上电压的5V一定要接3.3V,否则可能会损坏单片机。

        通过查看手册可知,STM32F103ZET6上有三个ADC,每个ADC有21个输入通道。

        这里我选用ADC3上的通道4和通道5即PF6,PF7进行摇杆X、Y两轴的模拟量读取。

         ADC框图如图所示:

二、DMA介绍

        DMA是数据转运的助手,通过DMA进行数据转运可以极大的节省软件资源,让系统通过硬件自动执行相应的操作。

        通过查看数据手册可知,STM32F103ZET6共有两个ADC可以使用,两者均挂载在AHB总线上。

 三、代码编写 ——不使用DMA进行数据转运

1.开启对应的时钟以及ADCCLK的配置

    //使用ADC3_IN4和ADC3_IN5,ADC时钟使用6分频,即12MHz
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOF,ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC3,ENABLE);
    RCC_ADCCLKConfig(RCC_PCLK2_Div6);

2.初始化输入引脚

注意:ADC的GPIO配置一定是模拟输入

    //初始化ADC输入引脚
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN ;
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_6|GPIO_Pin_7;
    GPIO_InitStructure.GPIO_Speed =GPIO_Speed_50MHz ;
    GPIO_Init (GPIOF ,&GPIO_InitStructure);

3.ADC的基本配置

        对结构体进行配置,并对ADC进行上电(ADC_CMD)

    ADC_InitTypeDef ADC_InitStructure;
    ADC_InitStructure.ADC_Mode=ADC_Mode_Independent;//单ADC模式
    ADC_InitStructure.ADC_DataAlign=ADC_DataAlign_Right;//数据右对齐
    ADC_InitStructure.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;//无外部触发源(使用软件触发)
    ADC_InitStructure.ADC_ContinuousConvMode=DISABLE;//单次转换模式
    ADC_InitStructure.ADC_ScanConvMode=DISABLE;//非扫描模式
    ADC_InitStructure.ADC_NbrOfChannel=1;//一个通道
    ADC_Init(ADC3,&ADC_InitStructure);

    ADC_Cmd(ADC3,ENABLE);

4.ADC校准

        先是复位校准,等待ADC复位校准完成后,开始进行ADC校准,通过函数描述以及手册即可得出ADC复位校准和ADC校准完成的标准为均为RESET。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值