zoukankan      html  css  js  c++  java
  • STM32CubeMx——串口使用DMA收发数据

    用到的是DMA发送数据,DMA接收,在中断回调里发送出去。

    一.代码生成

    1.按以前的方法设置好时钟和调试方式,这里就不多说了。

     2.设置串口1。

    3.在DMA Setting里点击Add添加USART1_TX,Mode有两种模式,一种是普通模式,使用一次发送语句就发一次,另一种是循环模式,使用一次发送会一直发送。这里发送我选择普通模式,接收选择循环模式。

     

    4.在中断设置里打开串口1的中断。

     5.时钟和文件路径等设置好,然后点生成代码。

    二.代码编写

    1.先定义发送和接收的数组。

    /* USER CODE BEGIN 0 */
    uint8_t aRxBuffer[1];
    uint8_t aTxBuffer[]="ok";
    /* USER CODE END 0 */

    2.打开串口DMA的发送使能,while循环可以放一些LED的闪烁。

    /* USER CODE BEGIN 2 */
      HAL_UART_Receive_DMA(&huart1,aRxBuffer,1);
      HAL_UART_Transmit_DMA(&huart1,aTxBuffer,sizeof(aTxBuffer));
      /* USER CODE END 2 */

    3.最后加上一个串口接收函数的回调函数,把接收到的数据再发出去。

    /* USER CODE BEGIN 4 */
    void HAL_UART_RxCpltCallback(UART_HandleTypeDef *UartHandle)
    {
        HAL_UART_Transmit(&huart1,aRxBuffer,1,0);
    }
    /* USER CODE END 4 */

    现象:

    上电之后,电脑的串口会收到“OK”,然后从电脑发送给芯片任意字符,芯片再发回来。

     

    总结:使用DMA做发送处理,接收数据后用串口发出去。为什么接收到数据后不用HAL_UART_Transmit_DMA发送出去呢?使用这个发现丢包情况,因为这里只是测试DMA接收数据情况,接收到之后一般是作运算处理的,所以用一般串口发送验证接收的数据正确。

  • 相关阅读:
    iOS_核心动画(二)
    iOS_核心动画CALayer(一)
    iOS_KVC与KVO
    iOS_Quartz 2D绘图
    iOS_触摸事件与手势识别
    iOS_多线程(二)
    iOS_多线程(一)
    iOS_UIAlertController
    CTF-Pwn-[BJDCTF 2nd]diff
    数据结构--队列(Java实现)
  • 原文地址:https://www.cnblogs.com/lailai-laird/p/12618786.html
Copyright © 2011-2022 走看看