实现了蓝牙基本功能的调试后,我们回过头来分析一下其余其余功能的实现,其一就是PWM控制等的亮度,其二就是ADC采集电池电压,这两部分都是需要一定的硬件支持的。本次没有外购其他的配件,主要是手里正好有一个LED灯珠:
第一部分:PWM控制
PWM控制灯珠一共设计两个部分,一个就是硬件的搭建,我们肯定不能把IO口最为LED灯珠的回路,智能通过mos管作为开 关,具体的控制电路如下:
通过三极管控制mos,然后LED灯珠就连接在VBAT2上,实物搭建如下:
接下来就是PWM的输出控制,软件部分,我们在STM32CubeMX中将PA1作为PWM控制信号:
然后是配置PWM:
PA1对应的是定时3的通道2,配置PWM的频率为1KHz,软件上通过以下两个函数进行开启和配置占空比:
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_2); __HAL_TIM_SET_COMPARE(&htim3,TIM_CHANNEL_2,0);
第二部分:ADC采集
adc采集的是电池的电压数据,电池的电压一般是比较高的,而ADC采集最高是3.3V,所以需要一个分压电路:
这里使用了两个等大的电阻进行分压,采集后直接*2就能进行还原;
ADC的采集使用的是PA2引脚:
对应的是ADC4的通道7,注意本芯片只有这一个ADC采集模块,如果你使用的是例程,需要首先释放ADC采集的控制:
然后进行ADC采集的配置:
软件部分通过软件开启ADC转化:
if (HAL_ADC_Start(&hadc4) != HAL_OK) { /* ADC conversion start error */ Error_Handler(); } /* Wait for ADC conversion completed */ if (HAL_ADC_PollForConversion(&hadc4, 10) != HAL_OK) { /* End Of Conversion flag not set on time */ Error_Handler(); } uhADCxData = HAL_ADC_GetValue(&hadc4); uhADCxData = uhADCxData*3300/4096*2; uhADCxConvertedData[0] = uhADCxData;
到这里我们就实现了LED灯珠的基本控制和电池电压的采集。