基于STM32F103RC操作
程序混用HAL和LL库
CubeMX配置
配置时钟


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

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



项目生成
- 将串口更换为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);

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





