STM32CUBEMX(6)--移植雅特力AT32F403AVGT7,双串口通过DMA方式接收不定长数据
概述
本篇文章主要介绍如何使用STM32CubeMX移植到雅特力AT32F403AVGT7,并通过双串口输出打印。
直接存储器访问(DMA)用于在外设与存储器之间以及存储器与存储器之间提供高速数据传输。可以在无需任何CPU操作的情况下通过DMA快速传输传输。这样节省的CPU资源可供其它操作使用。
DMA允许在后台执行数据传输,无需Cortex-M3处理器干预。在此操作过程中,主处理器可以执行其它任务,仅当整个数据块需要处理时,才会中断主处理器。这样即使传输大量数据也不会对系统性能造成太大影响。
DMA主要用于为不同的外设模块实现集中数据缓冲存储(通常在系统SRAM中)。与分布式解决方案(其中每个外设都需要实现自己的本地数据存储)相比,DMA解决方案在硅片成本和功耗方面的成本较低。
根据使用的产品型号的不同,有一个或两个DMA模块。
本篇文章主要介绍如何使用STM32CubeMX实现串口DMA读取,并且打印出去。

硬件准备
首先需要准备一个开发板,这里我准备的是雅特力AT32F403AVGT7的开发板:

选择芯片型号
雅特力AT32F403AVGT7兼容STM32F103系列,故选取STM32f103VG进行开发。

配置时钟源
HSE与LSE分别为外部高速时钟和低速时钟,在本文中使用内置的时钟源,故都选择Disable选项,如下所示:

配置时钟树
雅特力AT32F403AVGT7最高频率到240M,但是STM32F1的最高主频到72M,同时使用不使用外部晶振时候,最高速度只能到64M,所以配置64即可:

串口配置
本次实验使用的串口2,串口3进行串口通信,波特率配置为115200。


配置DMA
在DMA 设置中,Mode有两种模式,一种是普通模式(Normal),使用一次发送语句就发一次,另一种是循环模式(Circula),使用一次发送会一直发送。这里接收选择循环模式。


中断
在中断设置里打开串口2,3的中断。

生成工程设置
注意在生产工程设置中不能出现中文,不然会报错。

代码生成设置
最后设置生成独立的初始化文件。

生成代码

代码
在main.c中,添加头文件,若不添加会出现 identifier "FILE" is undefined报错。
变量定义 ,在main.c中添加。
函数声明和串口重定向,这里使用串口3进行打印,在main.c中添加。
开启串口IDLE中断,在main.c中添加。
串口DMA获取,在main.c中添加。
主循环,在main.c中添加。
中断外部变量引用,在stm32f0xx_it.c中添加。
串口2,3中断函数,在stm32f0xx_it.c中添加。
结果演示
开机会显示双串口DMA接收例程。
串口2发送数据会在串口3中打印,但是会显示接收的是串口2。
串口3发送数据会在串口3中打印,但是会显示接收的是串口3。

视频教学
