STM32DMA+串口完成中断 接收和发送

本文介绍了如何在STM32F103单片机上利用串口DMA和完成中断实现高效的数据接收和发送。通过设置串口接收映射到DMA通道,开启串口完成中断,数据接收完成后在中断中处理,避免频繁中断。同时,发送时同样使用DMA,发送完成后触发中断反转485使能引脚。详细代码和说明见作者分享的资源。
摘要由CSDN通过智能技术生成

最近在使用STM32F103单片机进行串口接收处理不定长数据测试时有两个需求。1、需要接收不定长的数据。2、提高串口响应速度。

一直看过很多贴子关于串口+DMA+完成中断的用法,但是没有找到合适的。参考了很多资料自己整理一份程序代码,供大家参考。

软件链接:https://download.csdn.net/download/shaozp529/11573556

软件设计思路:

接收函数串口接收映射到对应的DMA通道上,串口初始化时需要将串口完成中断打开,当串口接收的一组数据后,在中断中处理DMA接收数据,并获取接收的数据长度,最终在主函数中进行串口数据解析。这样串口不会频繁进中断

发送函数串口发送映射到对应的DMA通道上,DMA对应的通道的DMA中断也打开,DMA发送完毕之后触发DMA发送完成中断,在中断中需要反转485使能引脚。详细参考代码。

 

软件资源已上传到我的账户上:但是资源链接暂时无法上传,可以在我账户下发寻找。

串口初始化函数:


/**************************************************************************************
 *【函 数 名】:void USART1_RS4851_Configuration(void)
 *【功    能】:串口1配置用于485与上位机通讯
 *【接口变量】:无
 *【内部变量】:无
 *【返 回 值】:无
 *【撰 写 人】:邵志鹏   撰写日期:2017年10月25日
 *【修 改 人】:         修改日期:                修改原因:
 **************************************************************************************/
void USART1_RS485_Configuration(void)
{
    
    /*串口中断源优先级 和DMA中断优先级在main函数初始化函数中集中处理*/
    
    USART_InitTypeDef USART_InitStructure;
    GPIO_InitTypeDef GPIO_InitStructure;
    NVIC_InitTypeDef NVIC_InitStructure;

    /* 配置USART1-TX脚 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    /* 配置USART1-RX脚 */
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);

    //USART1_R/D	PA11
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP
  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值