STM32F767单片机UART DMA程序源码

#include <string.h>
#include "stm32f7_uart_dma.h"
#include "../MyModules/RingQueue.h"
#include "../MyModules/Protocol.h"


/** @addtogroup STM32F7xx_LL_Examples
  * @{
  */


/** @addtogroup USART_Communication_TxRx_DMA
  * @{
  */


/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define DMA_RECEPT_DATA_SIZE 1 //73×Ö½Ú´¥·¢DMAÖжÏ
#define DMA_DATA_BUF_SIZE 128 //DMA·¢ËÍ»º´æ´óС
/* Private macro -------------------------------------------------------------*/
#define USE_USART2//USE_USART3//USE_USART2


#ifdef USE_USART3
#define UART_GPIOx GPIOD
#define UART_TX_PIN LL_GPIO_PIN_8
#define UART_RX_PIN LL_GPIO_PIN_9
#define UART_NUM USART3
#define LL_APB1_GRP1_PERIPH_USARTx LL_APB1_GRP1_PERIPH_USART3
#define LL_RCC_USARTx_CLKSOURCE_PCLK1 LL_RCC_USART3_CLKSOURCE_PCLK1
#define UART_SEND_STREAM LL_DMA_STREAM_3
#define UART_RECV_STREAM LL_DMA_STREAM_1
#define UART_DMA_CHANNEL LL_DMA_CHANNEL_4
#define UART_DMA_NUM DMA1
#else
#define UART_GPIOx GPIOD
#define UART_TX_PIN LL_GPIO_PIN_5
#define UART_RX_PIN LL_GPIO_PIN_6
#define UART_NUM USART2
#define LL_APB1_GRP1_PERIPH_USARTx LL_APB1_GRP1_PERIPH_USART2
#define LL_RCC_USARTx_CLKSOURCE_PCLK1 LL_RCC_USART2_CLKSOURCE_PCLK1
#define UART_SEND_STREAM LL_DMA_STREAM_6
#define UART_RECV_STREAM LL_DMA_STREAM_5
#define UART_DMA_CHANNEL LL_DMA_CHANNEL_4
#define UART_DMA_NUM DMA1
#endif
/* Private variables ---------------------------------------------------------*/
/* Buffer used for transmission */
uint8_t cTxDMABuffer[DMA_DATA_BUF_SIZE];
/* Buffer used for reception */
uint8_t cRxDMABuffer[DMA_DATA_BUF_SIZE];


#define RX_BUF_MAX_SIZE     (MAX_CMD_SIZE*10)        
static unsigned char RingBuffer[RX_BUF_MAX_SIZE];   
static RING_QUEUE RingQueue;             
/* Private functions ---------------------------------------------------------*/


/**
  * @brief  This function configures the DMA Channels for TX and RX transfers
  * @note   This function is used to :
  *         -1- Enable DMA1 clock
  *         -2- Configure NVIC for DMA transfer complete/error interrupts 
  *         -3- Configure DMA TX channel functional parameters
  *         -4- Configure DMA RX channel functional parameters
  *         -5- Enable transfer complete/error interrupts
  * @param  None
  * @retval None
  */
void Configure_USART2_DMA(void)
{


  /* DMA1 used for USART3 Transmission and Reception
   */
  /* (1) Enable the clock of DMA1 */
  LL_AHB1_GRP1_EnableClock(LL_AHB1_GRP1_PERIPH_DMA1);


  /* (2) Configure NVIC for DMA transfer complete/error interrupts */
#ifdef USE_USART3
  NVIC_SetPriority(DMA1_Stream3_IRQn, 0);
  NVIC_EnableIRQ(DMA1_Stream3_IRQn);
  NVIC_SetPriority(DMA1_Stream1_IRQn, 0);
  NVIC_EnableIRQ(DMA1_Stream1_IRQn);
#else
  NVIC_SetPriority(DMA1_Stream5_IRQn, 0);
  NVIC_EnableIRQ(DMA1_Stream5_IRQn);
  NVIC_SetPriority(DMA1_Stream6_IRQn, 0);
  NVIC_EnableIRQ(DMA1_Stream6_IRQn);
#endif
  /* (3) Configure the DMA functional parameters for transmission */
  LL_DMA_SetChannelSelection(UART_DMA_NUM, UART_SEND_STREAM, UART_DMA_CHANNEL);
  LL_DMA_ConfigTransfer(UART_DMA_NUM, UART_SEND_STREAM, 
                        LL_DMA_DIRECTION_MEMORY_TO_PERIPH | 
                        LL_DMA_PRIORITY_HIGH              | 
                        LL_DMA_MODE_NORMAL                | 
         
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值