在这里添加学习笔记
1、要想获取某个寄存器的地址,可以先找到该寄存器在在参考手册中的偏移地址,
然后加上基地址(在参考手册的表1中)。
2、外设对应的哪个通道可以在stm32参考手册的147页DMA请求映像中找到
3、注意不要忘记启动DMA的时钟。
4、当发现编译有大量错误时注意有没有添加DMA的c文件,和头文件
5、注意DMA传输结束后会自动关闭,而无需手动关闭
6、使用DMA传输串口数据后要用该句:USART_ClearFlag(USART2,USART_FLAG_TC);
清除标志位,否则会出现丢失第一个字节数据的情况 ,也可以在DMA发送后加该句,
也可在使用标准串口发送程序发送数据前使用该句清除标志位。
7、下面一段代码曾经费尽了周折,要想每次都可以发送,需要在每次发送前关闭该DMA的该通道,然后重新装载该
寄存器的值。要不然会出现发送一次后就不能再发送的情况。每次要用DMA发送数据时都不要忘记这一点。
DMA_Cmd(DMA1_Channel7, DISABLE);//关闭该DMA的该通道,为下面的重装数据量值做准备。
DMA1_Channel7->CNDTR|=0x00000024;//重新给传输数量寄存器装入要传送的数据量,注意重新装载前要关闭该DMA的该通道
DMA_Cmd(DMA1_Channel7, ENABLE); //使能DMA1的通道7开始USART2的数据传输
//曾经以为DMA发送完成后会自动关闭,其实不会。这里要注意
//使用DMA后要清除TC标志位,否则再使用普通串口发送程序时会丢第一字节数据
USART_ClearFlag(USART2,USART_FLAG_TC);