总结DMA+空闲中断接收数据的使用方法
开启DMA接收
在主函数中以DMA+空闲中断的方式接收数据的函数:HAL_UARTEx_ReceiveToIdle_DMA
然后调用空闲中断回调函数
切记/每次接收到数据都需要重新开启接收数据的函数。
DMA的作用
DMA是直接内存访问,使用DMA可以减轻CPU负担提高系统的运行效率,使用DMA可以快速传输数据。
串口重定向(如何使用串口重定向)
串口重定向就是将串口的功能重新定向到标准输入或者是标准输出当中。
以printf为例子:调用printf会调用fputc函数,我们只需要对fputc函数进行重写函数在重写中调用HAL-UART-Transmit_
串口的数据接收
同步通信:由于时钟线提供数据发送的节奏,保证数据的正确传输
异步通信:使用起始位和停止位来保证数据的正确传递
在同步通信中,发送端和接收端需要共享一个时钟信号来同步数据传输,
在异步通信中,时钟信号不是必须的,数据的传输通过起始和停止信号来确定。
同步通信中,速度受到时钟信号频率的限制
异步通信中,速度不受到时钟信号频率的限制
异步通信比同步通信更加灵活。
ADC采样(分辨率,采样时间)
ADC是指模拟数字转换器。
分辨率指的是采样的精度,分辨率越高就代表了采样精度越高,得到的数值越准确。12位ADC采样的数据范围是0~4095.
采样时间指采集数据的时间,采集数据的时间越久,相对于取得的效果越好。
PWM(占空比,ARR,CNT和CCRX的关系)(如何去调整占空比)
PWM指的是脉宽调制。
占空比指的是高电平占整个周期的时间/总电平的时间
ARR指的是重装载值
CNT指的是计数值
CCRX指的比较寄存器
当CNT的值达到了ARRR的时候会溢出变成0,然后重新计数,CNT从0开始计数
当CNT<=CCRX表现为低电平,当CNT>=CCRX的值表现为高电平。
当ARR的值确定后,可以通过调节CCRX来调节高低电平的占比。
使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。
代码:
while (1)
{
HAL_ADC_Start(&hadc); //开启ADC采样
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3);//打开定时器3的通道3并设置pwm值
adc_val=HAL_ADC_GetValue(&hadc); //获取ADC采样值
printf("adc_val=%d\r\n",adc_val);
int sum=adc_val/100*10;
printf("sum=%d\r\n",sum);
TIM3->CCR3=sum;//越小越暗
UV=(3.3/4095)*adc_val;
printf("UV=%.2f\r\n",UV);
HAL_Delay(1000);
}
运行效果: