本篇文章是在蓝桥杯嵌入式-LCD完整的项目下补充完成的。如果需要代码,直接看第四部分的下载链接。

一、STM32CubMX配置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、代码方面

2.1 usart.c

2.1.1 修改位置

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.2 对应代码
#include "task.h"
typedef struct __FILE FILE;
uint8_t uart_rx_dma_buffer[128];

  HAL_UARTEx_ReceiveToIdle_DMA(&huart1, uart_rx_dma_buffer, sizeof(uart_rx_dma_buffer));
  __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);

int fputc(int ch,FILE*str)
{
  HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,10);
  return ch;
}

2.2 stm32g4xx_it.c

2.2.1 修改位置

在这里插入图片描述
在这里插入图片描述

2.2.2 对应代码
#include "task.h"

  HAL_UARTEx_ReceiveToIdle_DMA(&huart1, uart_rx_dma_buffer, sizeof(uart_rx_dma_buffer));
  __HAL_DMA_DISABLE_IT(&hdma_usart1_rx,DMA_IT_HT);

2.3 task.c

2.3.1 修改位置

在这里插入图片描述
在这里插入图片描述

2.3.2 对应代码
extern uint8_t uart_rx_dma_buffer[]; // 假设在别处定义
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{
    if (huart->Instance == USART1)
    {
        printf("DMA:%s\r\n", uart_rx_dma_buffer);
        memset(uart_rx_dma_buffer, 0, sizeof(uart_rx_dma_buffer));
    }
}

void uart_proc()
{
    // 待扩展:处理接收到的串口数据
	//printf("haha\r");
}


task_t scheduler_t[] =
{
    {lcd_proc, 100, 0},
	{uart_proc, 100, 0}
};

2.4 task.h

2.4.1 修改位置

在这里插入图片描述

2.4.2 对应代码
#include "usart.h"

extern uint8_t uart_rx_dma_buffer[128];

三、其他

3.1 功能校验(初识篇 4.3)

跳转链接:https://blog.csdn.net/weixin_58504813/article/details/156902560?spm=1011.2415.3001.10575&sharefrom=mp_manage_link

位置:
在这里插入图片描述

3.2 注意事项

如果是新建的文件要使用串口,记得勾选微库。
在这里插入图片描述

3.3 完整代码下载

资料下载:https://pan.quark.cn/s/08f8e6116512

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐