STM32H743 USART1 LL 库

本文介绍了如何利用STM32H743的LL库配置串口1(USART1),结合空闲中断和DMA实现数据接收。在工程中,分别定义了接收缓存、发送缓存和处理缓存大小,并在main.c文件中检查并处理接收到的数据。经过0级优化的编译文件大小得以减小。
摘要由CSDN通过智能技术生成

空闲中断+DMA接收数据

使用LL库配置,可与HAL库一起使用,0级优化编译文件大小如下:
在这里插入图片描述

1.工程目录

在这里插入图片描述

2.代码配置

usart1.h

主要定义接收缓存,发送缓存,处理缓存大小

#ifndef _USART1_H
#define _USART1_H

#include "stm32h7xx.h"

#define USART1_TX_BUFFER_SIZE (1 * 1024)
#define USART1_RX_BUFFER_SIZE (1 * 1024)
#define USART1_RX_HANDLE_SIZE (1 * 1024)

extern uint8_t USART1_TX_BUFFER[USART1_TX_BUFFER_SIZE];
extern uint8_t USART1_RX_BUFFER[USART1_RX_BUFFER_SIZE];
extern uint8_t USART1_RX_HANDLE[USART1_RX_HANDLE_SIZE];

extern uint32_t USART_RX_CNT;			//接收的字节数


void IAP_USART1_Init(void);


void DMA_START(DMA_TypeDef *DMAx, uint32_t Stream, uint32_t *SRC_ADDR, uint32_t *DES_ADDR, uint32_t Data_Len, uint32_t Direction);

#endif

usart1.c

DMA1的USART1 TX RX都配置好了,但是一般不需要,所以虽然配置了但未使用

#include "usart1.h"
#include "string.h"
#include "stm32h7xx_ll_utils.h"
#include "stm32h7xx_ll_dma.h"
#include "stm32h7xx_ll_usart.h"
#include "stm32h7xx_ll_gpio.h"

uint8_t USART1_TX_BUFFER[USART1_TX_BUFFER_SIZE] = {
   0};
uint8_t USART1_RX_BUFFER[USART1_RX_BUFFER_SIZE] = {
   0};
uint8_t USART1_RX_HANDLE[USART1_RX_HANDLE_SIZE] = {
   0};

uint32_t USART_RX_CNT = 0;			//接收的字节数

/**
  * @brief 配置USART1串口.
  */
void USART1_UART_Init(void)
{
   
	LL_USART_InitTypeDef USART_InitStruct = {
   0};
	LL_GPIO_InitTypeDef GPIO_InitStruct = {
   0};
	
	//开启外设 USART1 时钟
	LL_APB2_GRP1_EnableClock(LL_APB2_GRP1_PERIPH_USART1);
	//开启 GPIOA 时钟
	LL_AHB4_GRP1_EnableClock(LL_AHB4_GRP1_PERIPH_GPIOA);
	
	//USART1 GPIO Configuration  
	//PA9    ------> USART1_TX
	//PA10   ------> USART1_RX 

	GPIO_InitStruct.Pin = LL_GPIO_PIN_9|LL_GPIO_PIN_10;
	GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;
	GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_HIGH;
	GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
	GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
	GPIO_InitStruct.Alternate = LL_GPIO_AF_7;
	//初始化 PA9 PA10
	LL_GPIO_Init(GPIOA, &GPIO_InitStruct);
	
	USART_InitStruct.PrescalerValue = LL_USART_PRESCALER_DIV1;		//时钟不分频
	USART_InitStruct.BaudRate = 512000;								//波特率512000
	USART_InitStruct.DataWidth = LL_USART_DATAWIDTH_8B;				//数据宽度8位
	USART_InitStruct.StopBits = LL_USART_STOPBITS_1;				//一个停止位
	USART_InitStruct.Parity = LL_USART_PARITY_NONE;					//无奇偶校验
	USART_InitStruct.TransferDirection = LL_USART_DIRECTION_TX_RX;	//开启TX RX
	USART_InitStruct.HardwareFlowControl = LL_USART_HWCONTROL_NONE;	//无硬件流控制
	USART_InitStruct.OverSampling = LL_USART_OVERSAMPLING_16;		//16倍过采样
	//初始化 USART1
	LL_USART_Init(USART1, &USART_InitStruct);
	LL_USART_SetTXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);//1/8 FIFO
	LL_USART_SetRXFIFOThreshold(USART1, LL_USART_FIFOTHRESHOLD_1_8);
	//LL_USART_EnableFIFO(USART1);
	LL_USART_DisableFIFO(USART1);									//不使用 FIFO
	LL_USART_ConfigA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值