78
994
3191
中级工程师
使用特权
void myDMA_init(DMA_Stream_TypeDef *DMAa_Streamb, u32 chx) { if((u32)DMAa_Streamb>(u32)DMA2)//得到当前stream是属于DMA2还是DMA1 { __HAL_RCC_DMA2_CLK_ENABLE();// 第一步初始化DMA2时钟使能 }else { __HAL_RCC_DMA1_CLK_ENABLE();//DMA1时钟使能 } __HAL_LINKDMA(&UART1_Handler,hdmatx,DAM_Handal); //将DMA与USART1联系起来(发送DMA) /* 配置DMA各个参数 */ DAM_Handal.Instance = DMAa_Streamb; //寄存器基地址 设置DMA数据流 DAM_Handal.Init.Channel = chx; //通道 DAM_Handal.Init.Direction = DMA_MEMORY_TO_PERIPH; //dma传输方向 内存到外设 DAM_Handal.Init.PeriphInc = DMA_PINC_DISABLE; //外设(非)增量模式 DAM_Handal.Init.MemInc = DMA_MINC_ENABLE; //使能存储器地址递增 DAM_Handal.Init.PeriphDataAlignment = DMA_PDATAALIGN_BYTE; //设置外设数据宽度 DAM_Handal.Init.MemDataAlignment = DMA_MDATAALIGN_BYTE; //设置外设数据宽度 DAM_Handal.Init.Mode =DMA_NORMAL; //外设普通模式 DAM_Handal.Init.Priority =DMA_PRIORITY_MEDIUM; //中等优先级 DAM_Handal.Init.FIFOMode =DMA_FIFOMODE_DISABLE; //fifo模式 DAM_Handal.Init.FIFOThreshold =DMA_FIFO_THRESHOLD_FULL; //FIFO阀值设置 DAM_Handal.Init.MemBurst =DMA_MBURST_SINGLE; //存储器突发单次传输 DAM_Handal.Init.PeriphBurst =DMA_PBURST_SINGLE; //外设突发单次传输 HAL_DMA_Init(&DAM_Handal); }
void MYDMA_USART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size) { HAL_DMA_Start(huart->hdmatx, (u32)pData, (uint32_t)&huart->Instance->DR, Size);//开启DMA传输 huart->Instance->CR3 |= USART_CR3_DMAT; //使能串口DMA发送 }
发表回复 本版积分规则 回帖后跳转到最后一页
0
扫码关注 21ic 官方微信
扫码关注嵌入式微处理器
扫码关注21ic项目外包
扫码关注21ic视频号
扫码关注21ic抖音号
本站介绍 | 申请友情链接 | 欢迎投稿 | 隐私声明 | 广告业务 | 网站地图 | 联系我们 | 诚聘英才 | 论坛帮助
京公网安备 11010802024343号
———————————————— 版权声明:本文为CSDN博主「小朱一定要快速**文」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_43745917/article/details/119679235