STM32H743的485+DMA收发

         最近使用h743做串口空闲中断+dma的配置,发现网上的资料参差不齐,有的很繁杂。自己配置出来之后对其做一个记录,方便之后查阅。

CUBEMX配置

 选择时钟源

配置时钟

①②选好之后,在③处输入你想要配置 时钟总频按回车系统会自动配置

串口配置

io口配置

工程使用的是usart3,选用PC10和PC11两个IO口;

        使用推挽输出,配置上拉

DMA配置

RX的DMA选用连续转换,TX用单次转换就好了。DMA通道自己选用,本工程使用的2-0和2-1;

usart配置

使用默认配置即可,波特率自己选择

485使能引脚选择

此处选择默认输出电平是,按照自己的485芯片选择接收电平。我使用的低电平接收信号,因此此处为默认低电平;

生成代码

代码编写

DMA接收

在usart.c中,找到usart3的初始化函数,使用“HAL_UARTEx_ReceiveToIdle_DMA”函数去完成DMA接收,这个函数的描述呢如下,函数自身就有空闲检测功能,可以代替上面的打开空闲中断以及DMA接收;为了方便,工程直接使用的该函数。有大佬也可指出二者具体的不同,笔者功力不深理解不太到位

接收回调函数

看到优快云上大部分文章都还在是usart中断中手动去读标志位,读数据,然后清除标志位,很不理解在HAL库生成的公用中断中已经有清除标志位以及读标志位的代码了,直接调用中断回调函数即可

        在中断中停止DMA接收,如果不停止DMA接收,下一次接收到的数据会接在上一次的后面进行:先接收一个10字节数据,然后再接收一个3字节数据就能看到第二次接收的数据在接收数组的第11个元素开始而非第一个元素,关闭DMA可以确保每次接收到的数据从数组的第一个元素开始放置。

        将接收标志位置1,将接收缓冲区复制到数据处理数组中,然后清空接收缓冲区;

        在回调函数中尽可能得少放置执行代码。

数据处理

        在main函数中,当接收标志为1的时候,u3_cs为高电平,然后是使用DMA发送发送缓冲区中的值;

发送回调函数

        在发送回调函数中做一些处理工作,然后重新打开DMA接收;

注意

        1.以上为本项目中的配置,为了更直观的对整体流程有个印象,工作者不可能接收完成之后,等数据处理完成发送之后再次去打开dma接收,在哪里去打开DMA接收就要看使劲情况了

        2.以上为默认MPU配置,即不对MPU做任何修改的配置,如果对MPU进行了配置,还需添加如下代码才能读到DMA值。

具体到哪个地址,看自己配置的MPU块区,以及STM32H743的内存地址分区。

STM32是一种高性能的32位微控制器,拥有丰富的外设资源和DMA技术,适合于各种应用场合。RS485是一种串行通信协议,可以用于远距离传输数据。在STM32上使用RS485协议进行通信,通常需要使用软件实现收发。而利用DMA技术可以提高数据传输效率,减轻CPU负担。 STM32提供了丰富的串口外设资源,包括USART、UART、SPI等。其中,USART支持RS485模式,可以方便地实现RS485通信,而UART则需要通过软件实现。在软件实现RS485收发时,通常采用半双工方式,即同一时刻只能进行发送或接收。为了实现快速、可靠的数据传输,可以使用DMA技术。 DMA(Direct Memory Access)直接存储器访问技术是一种硬件加速技术,可以使外设在不经过CPU的干预下将数据直接传输到内存中,或者将内存中的数据直接传输到外设中。在RS485通信中,可以使用DMA技术来实现数据缓存、数据收发等功能,从而提高数据传输效率和CPU利用率。 使用STM32进行RS485 DMA软件收发,通常需要完成以下步骤: 1.配置串口外设资源,包括USART或UART的初始化,波特率、数据位、停止位、校验位等设置。 2.配置DMA外设资源,包括DMA通道、数据传输方向、数据长度、传输模式(单次传输或循环传输)、中断控制器等设置。 3.实现DMA传输完成中断处理函数,以便在数据传输完成后对数据进行处理或者进行下一步操作。 4.在应用程序中实现接收数据和发送数据的功能,包括数据的缓存、传输、校验和处理等。 5.使用半双工模式进行数据收发,以避免数据冲突和数据丢失等问题。 以上就是STM32 RS485 DMA软件收发的基本实现方法。使用DMA技术可以有效地提高数据传输效率,减轻CPU负担,避免数据丢失和冲突等问题,适用于对数据传输效率有较高要求的应用场合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值