STM32 DMA串口发送模式配置及使用简单分享

发布时间:2023-01-03  

  赠人玫瑰,手有余香;很感谢网上其他楼主的分享;我这个贴子是关于STM32 DMA USART 发送模式的调试分享,我为什么要建这个帖子呢,因为我不想看到还有其他人跟我一样,为了调通DMA串口,而花上大半天的时间,这很不利于大家高效率的开发,网上的经验都是从头教到尾的,内容极多,对于有点小经验的人,或者是想很快达到目的的人,这个很不适合他们;我的这个很简单(本帖不适合不熟悉配置STM32串口的玩家),他只是说串口的DMA怎么配置,还有我用的是DMA1_通道4,因为我的是串口1的TX长话短说:直接po代码:


  DMA_InitTypeDef DMA_InitStruct; //DMA类型声明

  RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1,ENABLE); /打开RCC时钟,

  DMA_InitStruct.DMA_PeripheralBaseAddr= USART1_BASE+0x4;

  //串口外设基础地址,好像只能是这个数值,至于为啥是0x4,我还没找到相关资料

  DMA_InitStruct.DMA_MemoryBaseAddr= (u32)TEST;//这个我是一个字符串数组的首字母也就是u8  TEST[]

  =""

  DMA_InitStruct.DMA_DIR= DMA_DIR_PeripheralDST;//这个是发送模式

  DMA_InitStruct.DMA_BufferSize=0; //缓冲大小,实际我们使用可以改变,现在可以随便填

  DMA_InitStruct.DMA_PeripheralInc= DMA_PeripheralInc_Disable

  ;//这个是外设偏移,是外设的地址偏移

  DMA_InitStruct.DMA_MemoryInc= DMA_MemoryInc_Enable;//内存偏移,是保存在内存中的数据偏移

  DMA_InitStruct.DMA_PeripheralDataSize=DMA_PeripheralDataSize_Byte;

  DMA_InitStruct.DMA_MemoryDataSize= DMA_MemoryDataSize_Byte;

  DMA_InitStruct.DMA_Mode= DMA_Mode_Normal;//因为不需要循环发送所以使用这个模式就好

  DMA_InitStruct.DMA_Priority=DMA_Priority_High;//优先级,有最高,高,中,低的哥档位

  DMA_InitStruct.DMA_M2M= DMA_M2M_Disable; //关闭就好

  DMA_Init(DMA1_Channel4, & DMA_InitStruct);

  DMA_Cmd(DMA1_Channel4, DISABLE); //先关闭,要使用的时候才使能

  USART_DMACmd(USART1, USART_DMAReq_Tx, ENABLE);//串口DMA使能,在串口的.h文档中可以找到。

  上面是我的DMA配置,接下来是实际在主函数中是怎么使用的:


  DMA_Cmd(DMA1_Channel4, DISABLE); //首先要关闭使能;

  DMA1_Channel4->CNDTR =13;  //给这个寄存器设定要发送的缓存大小,这个就是之前DMA配置的DMA_InitStruct.DMA_BufferSize=0;具体语句可以在dma.c中可以找到;

  DMA_Cmd(DMA1_Channel4, ENABLE);//设定好了缓冲长度之后使能DMA,这个时候串口就会自动发送

  DMA_InitStruct.DMA_MemoryBaseAddr=&TEST这个地址的内容;

  while(!DMA_GetFlagStatus(DMA1_FLAG_TC4)) ;//等待完成标志

  DMA_CleaRFlag(DMA1_FLAG_TC4); //清除完成标志

  可以我的代码就这两部分,最后说一说我花了大半天才得到的调试记录:


  1)使用DMA串口发送和单纯的串口发送方法不一样,传统的是printf(),DMA就是上面我的第二段代码的操作;


  2)DMA_PeripheralInc:要DIsable,因为这个是设定外设指向下个地址,而不是数据下个地址,设为Enable的话,系统会死机;


  3)DMA_MemoryInc:要Enable,这个才是移动到下个字节的标志;不然的话,即使串口通了,他只会发送第一个字节的内容,而不是发送你整个字符串;通过这个设定我想到了,说明数据是会存入内存中的;


  4)DMA_BufferSize:会自动识别,填写0也没问题;因为实际缓存多大取决于你实际使用时DMA1_Channel4->CNDTR的设定;


  5)USART_DMACmd():这个函数记得要打开,他在串口的.h文档中;


  6使用的方法就是我的第二段代码,先关闭DMA使能,再设定缓冲大小,再开启DMA使能;


  相信这些点你都注意了,串口就可以正常发送数据啦;希望能够帮助你。


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    此事件激活消息处理函数OnComm(),在OnComm()中加入处理代码,判断是否是所需的数据,再作出相应的显示、存盘等处理。 下面简要给出用事件驱动方式接收89C51单片机发送数据的程序源代码。通讯时PC串口......
    种低速的串行异步通信,适用于低速通信场景,通常使用的波特率小于或等于115200bps。PC与STM32单片机通信实例推荐:按下按键,通过串口发送数据实例。 对于小于或者等于115200bps波特率的,而且数据......
    to the downloader via serial port //通过串口向下位机发送数据    }   catch (serial::IOException& e......
    的硬件结构 51单片机内部的行串口由一个发送数据寄存器SBUF和一个接收数据寄存器SBUF组成,其中,SCON为串口控制寄存器,包含各种UART通信参数和中断标志位;P3.0和P3.1为串口数据......
    /A 通道和A/D 通道与单片机相连接。激光通信系统和上位机通过串口相连接,通过串口AT 指令对激光通信系统进行控制和数据的收发。 激光通信系统A、B 两个终端在进行通信时,只需将A 和B 终端......
    程序中,对界面中的“+”或“?”进行一次操作,PC通过串口向单片机连续发送8路信号延时参数,即只要调节了任一路信号的延时,PC机就会连续发送8个数据帧。 单片机软件设计 单片机主要完成与PC之间......
    单片机负责串口发送的两个函数:void SendByte(unsigned char dat) //发送一个字节的数据,形参dat即为待发送数据。{SBUF = dat; //将数据写入到串口......
    码显示在电脑上,如可以使用一个按键,当按下它时使某一个字母如:AA,通过单片机的串口将它发送到电脑上显示,起到仿真器的某些功效,站长在开发数据采集设备时就是通过串口来检查数据正确与否的。 51单片机......
    送给PC机,PC机再对这些数据进一步处理,例如求均值、方差、画动态曲线与计算给定、打印输出的各种参数等任务。 这里采用霍尔传感器作为前端进行数据采集,然后在单片机控制下进行A/D转换,并将信号通过串口......
    传输的通信方式。串口通信是一种简单、稳定、可靠的通信方式,其原理是通过串口发送端口将数据转换为串行数据,并将其发送到接收端口,接收端口将接收到的串行数据还原成原始数据。在STM32单片机和QT上位机之间进行串口......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>