资源简介
天下文章一般抄,只能靠自己实践。本代码用于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
相关资源
- PIC18单片机 官方所有程序 包含AD TI
- VL53L0X_STM32例程
- Halcon18软件链接;内附推荐的Halcon学习
- labview调用halcon进行相机实时采集
- lsm303dlh电子罗盘传感器hal程序
- 基于OpenCV和Halcon的交通冲突视频自动
- HALCON简单介绍 20181126
- halcon 8 matrox imaging library7.5(MIL-LITE7
- halcon倾斜车牌识别源代码
- Halcon软件提取轮廓功能
- labview 调用halcon
- halcon_17 深度学习
- STM32Cube-USART
- halcon写的spoke找圆
- USARTHMI——GUI绘图指令.zip
- HALCON连接多摄像头以及图像合并
- halcon10.zip
- STM32F103RCT6.zip
- gd32vf_usart_test0.zip
- STM8L15x的USART调试实验串口调试_含中断
- HALCON视频-教程
- Halcon抓直线
- STM32 USART1 USART2 UASRT3 UART4 UART5串口通信
- HAL库stm32F429IG正交编码器
- The Whale Optimization Algorithm.
- labview把图片转halcon图片
- halcon----mnist
- halcon例程.txt
- 超详细 halcon 相机标定 !!
- halcon全套资料.txt
评论
共有 条评论