嵌入式铁头山羊stm32-ADC实现定时器触发的注入序列的单通道转换-Day26

目录

一、实验目的

二、电路连接

三、实验执行

1.初始化串口

2.配置定时器1的TRGO

[3.注入序列的编程接口 以及初始化ADC的(注入序列)](#3.注入序列的编程接口 以及初始化ADC的(注入序列))

(1)首先是注入序列的编程接口的介绍:

(2)ADC的初始化(五步)

[5 读取并发送测量结果](#5 读取并发送测量结果)

VOFA的使用

四、代码


一、实验目的

使用ADC实现:根据光敏传感器的光照强弱去得到不同的输入电压对应的量化结果码,既而根据得到的量化值*分辨率得到不同的电压 然后使用定时器实现每ms 就使用USART发送一个电压值,最后使用 软件去读取一个个周期下的测量结果并连接成曲线,而这个电压值的曲线也表示了光照的变化幅度(因为日光灯照度一般10lux,其对应的AO输出电压为1.5V,所以以1.5V为边界实现板载灯的亮灭)。

二、电路连接

三、实验执行

1.初始化串口

2.配置定时器1的TRGO

3.注入序列的编程接口 以及初始化ADC的(注入序列)

(1)首先是注入序列的编程接口的介绍:

注入序列里面的:


第一个编程接口是设置注入序列的长度,总共是四个

第二个编程接口是配置注入序列的通道,包括通道序号和采样时间


之后的都和前面的常规序列相似

(2)ADC的初始化(五步)

4.1.初始化IO引脚

4.2.配置时钟

4.3.配置ADC的基本参数

4.4.配置注入序列

4.5.闭合总开关

5 读取并发送测量结果

VOFA的使用

数据格式/数据引擎这里可以选择FileWater或者其他,看介绍就行

四、代码

复制代码
#include "stm32f10x.h"
#include "Delay.h"
#include "usart.h"
void App_USART_Init(void);
void App_TIM_Init(void);

void App_ADC_Init(void);


int main(void)
{
	
	
	//使用ADC实现定时器触发的单通道转换  并在VOFA实现电压信号的波形图
	//首先初始化USART
	//之后初始化定时器的  TGO 去发生每ms的固定的时钟信号
	//ADC初始化五大步
	//其中注意输入电压的内阻已经得到,并且因此得到的采样时间是10.24cycle
	
	
	App_USART_Init();
	App_TIM_Init();
	App_ADC_Init();
	
	//先清零EOC
	ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
	
	while(1)
	{
			
		//当EOC为1的时候,输出电压
		while(ADC_GetFlagStatus(ADC1,ADC_FLAG_EOC)==RESET);
		//清零EOC,下次循环用
		ADC_ClearFlag(ADC1,ADC_FLAG_EOC);
		
		uint16_t res=ADC_GetInjectedConversionValue(ADC1,ADC_InjectedChannel_1);
		
		float volt=res*(3.3f/4095);
		
		My_USART_Printf(USART1,"%.3f\n",volt);
		
		
		
	}
}


void App_TIM_Init(){


		//初始化定时器
	//开启时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	
	//初始化TIM
	TIM_TimeBaseInitTypeDef TIM_InitStruct={0};
	TIM_InitStruct.TIM_CounterMode=TIM_CounterMode_Up;
	TIM_InitStruct.TIM_Period=999;
	TIM_InitStruct.TIM_Prescaler=71;
	TIM_InitStruct.TIM_RepetitionCounter=0;

	TIM_TimeBaseInit(TIM1,&TIM_InitStruct);
	
	TIM_ARRPreloadConfig(TIM1,ENABLE);
	//开启从模式控制器的Update模式
	
	
	TIM_SelectOutputTrigger(TIM1,TIM_TRGOSource_Update);
	
	TIM_Cmd(TIM1,ENABLE);
	
	
}





void App_USART_Init(){

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	USART_InitTypeDef USART_InitStruct={0};
	USART_InitStruct.USART_BaudRate=115200;
	USART_InitStruct.USART_Mode=USART_Mode_Tx;
	USART_InitStruct.USART_Parity=USART_Parity_No;
	USART_InitStruct.USART_StopBits=USART_StopBits_1;
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;
	
	
	
	USART_Init(USART1,&USART_InitStruct);
	



}




void App_ADC_Init(){


	//首先就是初始化ADC的IO
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef  GPIO_InitStruct={0};
	GPIO_InitStruct.GPIO_Pin=GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Speed=GPIO_Speed_2MHz;
	GPIO_InitStruct.GPIO_Mode=GPIO_Mode_AIN;
	
	
	
	
	GPIO_Init(GPIOA,&GPIO_InitStruct);

	//初始化后开启时钟
	RCC_ADCCLKConfig(RCC_PCLK2_Div6);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1,ENABLE);
	
	
	
	//初始化ADC
	ADC_InitTypeDef ADC_InitStruct={0};
	ADC_InitStruct.ADC_ContinuousConvMode=DISABLE;
	ADC_InitStruct.ADC_DataAlign=ADC_DataAlign_Right;
	ADC_InitStruct.ADC_ExternalTrigConv=ADC_ExternalTrigConv_None;
	ADC_InitStruct.ADC_Mode=ADC_Mode_Independent;
	ADC_InitStruct.ADC_NbrOfChannel=1;
	ADC_InitStruct.ADC_ScanConvMode=DISABLE;
	
	
	
	ADC_Init(ADC1,&ADC_InitStruct);
	
	
	//配置注入序列(注意比常规的要多配置两个)
	ADC_InjectedSequencerLengthConfig(ADC1,1);
	ADC_ExternalTrigInjectedConvConfig(ADC1,ADC_ExternalTrigInjecConv_T1_TRGO);
	ADC_InjectedChannelConfig(ADC1,ADC_Channel_0,1,ADC_SampleTime_13Cycles5);
	ADC_ExternalTrigConvCmd(ADC1,ENABLE);
	
	//开启总开关
	ADC_Cmd(ADC1,ENABLE);

}
相关推荐
专注VB编程开发20年4 小时前
CSS 的命名方式像是 PowerShell 的动词-名词结构,缺乏面向对象的层级关系
开发语言·后端·rust
野犬寒鸦4 小时前
力扣hot100:相交链表与反转链表详细思路讲解(160,206)
java·数据结构·后端·算法·leetcode
阿昭L4 小时前
leetcode两数之和
算法·leetcode
周树皮不皮4 小时前
【Leetcode100】算法模板之二叉树
算法
无名客04 小时前
sentinel限流常见的几种算法以及优缺点
算法·sentinel·限流
GalaxyPokemon4 小时前
LeetCode - 1089. 复写零
数据结构
计算机毕业设计木哥4 小时前
计算机毕设选题:基于Python+Django的B站数据分析系统的设计与实现【源码+文档+调试】
java·开发语言·后端·python·spark·django·课程设计
失散134 小时前
分布式专题——1.2 Redis7核心数据结构
java·数据结构·redis·分布式·架构
陈陈爱java4 小时前
Spring八股文
开发语言·javascript·数据库