STM32的HAL库学习挖坑-DMA串口接收不定长数据
DMA串口这个东西,前几年都是寄存器混合HAL库方可食用,因为那时候底层不太完善,我用中断它不香吗?(资源不紧张的情况下中断速度稍微快一点点)
但是该学的还是要学学,说不定哪个项目能用上呢~(到底哪个项目资源那么紧张了QwQ)
打个基础先,DMA串口就是硬件自动接收数据,减少MCU的负荷,想要的时候读取下就行了
单片机:STM32L051C8T6 功能:DMA接收串口1数据,定时500ms打印串口数据
国际惯例上STM32CubeMx的相关配置图:
1.串口基础配置
2.DMA配置,注意:RX的mode需要设置为Circular,不然接收1次数据后就挂了,没看到的就找BUG吧,hiahiahiahiahiahiahiahia
然后在生成文件后添加变量,如下:
uint8_t Rx_Buffer[300]; //这个是全局变量,用于接收串口缓存 uint16_t i = 0;
在while(1)内添加代码,如下:
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
for(i = 0; i < 300; i++)
printf("%02x ",Rx_Buffer[i]);
printf("
");
HAL_Delay(500);
}
烧录完成后就可以正常食用了~_~
最后总结下做DMA串口接收不定长数据时,处理完串口数据后需要将数据清0,不然数据会一直叠加下去,上面的程序没清0所以每次都是叠加^_^
PS:不想定时扫描的话,就使用空闲中断,产生中断后再读取
