问题1:STM32G0 系列 DMA中断接收,应用层无法接收到数据
分析: Debug发现,最终没有进入串口中断函数 。
于是,检查Stm32CubeMX 的工程配置
两个串口的全局中断没有使能。
解决:勾选上图中红框部分,查看生成的stm32g0xx_it.h ,已经有对应中断函数的定义了
还要在stm32g0xx_it.c 中屏蔽生成的 中断函数实现,并在自己的代码里实现中断函数。
问题2:使能中断后,发现程序无法正常运行
分析:无法肉眼找出问题所在,进行Debug调试,当调试到串口初始化函数时,程序崩溃,随后进行单步调试,执行每一个HAL库函数,程序居然正常跑起来了,所以考虑是否加一个延时,最后发现在__HAL_UART_ENABLE_IT(huart, UART_IT_IDLE)前面加延时,程序可以正常运行了,根本原因目前未知。
问题3:使用DMA接收的数据,发现huart1.hdmarx->Instance->CNDTR 获取DMA Buffer剩余的大小,发现一直是0
分析:检查代码:下面这句,最后传入的buf大小,有问题,uart_dma_buffer[1]是一个指针,sizeof它,不是这个数组的大小,实际大小是 4 Byte, 一个指针变量的大小为 4字节
解决:将上面传入的buf大小值,改为实际Buffer的大小即可。