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);
}
相关推荐
周洲08304 小时前
STM32 最简工程搭建|标准库/HAL库规范化模板,零冗余可直接落地
stm32·单片机·嵌入式硬件
ACP广源盛139246256735 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
ACP广源盛139246256736 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
OIDCAT7 小时前
国产USB转千兆网卡芯片CH398-RTL8153国产替代实测与选型
网络·嵌入式硬件·智能硬件·国产芯片·usb转千兆网卡
HRTOS8 小时前
HRTOS 4.0 驱动库:06_Storage 存储设备驱动——24C02 EEPROM与I²C驱动开发
c语言·驱动开发·嵌入式硬件·51单片机
周洲08308 小时前
STM32 串口不定长接收|空闲中断 IDLE 方案,无固定帧长限制,项目实战
stm32·单片机·嵌入式硬件
我和头发拼了11 小时前
STM32--10硬件读写MPU6050
stm32·单片机·嵌入式硬件
糖糖单片机设计12 小时前
基于STM32的鱼缸水质检测系统
stm32·单片机·嵌入式硬件
HRTOS12 小时前
HRTOS 4.0 正式发布:Driver Library 基础外设驱动模块介绍
驱动开发·单片机·嵌入式硬件·51单片机
染予13 小时前
20个点位下发该如何正常操作?
单片机·嵌入式硬件