摇杆控制LED灯的亮度

系统概要

在该系统中,所用到的技术有ADC、DMA、TIM、USART。有些可以没有必要使用,但为了作为前一段时间的总结,所以把这几种都给使用上了。说一下做这个的思路,之前每一块都已经学习过,并且都已经实现了,所以想着做这个小项目来练练手。在这里面ADC和DMA读取摇杆的位置,TIM用来输出PWM控制LED的亮度,USART串口用来输出打印一些运行时的信息。如下图所示:
摇杆控制LED灯的亮度

系统实现

项目的文件结构图:
摇杆控制LED灯的亮度
看一下项目的主要代码吧!
项目的所有源代码:https://github.com/Dynamicwang/Control-light.git
下面主要来看一下主函数(main.c):

#include "usart.h"
#include "TIM.h"
#include "adc.h"

u8 Input_Value = 0;
extern uint16_t Conver_Value[10];
int i;
float temp;

void Init(void)
{
		USART1_Config();
		TIM3_Config(1000);
		ADC1_Config();
}

int main(void)
{
	Init();
	
	ADC_SoftwareStartConvCmd(ADC1,ENABLE);
	while(1)
	{
		temp = 0;
		for(i = 0;i < 10;i++)
		{
			temp += Conver_Value[i];
		}
		temp = temp * 3.3 /40960 *1000;
		TIM3_Config((int)(temp/3300 * 1000));
	}
}

void USART1_IRQHandler(void)
{
	if(USART_GetITStatus(USART1,USART_IT_RXNE) == SET)
	{
		USART_ClearFlag(USART1,USART_FLAG_RXNE);
		Input_Value = USART_ReceiveData(USART1);
	}
}

在主函数中,我们首先初始化各个文件中的配置,然后ADC软件触发,主函数进入死循环,轮询操作。首先我们将ADC采集的十次摇杆的值进行求和。求完和后对该数值进行转换。最后将计算的值归一化到0-1000范围内,最后一步配置TIM输出的PWM的高电平持续时间。

上一篇:HAL库实现USART2与BC20通讯,利用usart2+dma+空闲中断


下一篇:Stm32串口通信(USART)