STM32 串口打印ADC采集电压

发布者:zhihua最新更新时间:2017-10-27 来源: eefocus关键字:STM32  串口打印  ADC  采集电压 手机看文章 扫描二维码
随时随地手机看文章

ADC是单片机也是STM32在工控上常用功能之一,用来采集电压,温度等作为指标提供给其他部分进行对应的操作,使用32的固件库进行配置相当方便。

这里利用串口打印的方式观察采集到的电压。

#include "adc.h" 

 void adc_init() 

 GPIO_InitTypeDef GPIO_InitStructure; 

 ADC_InitTypeDef ADC_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE); RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_1;//ADC GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; // GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; 

GPIO_Init(GPIOA,&GPIO_InitStructure); 

ADC_InitStructure.ADC_Mode =ADC_Mode_Independent;//独立工作 ADC_InitStructure.ADC_ScanConvMode = DISABLE; //单次扫描 ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; //单次转换 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_1, 1,ADC_SampleTime_7Cycles5);//通道规则组设置

ADC_Cmd(ADC1,ENABLE);

ADC_ResetCalibration(ADC1);//ADC寄存器重置

while(ADC_GetResetCalibrationStatus(ADC1));//获取重置状态

ADC_StartCalibration(ADC1);//开启指定校准寄存器

while(ADC_GetCalibrationStatus(ADC1));//获取校准

  ADC_SoftwareStartConvCmd(ADC1, ENABLE);//开启软件启动

 }

#include "printf.h"

int fputc(int ch,FILE *p)  //

{

USART_SendData(USART1,(u8)ch);

while(USART_GetFlagStatus(USART1,USART_FLAG_TXE)==RESET);

return ch;

}

void printf_init()

{

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE); 

RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);  

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_9;  

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;   

GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;   

GPIO_Init(GPIOA,&GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin=GPIO_Pin_10;  

GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IN_FLOATING;

GPIO_Init(GPIOA,&GPIO_InitStructure); 

USART_InitStructure.USART_BaudRate = 9600;

USART_InitStructure.USART_WordLength = USART_WordLength_8b;

USART_InitStructure.USART_StopBits = USART_StopBits_1;

USART_InitStructure.USART_Parity = USART_Parity_No;

USART_InitStructure.USART_HardwareFlowControl =USART_HardwareFlowControl_None;

USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;

// USART_InitStructure.USART_Clock = USART_Clock_Disable; 

// USART_InitStructure.USART_CPOL = USART_CPOL_High;

// USART_InitStructure.USART_CPHA = USART_CPHA_1Edge;

// USART_InitStructure.USART_LastBit = USART_LastBit_Enable;

USART_Init(USART1, &USART_InitStructure);

USART_Cmd(USART1, ENABLE);

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);

USART_ClearFlag(USART1,USART_FLAG_TC);

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; 

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

NVIC_Init(&NVIC_InitStructure);

}


int main()

{

u8 i = 0;

float ad = 0;

printf_init();

adc_init();

while(1){

for(i = 0;i < 10;i++){

ADC_SoftwareStartConvCmd(ADC1, ENABLE);

while(!ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC));//转换结束标志

ad=ad+ADC_GetConversionValue(ADC1);//累加转换结果

}

ad /= 10;

printf("ad : %.3f V\r\n",ad*3.3/4096);

delay_ms(1000);

delay_ms(1000);

}

}

STM32 <wbr>串口打印ADC采集电压


关键字:STM32  串口打印  ADC  采集电压 引用地址:STM32 串口打印ADC采集电压

上一篇:STM32C8T6控制步进电机
下一篇:STM32F103 PWM配置

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

如何设计在stm32中的复位电路?
说到复位,我们都不会陌生,系统基本都有一个复位按键。复位的种类有很多:上电复位、掉电复位、复位引脚复位、看门狗复位、软件复位等。本文探讨的就是在stm32中复位电路如何设计。 STM32介绍 STM32系列基于专为要求高性能、低成本、低功耗的嵌入式应用专门设计的ARMCortex®-M0,M0+,M3, M4和M7内核在STM32F105和STM32F107互连型系列微控制器之前,意法半导体已经推出STM32基本型系列、增强型系列、USB基本型系列、互补型系列;新系列产品沿用增强型系列的72MHz处理频率。内存包括64KB到256KB闪存和 20KB到64KB嵌入式SRAM。 新系列采用LQFP64、LQFP100和LFBGA
[单片机]
如何设计在<font color='red'>stm32</font>中的复位电路?
详解STM32启动文件
本文对STM32启动文件startup_stm32f10x_hd.s的代码进行讲解,此文件的代码在任何一个STM32F10x工程中都可以找到。可以点击文末阅读原文直接下载此文件,提取码stm3。 启动文件使用的ARM汇编指令汇总 Stack——栈 Stack_Size EQU 0x00000400 AREA STACK, NOINIT, READWRITE, ALIGN= Stack_Mem SPACE Stack_Size __initial_sp 开辟栈的大小为 0X00000400(1KB),名字为 STACK, NOINIT 即不初始化,可读可写, 8(2^3)字节对齐。 栈的作用是用于局部变量,函数调用,函数形
[单片机]
stm32专题十六:IIC(一)硬件结构框图
STM32的I2C特性及架构: 1 硬件实现协议: 由STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理I2C协议的方式减轻了CPU的工作,且使软件设计更加简单。 stm32的硬件IIC,在某些情况下会出现错误,但也没有必要去纠结这个问题。 2 软件模拟协议:使用CPU直接控制通讯引脚的电平,产生出符合通讯协议标准的逻辑。 STM32的I2C外设可用作通讯的主机及从机,支持100Kbit/s和400Kbit/s的速率,支持7位、10
[单片机]
<font color='red'>stm32</font>专题十六:IIC(一)硬件结构框图
stm32 SysTick系统定时器
它是一个24位向下递减的定时器,每计数一次所需时间为1/SYSTICK,SYSTICK是系统定时器时钟,它可以直接取自系统时钟,还可以通过系统时钟8分频后获取 当定时器计数到0时,将从LOAD 寄存器中自动重装定时器初值,重新向下递减计数 如果开启SysTick中断的话,当定时器计数到0,将产生一个中断信号 void SysTick_Init(u8 SYSCLK) { SysTick_CLKSourceConfig(SysTick_CLKSource_HCLK_Div8); fac_us=SYSCLK/8; //1us次数 fac_ms=(u16)fac_us*1000; //1ms次
[单片机]
<font color='red'>stm32</font> SysTick系统定时器
采用STM32的心电采集系统电路设计
  心血管类疾病已经成为威胁人类身体健康的重要疾病之一,而清晰有效的心电图为诊断这类疾病提供了依据,心电采集电路是心电采集仪的 关键部分,心电信号属于微弱信号,其频率范围在0.03~100 Hz之间,幅度在0~5 mV之间,同时心电信号还掺杂有大量的干扰信号,因此,设计良好的滤波电路和选择合适的控制器是得到有效心电信号的关键。基于此,本文设计了以STM32 为控制核心,AD620和OP07为模拟前端的心电采集仪,本设计简单实用,噪声干扰得到了有效抑制。    主控模块电路设计   主控模块的STM32F103VET单片机是控制器的核心,该单片机是ST意法半导体公司生产的32位高性能、低成本和低功耗的增强型单片机,其内核采用 AR
[电源管理]
采用<font color='red'>STM32</font>的心电<font color='red'>采集</font>系统电路设计
开关电源会降低ADC的性能吗?
工程师一般认为 开关电源 会降低 ADC 的性能,因此通常愿意选用低压差(LDO)线性稳压器,而不使用开关稳压器,但这种认识并非完全正确。LDO具有较低的纹波和噪声指标,但最近的研究表明,高效的开关稳压器也可用于一些转换器设计中,前提是设计师对电路拓扑有很好的理解,运用一些实用技巧,同时采取一些必要的防范措施。   首先是选择转换器,然后选择正确的开关稳压器,并不是任何开关稳压器都可以使用。从数据手册上查阅开关稳压器的噪声和纹波指标,以及开关频率。典型的开关稳压器在100kHz带宽范围内大概有10μV rms的噪声。假设它们都是白噪声,那么有关频带内的噪声密度相当于31.6 nVrms/rt-Hz。   其次,要查阅转换器的电源抑
[电源管理]
STM32进入HardFault_Handler的调试方法
在编写STM32程序代码时由于自己的粗心会发现有时候程序跑着跑着就进入了 HardFault_Handler中断,按照经验来说进入HardFault_Handler故障的原因主要有两个方面: 1:内存溢出或则访问越界。 2:堆栈溢出。 发生异常后我们可以首先查看LR寄存器的值,确认当前使用的堆栈是MSP还是PSP,然后找到相对应的堆栈指针,并在内存中查看相对应堆栈的内容,内核将R0~R3,R12,LR,PC,XPRS寄存器依次入栈,其中LR即为发生异常前PC将要执行的下一条指令地址。那么Cortex-M3 内核HardFault错误调试定位方法有: 方法1 如何精确定位出问题代码的所在位置: 以访问越界为例:(对STM32F1
[单片机]
<font color='red'>STM32</font>进入HardFault_Handler的调试方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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