蓝桥杯嵌入式-UART(串口带DMA)
·
本篇文章是在蓝桥杯嵌入式-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
更多推荐
所有评论(0)