STM32入门学习之ADC(STM32F030F4P6基于CooCox IDE)

发布者:dswecd最新更新时间:2018-07-10 来源: eefocus关键字:STM32  ADC  STM32F030F4P6  CooCox  IDE 手机看文章 扫描二维码
随时随地手机看文章


#include "stm32_lib/inc/stm32f0xx_rcc.h"

#include "stm32_lib/inc/stm32f0xx_adc.h"

#include "stm32_lib/inc/stm32f0xx_gpio.h"

 

int main(void)

{

//时钟配置

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);

 

//ADC IO配置,此处定义PA0口为ADC端口

GPIO_InitTypeDef PORT_ADC;

PORT_ADC.GPIO_Pin=GPIO_Pin_0;

PORT_ADC.GPIO_Mode=GPIO_Mode_AN;

PORT_ADC.GPIO_PuPd=GPIO_PuPd_NOPULL;

GPIO_Init(GPIOA,&PORT_ADC);

 

//ADC 参数配置

ADC_InitTypeDef ADC_InitStuctrue;

ADC_InitStuctrue.ADC_Resolution=ADC_Resolution_12b;//12位精度

ADC_InitStuctrue.ADC_ContinuousConvMode=DISABLE;//单次ADC

ADC_InitStuctrue.ADC_ExternalTrigConvEdge=ADC_ExternalTrigConvEdge_None;

ADC_InitStuctrue.ADC_DataAlign=ADC_DataAlign_Right;//数据右对齐

ADC_InitStuctrue.ADC_ScanDirection=ADC_ScanDirection_Backward;//数据覆盖

ADC_Init(ADC1,&ADC_InitStuctrue);

 

//配置ADC采样的通道和采样周期

//PA0对应ADC通道0

//注意,采集的数据是否准确与采样时间有关系

ADC_ChannelConfig(ADC1,ADC_Channel_0,ADC_SampleTime_239_5Cycles);

//如果采集系统内部温度,则通道为16,同时要使能温度传感器

//ADC_ChannelConfig(ADC1,ADC_Channel_16,ADC_SampleTime_239_5Cycles);

//ADC_TempSensorCmd(ENABLE);

 

//校准

ADC_GetCalibrationFactor(ADC1);

//使能

ADC_Cmd(ADC1,ENABLE);

//等待ADC准备

while(ADC_GetFlagStatus(ADC1,ADC_FLAG_ADEN)==RESET);

//软件启动ADC转换

ADC_StartOfConversion(ADC1);

//等待ADC完成

while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);

//所得数据即为ADC数据

unsigned short adc_data=ADC_GetConversionValue(ADC1);

 

/*

//如果采集的是16通道,即芯片温度,则温度的值如下

//下面这段代价,参考STM32F030数据手册(寄存器版)A.7.16

//出厂校准数据所存储的地址,30°C和110°C的ADC值

#define TEMP110_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7C2))

#define TEMP30_CAL_ADDR ((uint16_t*) ((uint32_t) 0x1FFFF7B8))

#define VDD_CALIB ((uint16_t) (330))

#define VDD_APPLI ((uint16_t) (300))

int32_t temperature;

temperature = (((int32_t) ADC1->DR * VDD_APPLI / VDD_CALIB)- (int32_t) *TEMP30_CAL_ADDR );

temperature = temperature * (int32_t)(110 - 30);

temperature = temperature / (int32_t)(*TEMP110_CAL_ADDR- *TEMP30_CAL_ADDR);

temperature = temperature + 30;

*/

while(1)

{

}

}


关键字:STM32  ADC  STM32F030F4P6  CooCox  IDE 引用地址:STM32入门学习之ADC(STM32F030F4P6基于CooCox IDE)

上一篇:[CortexM0--stm32f0308]关于GPIO
下一篇:STM32F030系列实现仿位带操作

推荐阅读最新更新时间:2024-03-16 16:08

STM32与DS1302设计时钟芯片,超详细
DS1302 是DALLAS 公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31 字节静态RAM ,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、周、月、年的信息,每月的天数和闰年的天数可自动调整。时钟操作可通过AM/PM 指示决定采用24 或12 小时格式。DS1302 与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RES 复位(2)I/O 数据线(3)SCLK串行时钟。时钟/RAM 的读/写数据以一个字节或多达31 个字节的字符组方式通信。DS1302 工作时功耗很低保持数据和时钟信息时功率小于1mW DS1302 是由DS1202 改进而来增加了以下的特性:双电源
[单片机]
<font color='red'>STM32</font>与DS1302设计时钟芯片,超详细
使用STM32的USB模块中后对USB缓冲区的认识
最近在使用STM32的USB模块开发个项目,还以为挺简单,结果搞了快两天才把USB的包缓冲区的访问搞定,在此做个小总结吧。 STM32的USB模块包缓冲区有512B,但是在STM32的参考手册中的存储器映像中却表明0x40006000-0x400063ff,整整多了512B,怎么会这样呢,同时在尝试着编程时也遇到了一个问题: 在usb_core.c文件的Setup0_Process(void)这个函数中,有这么一段: uint16_t offset = 1; if (pInformation- ControlState != PAUSE) { pInformation- USBbmRequestType = *
[单片机]
STM32-通用定时器基本定时功能
1. STM32的Timer简介 STM32中一共有11个定时器,其中2个高级控制定时器,4个普通定时器和2个基本定时器,以及2个看门狗定时器和1个系统嘀嗒定时器。其中系统嘀嗒定时器是前文中所描述的SysTick,看门狗定时器以后再详细研究。今天主要是研究剩下的8个定时器。 其中TIM1和TIM8是能够产生3对PWM互补输出的高级登时其,常用于三相电机的驱动,时钟由APB2的输出产生。TIM2-TIM5是普通定时器,TIM6和TIM7是基本定时器,其时钟由APB1输出产生。由于STM32的TIMER功能太复杂了,所以只能一点一点的学习。因此今天就从最简单的开始学习起,也就是TIM2-TIM5普通定时器的定时功能。
[单片机]
STM32-通用定时器基本定时功能
STM32如何设置定时器
STM32如何设置定时器 下面以stm32的TIM2作为实例一步步配置成为定时器: 第一种 对定时器的基本配置 TIM_TimeBaseStructure.TIM_Period = 1000; //设置自动装载寄存器 TIM_TimeBaseStructure.TIM_Prescaler = 35999; //分频计数 TIM_TimeBaseStructure.TIM_ClockDivision = 0; TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //选择向上计数 TIM_TimeBaseInit(TIM2, &TIM_TimeBase
[单片机]
STM32 ESP8266和Java服务器透传模式下的双向通信
标注:注意大家一般的得到的STM32程序中的延迟函数delay_ms()中的入口参数值是有限制的,他最大值只能是1864,我之前不知道,程序中一直错误地使用它,所以导致延时不准确。 //延时nms //注意nms的范围 //SysTick- LOAD为24位寄存器,所以,最大延时为: //nms =0xffffff*8*1000/SYSCLK //SYSCLK单位为Hz,nms单位为ms //对72M条件下,nms =1864 void delay_ms(u16 nms) { u32 temp; SysTick- LOAD=(u32)nms*fac_ms; //时间加载(SysTick- LOAD为24bi
[单片机]
<font color='red'>STM32</font> ESP8266和Java服务器透传模式下的双向通信
STM32的时钟树解析
STM32的时钟树 对于广大初次接触STM32的读者朋友(甚至是初次接触ARM器件的读者朋友)来说,在熟悉了开发环境的使用之后,往往 栽倒 在同一个问题上。这问题有个关键字叫:时钟树。 众所周知,微控制器(处理器)的运行必须要依赖周期性的时钟脉冲来驱动 往往由一个外部晶体振荡器提供时钟输入为始,最终转换为多个外部设备的周期性运作为末,这种时钟 能量 扩散流动的路径,犹如大树的养分通过主干流向各个分支,因此常称之为 时钟树 。在一些传统的低端8位单片机诸如51,AVR,PIC等单片机,其也具备自身的一个时钟树系统,但其中的绝大部分是不受用户控制的,亦即在单片机上电后,时钟树就固定在某种不可更改的状态(假设单片机处于
[单片机]
<font color='red'>STM32</font>的时钟树解析
STM32之TIM3_PWM程序
简介:STM32之TIM3_PWM程序详解:调整CCR2_Val的值来改变占空比,逐步的控制LED1的亮度, 占空比大过一定值时,亮度的变化就不明显了,所以CCR2_VAL最大设定到17000。 原理图: 程序分析: int main(void) { unsigned char a=0; TIM_OCInitTypeDef TIM3_OCInitStructure; RCC_Configuration(); time_ini(); SysTick_Config(72000); //配置SYSTICK时钟节拍为1ms一次 while(1){ Delay(1);//延时1ms TIM3
[单片机]
<font color='red'>STM32</font>之TIM3_PWM程序
凌力尔特推出低功率 16 位 1Msps 串行 SAR ADC
      凌力尔特公司 (Linear Technology Corporation) 推出一款易用、低功率 16 位 1Msps 串行 SAR ADC LTC2383-16,该器件在 -40ºC 至 125ºC 的温度范围内提供保证的性能规格。LTC2383-16 在 2.5V 单电源时仅消耗 13mW 功率,在 ±2.5V 的全差分输入范围内实现了令人赞叹的 92dB SNR 和 -106dB THD,同时保持最大值为 ±2LSB  INL 且无漏码。LTC2383-16 采用小型 3mm x 4mm DFN 和 MSOP-16 封装,非常适用于需要低功率和空间受限型的应用,包括那些每个电路板上采用多个 ADC 的应用。
[电源管理]
凌力尔特推出低功率 16 位 1Msps 串行 SAR <font color='red'>ADC</font>
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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