ADC-定时器触发

定时器触发:通过定时器产生外部触发信号的方式叫做定时器触发

试验:光敏传感器的模拟输出接到PA0引脚上,PA0对应的是单片机ADC的通道0,把通道0写入到注入序列第一行,外部触发信号选择TIM1_TRGO,通过定时器1的TRGO产生脉冲启动注入序列,注入序列第一行被执行完,通道0的转换结果被保存到JDR1寄存器,把JDR1寄存器里存储的结果读出来。

1.连接电路

2.初始化串口

3.配置定时器1的TRGO

4.注入序列的编程接口

5.初始化ADC(注入序列)

6.读取并发送测量结果

cs 复制代码
	while(1)
	{
		//1.等待注入序列转换完成
		while(ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC)== RESET);
		
		//2.读取转换的结果
		uint16_t jdrl = ADC_GetInjectedConversionValue (ADC1, ADC_InjectedChannel_1);
		
		//3.清除JEoc标志位
		ADC_ClearFlag (ADC1, ADC_FLAG_JEOC) ;
		
		//4.把结果转换成电压
		float voltage = jdrl * (3.3f / 4095);
		
		//#5.通过串口把结果发送出发去
		My_USART_Printf (USART1, "%.3f\n", voltage);
	}

总代码:

cs 复制代码
#include "stm32f10x.h"
#include "usart.h"

void App_USART1_Init(void);
void App_TIM1_Init(void);
void App_ADC_Init(void);

int main(void)
{
	App_USART1_Init();
	App_TIM1_Init();
	App_ADC_Init();
	
//	My_USART_SendString(USART1, "Hello world. \r\n");

	
	while(1)
	{
		//1.等待注入序列转换完成
		while(ADC_GetFlagStatus(ADC1, ADC_FLAG_JEOC)== RESET);
		
		//2.读取转换的结果
		uint16_t jdrl = ADC_GetInjectedConversionValue (ADC1, ADC_InjectedChannel_1);
		
		//3.清除JEoc标志位
		ADC_ClearFlag (ADC1, ADC_FLAG_JEOC) ;
		
		//4.把结果转换成电压
		float voltage = jdrl * (3.3f / 4095);
		
		//#5.通过串口把结果发送出发去
		My_USART_Printf (USART1, "%.3f\n", voltage);
	}
}

void App_USART1_Init(void)
{
	//#1.初始化I0引脚,A9
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	//#2.开启USART1的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	
	//#3.配置串口的参数
	USART_InitTypeDef USART_InitStruct = {0};

	USART_InitStruct.USART_BaudRate = 115200;
	USART_InitStruct.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	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);
	
	//#4.闭合串口的总开关
	USART_Cmd(USART1, ENABLE);
}

void App_TIM1_Init(void)
{
	//#1.使能TIM1的时钟
	RCC_APB2PeriphClockCmd (RCC_APB2Periph_TIM1,ENABLE);
	//#2.配置TIM1的时基单元
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct = {0};
	TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up;
	TIM_TimeBaseInitStruct.TIM_Period = 999;
	TIM_TimeBaseInitStruct.TIM_Prescaler = 71;
	TIM_TimeBaseInitStruct.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit (TIM1, &TIM_TimeBaseInitStruct);
	
	// #3. TRGO:Update
	TIM_SelectOutputTrigger (TIM1,TIM_TRGOSource_Update);
	
	//#4.开启定时器1的总开关
	TIM_Cmd(TIM1, ENABLE);
}

void App_ADC_Init(void)
{
	//#1.初始化I0引脚
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE) ;
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_Init (GPIOA, &GPIO_InitStruct) ;
	
	//#2.配置ADC模块的时钟
	RCC_ADCCLKConfig (RCC_PCLK2_Div6);
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_ADC1, ENABLE);
	
	//#3.配置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);
	
	//#4.配置注入序列的额外参数
	ADC_InjectedSequencerLengthConfig(ADC1,1);
	ADC_ExternalTrigInjectedConvConfig(ADC1, ADC_ExternalTrigInjecConv_T1_TRGO);
	ADC_ExternalTrigInjectedConvCmd(ADC1,ENABLE);
	ADC_InjectedChannelConfig(ADC1,ADC_Channel_0, 1, ADC_SampleTime_13Cycles5);
	
	//#5.闭合总开关
	ADC_Cmd(ADC1,ENABLE);
}
相关推荐
国科安芯13 小时前
航天器多路并联大功率电源系统设计与ASP4644均流特性分析
单片机·嵌入式硬件·fpga开发·安全性测试
茯苓gao15 小时前
嵌入式开发笔记:CANopen相关移位运算与通信协议术语详解
网络·嵌入式硬件·学习·信息与通信
梁朝辉18 小时前
STM32H750VBT6中ADCINP与INN什么区别
stm32·单片机·嵌入式硬件
省四收割者19 小时前
一文详解信号完整性(1)
python·嵌入式硬件·数学建模·信息与通信·信号处理·智能硬件
崇山峻岭之间20 小时前
单片机无感FOC驱动之ADC
单片机·嵌入式硬件
Ligocious20 小时前
1.点亮一颗小小的LED
单片机·嵌入式硬件
KaifuZeng1 天前
通信与接口协议面试八、CAN通信
单片机·嵌入式硬件·面试·通信与接口协议
智源单片机设计1 天前
基于单片机的直流电机双闭环调速系统设计
单片机·嵌入式硬件
KaifuZeng2 天前
通信与接口协议面试一、基本概念
嵌入式硬件·通信与接口协议
wuyk5552 天前
24. C 语言模块化:不是拆几个.c 文件那么简单
c语言·开发语言·stm32·单片机