stm32h7串口配置DMA的坑有很多,卡了我一个晚上去解决它,在csdn上找到了可以解决的办法,在此记录一下。
cubemx对于串口和DMA的配置并没有过于严格的要求,按照正常去配置即可,主要是以下三点
1. MX_DMA_Init();需要放在串口等Init的上方,不然会出现错误,可以在这里进行修改2.因为DMA无法返回到0x20000000,具体原因可以看最下方原文链接,此处只需将keil5修改如下
3.这个跟第二点有些类似,但这也是我卡的最长时间的一点,因为DMA无法返回到0x20000000,那么你所发送的数据就也不可以是储存在0x0x20000000地址中的,但是keil5默认从此开始存储,那么这个时候就需要强制进行确认一个可以开始的地址即0x20000000-0x20080000,通过如下代码实现
uint8_t send_data[10]__attribute__((section(".ARM.__at_0x24010000")));//定义数据发送数组
注意不能在主函数外对此进行赋值,会出现乱码,需要在程序中对此再进行赋值,才会发送正确的数值。
以下是第二三点的详细解释
原文链接:https://www.jianshu.com/p/ba1034136ae8