www.dftb.net > stm32串口DmA发送例程

stm32串口DmA发送例程

我是用的原子的寄存器版的, 串口部分初始化部分加入这个 USART1->CR3=1外设模式/8位数据宽度/存储器增量模式 //DMA_CHx:DMA通道CHx //cpar:外设地址 //cmar:存储器地址 //cndtr:数据传输量 void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32 ...

定时发送数据建议设置成Normal模式。 以下是个人对Circular模式和Normal模式的理解: Circular:开发者只需设置好发送缓冲区的大小,之后往缓冲区内扔数据,不必考虑发送的时机和因为串口速度问题导致的数据冲突,相当于“流”的效果。 Normal:开...

USART_DMACmd(USART2,USART_DMAReq_Tx,ENABLE); //使能串口2的DMA发送 /*等待DMA传输完成,实际应用中,传输数据期间,可以执行另外的任务 */ while(1) { if(DMA_GetFlagStatus(DMA1_FLAG_TC7)!=RESET)//判断通道7传输完成 { SZ_STM32_LED1Toggl...

UART一种典型的格式就是:1位起始位+8位数据+1位终止位 虽然串口是一位接着一位发送的,但是可以连续发送一定长度的数据

我是用的原子的寄存器版的, 串口部分初始化部分加入这个 USART1->CR3=1外设模式/8位数据宽度/存储器增量模式 //DMA_CHx:DMA通道CHx //cpar:外设地址 //cmar:存储器地址 //cndtr:数据传输量 void MYDMA_Config(DMA_Channel_TypeDef*DMA_CHx,u32

你说的应该是串口1的吧。看下面这张图就明白了,TX和RX对应不同的通道。(STM32F103中文教程及参考手册.pdf,第99页) 选什么通道就看用的是什么外设;存储器到存储器没用过不懂(如果有答案求私信)。

如果没开中断就用查询的方式,下面是DMA1 Channel5的,其他通道类似 /* 等待DMA传输完成 */ while (!DMA_GetFlagStatus(DMA1_FLAG_TC5)); /* 清除DMA完成标志 */ DMA_ClearFlag(DMA1_FLAG_TC5); /* 关闭DMA传输 */ DMA_Cmd(DMA1_Channel5, DISAB...

大体来说就是先配置你要使用的对应串口,打开该串口对应DMA的读(写)功能,并配置串口对应DMA通道的DMA。具体配置你点链接吧,这链接是我刚百度的网页链接

关注这个问题

网站地图

All rights reserved Powered by www.dftb.net

copyright ©right 2010-2021。
www.dftb.net内容来自网络,如有侵犯请联系客服。zhit325@qq.com