主要代码:
int adc_val=0;//保存ADC采集到的数值
float volt=0;//保存电压值
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);//打开定时器的PWM通道3
TIM3->CCR3=0;//改变CCR的值,范围0——999,不能超过ARR
while (1)
{
HAL_ADC_Start(&hadc);//开启ADC采样
adc_val=HAL_ADC_GetValue(&hadc);//获取ADC采样的值
volt = adc_val/4095.0f*3.3f;//将采样值转换为电压值
printf("adc_val:%d\r\n",adc_val);//打印出ADC采样到的数值
printf("volt:%.2f\r\n",volt);
HAL_Delay(1000);//延迟函数,方便观察打印数据的值变化
if(volt>1.65)
{
TIM3->CCR3=0;
HAL_Delay(500);
TIM3->CCR3=999;
HAL_Delay(500);
}
else
{
TIM3->CCR3=0;//暗
HAL_Delay(1);
}
}
//重新实现fputc功能 在串口显示
int fputc(int ch,FILE*f)
{
HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,1000);//重新实现fputc发送字符的功能
return ch;
}
运行结果:
使用PWM+ADC光敏电阻完成光控灯的实验
思维导图: