我在用STM32串口DMA接收数据时,为啥在接收过程中,我的程序停止运行了,接收完成后又开始运行,求解?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我在用STM32串口DMA接收数据时,为啥在接收过程中,我的程序停止运行了,接收完成后又开始运行,求解?相关的知识,希望对你有一定的参考价值。

亲,您用DMA都没有看说明的么?DMA传输数据的时候会占用系统总线,这时候CPU除了能够做运算之外什么事情都干不了,只有等DMA完成数据传输之后,才会把系统数据总线交给CPU,所以你接收数据的时候程序看起来好像就是停止运行的,当你接收完成之后,DMA释放了数据总线,这时候CPU才又开始执行程序...具体内容建议你还是看一下datasheet吧 参考技术A STM32F10X芯片手册中写道,当CPU接到DMA请求后,会停止若干个时钟周期,等待总线仲裁,仲裁完成后DMA和CPU各分一半的数据总线,CPU不会停止工作,只是部分总线被占用,运行变慢。 参考技术B 总线有冲突吧 参考技术C 发程序看看。

stm32串口通讯时怎样接收字符串

stm32串口收发数据时:

    首先收发俩端要建立统一的通信报文:报文格式一致,对应位表达什么。报头校验码等

    一切数据最终都是用二进制的0 1电信号发送,所以不论字符还是什么类型的数据开始读到的都是16进制数。

    举个例子:字符串 hello 约定好放进的uint8 类型的buf[2]-[6],每个字符对应一位字节.将整个buf通过串口(或者有DMA的推荐用DMA)发送。另一端读的时候将对应[2]-[6]拿出即可得到hello

参考技术A 先定义一个数组,在串口中断里,设置接收中断,当连续发送字符串时,每接收一个字符,就保存在数组里,但是串口中断里要设置变量来引导字符放在数组的位置

以上是关于我在用STM32串口DMA接收数据时,为啥在接收过程中,我的程序停止运行了,接收完成后又开始运行,求解?的主要内容,如果未能解决你的问题,请参考以下文章

stm32 串口发送数组 cpu可以工作吗

stm32dma串口没有收到包头

STM32使用DMA接收串口数据

STM32F4 DMA接收串口定长数据,串口每秒来1000个数据,使用DMA-Normal模式

STM32F4 DMA接收串口定长数据,串口每秒来1000个数据,使用DMA-Normal模式

65 STM32F0系列 串口DMA循环接收实验记录