微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > NO6+DMA测试(DMA到UART)

NO6+DMA测试(DMA到UART)

时间:10-02 整理:3721RD 点击:
        今天难得有时间,赶紧拿出板子把玩一下。刚才看了一下自己之前的帖子,不知不觉已经写了6篇帖子了,自己还是做了一些东西的。如果有时间的话后边我还会不断发帖分享的。下面进入正题。
       今天做的是DMA实验,通过DMA将数据传到串口外设。DMA是计算机科学中的一种内存访问技术。它允许某些电脑内部的硬件子系统(电脑外设),可以独立地直接读写系统存储器,而不需绕道 CPU。 DMA 用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。传输过程中, CPU 是闲置的,数据的高速传输不需要用到 CPU,节省了 CPU 的资源来做其他的操作,比如在例程中的点亮 LED 灯。这里的外设一般是指外设的数据寄存器,比如 ADC、 SPI、 I2C 等外设的数据寄存器。存储器一般是指片内 SRAM、外部存储器、片内 Flash 等。总结就是传输数据时使用 DMA 传输而不占用 CPU,解放 CPU,让 CPU 有足够的时间处理其它事情。
软件步骤:



1. 设置串口6,选择串口GPIO




2. 设置串口参数,如波特率、停止位等




3. 设置中断




4. 设置DMA参数,如传输方向、循环模式等




5. 设置串口GPIO


编写程序:


int main(void)
{
      HAL_StatusTypeDef hal_status;

      uint8_t aRxBuffer[SENDBUFF_SIZE]= {

           0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,
           0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,0x20 };

       
     HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_DMA_Init();
    MX_USART6_UART_Init();
   hal_status = HAL_UART_Transmit_DMA(&huart6,aRxBuffer, SENDBUFF_SIZE);
}
测试结果:连接好串口线,打开调试助手会不断的接收到数据。




看来小编可以开始着手项目开发了

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top