STM32之ADC模数转换

发布者:甜美瞬间最新更新时间:2021-05-27 来源: eefocus关键字:STM32  ADC  模数转换 手机看文章 扫描二维码
随时随地手机看文章

简介:ADC通常要与DMA一起使用 这里只是简单的用库配置ADC 不断扫描来实现ADC的应用。

首先配置GPIO与ADC的时钟:


ADC_InitTypeDefADC_InitStructure;


GPIO_InitTypeDef GPIO_InitStructure;


RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);


RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);


GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//来自:S_T_M8._CN


GPIO_InitStructure.GPIO_Mode =GPIO_Mode_AIN;


GPIO_Init(GPIOB,&GPIO_InitStructure);//默认速度为两兆


配置ADC的运行:


ADC_InitStructure.ADC_Mode = ADC_Mode_Independent;//独立模式


ADC_InitStructure.ADC_ScanConvMode =DISABLE; //连续多通道模式


ADC_InitStructure.ADC_ContinuousConvMode =ENABLE; //连续转换


ADC_InitStructure.ADC_ExternalTrigConv= ADC_ExternalTrigConv_None;//转换不受外界决定


ADC_InitStructure.ADC_DataAlign =ADC_DataAlign_Right; //右对齐


ADC_InitStructure.ADC_NbrOfChannel =1; //扫描通道数


ADC_Init(ADC1,&ADC_InitStructure);


ADC_RegularChannelConfig(ADC1,ADC_Channel_9, 1,ADC_SampleTime_1Cycles5);//通道X,采样时间为1.5周期,1代表规则通道第1个这个1是啥意思我不太清楚只有是1的时候我的ADC才正常。


ADC_Cmd(ADC1,ENABLE); //使能或者失能指定的ADC


ADC_SoftwareStartConvCmd(ADC1,ENABLE);//使能或者失能指定的ADC的软件转换启动功能


这里我用的是ADC1的9通道 PB1引脚。


也用一些默认的配置函数同GPIO 的一样例如: ADC_StructInit


ADC_InitTypeDef structureADC_InitTypeDef定义于文件“stm32f10x_adc.h”:


typedef struct


{


u32 ADC_Mode; FunctionalState ADC_ScanConvMode; FunctionalStateADC_ContinuousConvMode; u32 ADC_ExternalTrigConv; u32ADC_DataAlign; u8 ADC_NbrOfChannel;


} ADC_InitTypeDef


注意:为了能够正确地配置每一个ADC通道,用户在调用ADC_Init()之后,必须调用ADC_ChannelConfig()来配置每个所使用通道的转换次序和采样时间。


然后就是不停的读;


u16 TestAdc(void)


{


u16 adc;


while(ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)==RESET);//检查制定ADC标志位置1与否 ADC_FLAG_EOC 转换结束标志位


adc=ADC_GetConversionValue(ADC1);


returnadc;//返回最近一次ADCx规则组的转换结果


}


这个程序的8位单片机风格很重,真正的ADC一定要放在DMA或是中断之中。


关键字:STM32  ADC  模数转换 引用地址:STM32之ADC模数转换

上一篇:STM32 ADC采样配置
下一篇:这8种STM32中GPIO工作模式,你都知道吗?

推荐阅读最新更新时间:2024-11-10 07:39

1.9.10_ADC和触摸屏_较准与画线编程_P
上一节得到了触摸屏和LCD坐标关于x轴和y轴的转换公式,其中主要是获取两个长度比例Kx和Ky,以及中心点E的坐标,这节编程实现按下触摸屏,在对应的LCD上画点画线的功能。 Kx = (s1 + s2) / (s1’ + s2’) Ky = (d1 + d2) / (d1’ + d2’) 写程序: 在A点显示 + (fb_disp_cross(int x, int y, int color)); 用户点击 + ; 记录触摸屏坐标(ts_read_raw()); 在BCDE上循环1-3步(显示,点击,读取); 根据获得的数据确定公式(ts_calibrate()); 以后得到TS触点时,转换出LCD坐标(ts_read());
[单片机]
1.9.10_<font color='red'>ADC</font>和触摸屏_较准与画线编程_P
STM32(Cortex-M3)中优先级的概念
STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断
[单片机]
STM32入门开发: 制作红外线遥控器(智能居家-万能遥控器)
一、环境介绍 MCU: STM32F103ZET6 编程软件环境: keil5 红外线传输协议: NEC协议---38KHZ载波:。NEC协议是红外遥控协议中常见的一种。 编码发送思路: 延时函数模拟38KHZ + PWM产生38KHZ两种方式 代码风格: 模块化编程,寄存器直接操作方式 完整keil工程源码下载(解压即可编译运行测试): https://download.csdn.net/download/xiaolong1126626497/19863305 二、NEC协议与相关硬件介绍 2.1 NEC协议介绍 NEC协议在上篇 STM32入门开发: NEC红外线协议解码(超低成本无线传输方案)
[单片机]
<font color='red'>STM32</font>入门开发: 制作红外线遥控器(智能居家-万能遥控器)
stm32 HardFault_Handler调试及问题查找方法
stm32 HardFault_Handler调试及问题查找方法 STM32出现HardFault_Handler故障的原因主要有两个方面: 1、内存溢出或者访问越界。这个需要自己写程序的时候规范代码,遇到了需要慢慢排查。 2、堆栈溢出。增加堆栈的大小。 出现问题时排查的方法: 发生异常之后可首先查看LR寄存器中的值,确定当前使用堆栈为MSP或PSP,然后找到相应堆栈的指针,并在内存中查看相应堆栈里的内容。由于异常发生时,内核将R0~R3、R12、Returnaddress、PSR、LR寄存器依次入栈,其中Return address即为发生异常前PC将要执行的下一条指令地址。 在stm32f4xx_it.c中,添加软件断点,一
[单片机]
<font color='red'>stm32</font> HardFault_Handler调试及问题查找方法
STM32小白入门(第六天)-------串口通信
今天要讲的是串口通信,个人觉得挺重要的,以后USART、蓝牙通信,485等等都要用到串口,面试官也喜欢问一些串口的问题,比如问你串口参数,数据位几位,波特率多少,还会问你怎样设置串口等等。 一、串口概述 1. 定义 串口通信是一种设备间非常常用的串行,以比特位的形式发送或接收数据,电子工程师经常使用这种方式来调试数据。 2. 开发板硬件用于串口跟PC相连的时候有以下注意事项: A. 使用到usb转串口,所以得安装驱动 B. 跳线帽要进行短接 二、程序设计 1、设置引脚功能复用 RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE)
[单片机]
<font color='red'>STM32</font>小白入门(第六天)-------串口通信
STM32 IO模拟实现软件串口
最近项目中STM32的串口资源紧张,于是使用IO口进行模拟串口,现进行整理记录。 实现思路 IO口模拟串口的思路也比较简单,一切按照串口协议进行操作即可。 对于发送,计算好不同波特率对应的延时时间进行数据发送。 对于接收,稍微复杂。通过外部中断检测接收管脚的下降沿,检测到起始信号后开启定时器,定时器按照波特率设定好时间,每隔一段时间进入定时器中断接收数据,完成一个字节后关闭定时器。 测试Demo说明 TXD : PC13 RXD : PB14 波特率:9600 ,1-8-N Demo功能 接收11个数据,然后把接收到的数据发送出去。 程序实现 #define OI_TXD PCout(13) #define
[单片机]
ARM-Linux驱动--ADC驱动(中断方式)
硬件平台:FL2440 内核版本:2.6.28 主机平台:Ubuntu 11.04 内核版本:2.6.39 原创作品,转载请标明出处:http://blog.csdn.net/yming0221/archive/2011/06/26/6568937.aspx 这个驱动写了好久,因为原来的Linux内核编译的时候将触摸屏驱动编译进内核了,而触摸屏驱动里的ADC中断在注册的时候类型选择的是 IRQF_SAMPLE_RANDOM,不是共享类型,所以,自己写的ADC驱动在每次open的时候,总提示ADC中断注册失败。 解决方案: 重新配置内核,选择触摸屏驱动以模块的形式编译,而不是直接编译进内核,这样Linux在启
[单片机]
ARM-Linux驱动--<font color='red'>ADC</font>驱动(中断方式)
stm32 pwm的原理及主要参数的意义
pwm的原理如图 ARR:最值,定时器最值 CCRx:PWM的比较值 CNT:为计数器值 原理就是,CCRx的值和CNT比较大小,通过判断结果来决定输出是高电平还是低电平。 将代码定位到TIM_OC_InitTypeDef类中,然后看注释 uint32_t Pulse; /*! Specifies the pulse value to be loaded into the Capture Compare Register. This parameter can be a number between Min_Data = 0x0000 and Max_Data = 0xFFFF */
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved