思维导图:
1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。
- 配置ADC以读取光敏电阻的电压值,配置PWM以控制LED的亮度。
- 使用ADC读取光敏电阻的电压值。这个值将随着环境光线的变化而变化。
- 将ADC读取的原始值映射到一个更易于处理的范围,例如0-255。根据需要应用任何平滑或滤波算法,以减少噪声或突变的影响。
- 使用映射后的光敏电阻值作为PWM的占空比,从而控制LED的亮度。当光敏电阻值增加(即环境光线更亮)时,降低PWM占空比以减小LED亮度。当光敏电阻值减小(即环境光线更暗)时,增加PWM占空比以增加LED亮度。
- 在一个循环中不断重复读取光敏电阻值和调节LED亮度。
int adc_val;//用于保存ADC采样的数据
float britns;
while(1)
{
HAL_ADC_Start(&hadc);//开启ADC采样
adc_val = HAL_ADC_GetValue(&hadc);//获取ADC的采样数值
britns = adc_val / 4095.0f * 3.3f;//转换为小数
printf("adc_val : %d\r\n", adc_val);
printf("britns : %f\r\n", britns);
HAL_Delay(1000);
if(adc_val>500)
{
TIM3->CCR3 = 50;//控制第三个通道CCR3
}
else if(adc_val<500)
{
TIM3->CCR3 = 80;
}
}
2.总结DMA+空闲中断接收数据的使用方法
- 初始化DMA通道:将UART(通用异步收发器)的接收数据寄存器设置为DMA的源地址,而一个缓冲区则设置为DMA的目的地址。设置DMA的传输长度为缓冲区的大小。
- 配置UART的空闲中断:当UART在一段时间内没有再次接收到数据时,会触发空闲中断。这种中断模式特别适用于接收任意长度的数据帧。
- 启动DMA传输:在UART开始接收数据之前,先启动DMA传输。这样,当UART接收到数据时,DMA会自动将数据传输到之前设置的缓冲区中。
- 启动UART接收数据:在DMA传输开始后,启动UART的数据接收。每当UART接收到数据时,DMA会自动进行数据传输,并在传输完成后设置相应的标志位。
- 在中断处理函数中处理数据:当空闲中断被触发时,中断处理函数会检查DMA传输完成的标志位,并将DMA传输的数据从缓冲区中取出进行处理。