资源简介
天下文章一般抄,只能靠自己实践。本代码用于STM32F429,使用HAL库版本:STM32Cube_FW_F4_V1.11.0。精简其他不需要的程序段,只留c和h文件,直接添加可用,已测试过。

代码片段和文件信息
#include “BSP_USARTDMA.h“
//stm32f4xx_hal_conf.h文件中修改启用 #define HAL_UART_MODULE_ENABLED
//stm32f4xx_hal_conf.h文件中修改启用 #define HAL_DMA_MODULE_ENABLED
/*
1、STM32F429有2个DMA控制器(DMA1和DMA2)每个控制器有8个数据流,每个数据流有8个通道(请求)。
2、支持外设到存储器、存储器到外设、存储器到存储器传输的常规通道。(仅DMA2支持存储器到存储器的传输)
*/
UART_HandleTypeDef UARTDMA_HD;
DMA_HandleTypeDef UARTDMATX_HD;
DMA_HandleTypeDef UARTDMARX_HD;
uint8_t RX_BUF[RXBUF_SIZE];
volatile uint8_t RX_OK = 0;
volatile uint16_t RX_CNT = 0;
//初始化
void _BSP_USARTDMA_Configuration(uint32_t bRate)
{
UARTDMA_HD.Instance = USARTx_NUM; //串口编号
UARTDMA_HD.Init.BaudRate = bRate; //波特率
UARTDMA_HD.Init.WordLength = UART_WORDLENGTH_8B; //字长为8位格式
UARTDMA_HD.Init.StopBits = UART_STOPBITS_1; //一个停止位
UARTDMA_HD.Init.Parity = UART_PARITY_NONE; //无奇偶校验位
UARTDMA_HD.Init.HwFlowCtl = UART_HWCONTROL_NONE; //无硬件流控制
UARTDMA_HD.Init.Mode = UART_MODE_TX_RX; //全双工收发模式
UARTDMA_HD.Init.OverSampling = UART_OVERSAMPLING_16; //16倍过采样获取更好的容错性
HAL_UART_Init(&UARTDMA_HD); //内部调用__HAL_UART_ENABLE(handler);函数
__HAL_UART_ENABLE_IT(&UARTDMA_HD UART_IT_IDLE); //开启IDLE中断,以帧方式接收不定长数据
__HAL_DMA_ENABLE_IT(&UARTDMATX_HD DMA_IT_TC); //开启DMA传输完成中断
__HAL_DMA_ENABLE_IT(&UARTDMARX_HD DMA_IT_TC);
HAL_UART_Receive_DMA(&UARTDMA_HD RX_BUF RXBUF_SIZE);
}
//调用初始化函数HAL_UART_Init时,会先调用MSP初始化回调函数,进行引脚配置和NVIC配置
void HAL_UART_MspInit(UART_HandleTypeDef *huart)
{
//GPIO端口设置
GPIO_InitTypeDef GPIO_InitStructure;
if(huart->Instance == USART1) //如果是串口1,进行串口1 MSP初始化
{
__HAL_RCC_GPIOA_CLK_ENABLE(); //使能GPIOA时钟
__HAL_RCC_USART1_CLK_ENABLE(); //使能USART1时钟
__HAL_RCC_DMA2_CLK_ENABLE(); //DMA2时钟使能
GPIO_InitStructure.Pin = GPIO_PIN_9 | GPIO_PIN_10; //PA9(USART1_TX)\PA10(USART1_RX)
GPIO_InitStructure.Mode = GPIO_MODE_AF_PP; //复用推挽输出
GPIO_InitStructure.Pull = GPIO_PULLUP; //上拉
GPIO_InitStructure.Speed = GPIO_SPEED_FREQ_VERY_HIGH; //高速
GPIO_InitStructure.Alternate = GPIO_AF7_USART1; //复用为USART1
HAL_GPIO_Init(GPIOA &GPIO_InitStructure); //初始化
//Tx DMA配置
//数据流选择
UARTDMATX_HD.Instance = DMA2_Stream7;
//通道选择
UARTDMATX_HD.Init.Channel = DMA_CHANNEL_4;
//存储器到外设
UARTDMATX_HD.Init.Direction = DMA_MEMORY_TO_PERIPH;
//外设非增量模式UART只有一个DR寄存器,地址不能变化
UARTDMATX_HD.Init.PeriphInc = DMA_PINC_DISABLE;
//存储器增量模式
UARTDMATX_HD.Init.MemInc = DMA_MINC_ENABLE;
//外设数据长度:8位一个字节
UARTDMATX_HD.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE;
//存储器数据长度:8位
UARTDMATX_HD.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE;
//外设普通模式
UARTDMATX_HD.Init.Mode = DMA_NORMAL;
//中等优先级
UARTDMATX_HD.Init.Priority = DMA_PRIORITY_LOW;
//关闭FIFO
UARTDMATX_HD.Init.FIFOMode = DMA_FIFOMODE_DISABLE;
//FIFO阀值选择
UARTDMATX_HD.Init.FIFOThres
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6437 2019-06-03 00:13 USART使用DMA方式收发数据\BSP_USARTDMA.c
文件 682 2019-06-03 00:06 USART使用DMA方式收发数据\BSP_USARTDMA.h
文件 1019 2019-06-03 00:19 USART使用DMA方式收发数据\main.c
文件 92 2019-06-03 00:21 USART使用DMA方式收发数据\readme.txt
文件 195675 2019-06-03 00:22 USART使用DMA方式收发数据\USART.jpg
目录 0 2019-06-03 00:22 USART使用DMA方式收发数据
----------- --------- ---------- ----- ----
203905 6
相关资源
- halcon 测量助手
- MQTT+串口(usart)透传
- halcon简单实现人脸识别.hdev
- halcon极坐标变换傅里叶变换
- halcon算子速查手册.pdf115507
- halcon-ocr训练及识别
- Halcon车牌识别
- halcon实现创建模板中心可以任意设置
- halcon-标定与精确测量
- labview掉halcon.vi
- 基于HALCON识别指示灯亮灭和OCR识别.
- halcon跟随测量.hdev
- 视觉分拣.hdev
- Halcon之OCR(看完必会)
- STM32F103 USART+DMA
- 4_USART串口通信(空闲中断+DMA.zip
- stm32f105-usart-DMA收发demo
- Hall effect of reactive sputtered iron nitride
- HALCON使用手册简体中文版
- Bioleaching of chalcopyrite and marmatite by m
- FreeModbus_Slave+STM32F407+USART2代码亲测可
- 单片机串口printf函数自实现第二版
- Halcon画刷和橡皮以及鼠标选取ROI源码
- One-pot synthesis of benzothiazolones from 2-h
- Catalytic Activity of Styrene-divinyl Benzene
- Research of Catalyst Preparing 14-Naphthoquino
- STM32F429内部FLASH读写程序
- stm32l0系列HAL库
- halcon1032位和64位完美破解版.rar
- CP2102驱动WIN7、WIN10、32位、64位
评论
共有 条评论