STM32 LL库串口收发

该文描述了如何在STM32F103RC微控制器上使用HAL库和LL库配合DMA进行串口通信的设置。配置包括CubeMX中的时钟设置、串口参数(115200波特率,8位数据,无校验,1个停止位),以及DMA的配置,如TX使用DMA2通道5,RX设置为循环模式并使用DMA2通道3。项目中采用两级缓冲策略,并在DMA空闲中断中处理接收的数据,同时提供了阻塞式发送函数fputc的实现。

基于STM32F103RC操作
程序混用HAL和LL库

CubeMX配置

配置时钟

配置时钟1
配置时钟2

串口参数

  • 波特率:115200
  • 长度:8bit
  • 无校验
  • 1停止位
    串口参数配置

设置DMA

  • TX:默认内存到外设,以Byte传输,使用DMA2通道5(根据需求可按手册重映射)
  • RX:默认外设到内存,需将模式改为循环模式(当收到后续数据可以更新),以Byte传输,使用DMA2通道3(根据需求可按手册重映射)
  • 启用串口中断
    TX DMA配置

RX DMA配置

启用串口中断

项目生成

  • 将串口更换为LL库
  • 设置项目
    串口设置为LL库
    设置项目
    设置项目

编码

采用两级缓冲,同时一级缓冲(DMA直接建立通讯的内存数据)须定义为全局变量。

定义(main.h)

/* USER CODE BEGIN ET */
#define UART_TX_LEN			10
#define UART_RX_LEN			10
typedef struct
{
   
   
	/* L1 buffer */
	uint8_t txBuf[UART_TX_LEN];
	uint8_t rxBuf[UART_RX_LEN];
	
	_Bool rx_flag;
	uint8_t rx_len;
	
	/* L2 buffer */
	uint8_t txBuf2[UART_TX_LEN];
	uint8_t rxBuf2[UART_RX_LEN];
	
}UART_Struct_t;
extern UART_Struct_t UART_Struct;
/* USER CODE END ET */

/* USER CODE BEGIN EFP */
void UART_SendBuf(uint16_t len);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值