STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收,解决第一笔数据无法收发问题

本文介绍了如何使用STM32CubeMX配置HAL库,实现串口和DMA的结合,以处理不定长度数据的发送和接收,同时解决了首次收发数据时遇到的问题。通过设置STM32F103VCTx的UART1,启用TX和RX的DMA,并启用中断,确保了串口通信的高效和灵活。在Keil 5中进行代码修改,包括Main.c和usart.c,以避免UART IDLE中断导致的首次数据接收失败。
摘要由CSDN通过智能技术生成

STM32CubeMX HAL库串口+DMA数据发送不定长度数据接收,解决第一笔数据无法收发问题

目的:

为了能使UART通讯不受长度和回车等字符限制,同时也记录下自己的实施过程,方便以后查阅.

使用工具:

  • STM32CubeMX 6.01 生成代码

  • 编译工具可以使用IAR或KEIL,依照个人习惯,本文使用KEIL 5

DFU代码生成:

STM32CubeMX部分:

  1. 打开STM32CubeMX
  2. 选择"ACCESS TO MCU SELECTOR""
  3. MCU选择"STM32F103VCTx"
  4. System Core配置

    RCC选择,

    如下图,High Speed Clock(HSE)选择Crystal,其他默认即可
    在这里插入图片描述
    SYS配置,
    如果用HAL库不进行SWD或JTAG配置,单片机只能进行下载一次程序,要进行第二次或更多次程序下载,需要按复位键(如果你的单片机有复位按键的话),或者用镊子夹住复位线路上的电容使其短路,点击Keil下载,再松开镊子,我们选择使用Serial Wire.
    SYS配置述

  5. USART1配置

    模式选择异步模式,其他参数默认
    TX和RX的DMA都打开在这里插入图片描述
    开启USART1的中断
    在这里插入图片描述

  6. Clock配置

    通常Clock会自动按照前边选择的功能自动分配,如果没有自动分配,可以按照以下进行配置:
    (1) 外部晶振选择8MHz
    (2) RTC晶振选择内部40kHz
    (3) USB必须要腰围48MHz,如果不是可以微调前方的选项.
    (4) HCLK可以选择与USB相同,或者更高也可以.
    在这里插入图片描述

  7. Project Manager设定

    Project设定,
    填写Project Name和存储位置,IDE选择MDK-ARM, 修改Linker Setting的Heap Size 为0x1000.
    在这里插入图片描述
    在这里插入图片描述

Keil 代码修改:

Main.c

作如下修改:

  1. 添加宏定义
//UART Define
#define UART1_RX_BUFFER_SIZE    128
#define UART1_TX_BUFFER_SIZE    128
#define USB_RX_BUFFER_SIZE      63

uint8_t g_USART1_RX_Buffer[UART1_RX_BUFFER_SIZE];
volatile uint8_t g_USART1_RX_Buffer_Size = 0;
volatile uint8_t g_USART1_RX_Received_Flg=0;
uint8_t g_USART1_DMA_RX_Buffer[UART1_RX_BUFFER_SIZE]
  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值