欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 蓝桥杯嵌入式(总结自用)

蓝桥杯嵌入式(总结自用)

2025/5/6 21:52:26 来源:https://blog.csdn.net/2301_79913420/article/details/146303099  浏览:    关键词:蓝桥杯嵌入式(总结自用)

3.16

今天从开头学到串口的DMA转运,看的是西风的视频(下面附上链接)

Uart、DMA、ADC_哔哩哔哩_bilibili

1.串口的DMA转运重要知识点:
 

 (1)USART_APP.C中

#include "USART.H"
#include "USART_APP.H"
#include "LCD_APP.H"#define BUUFER_SIZE 64uint8_t usart_read_buffer[BUUFER_SIZE];
//串口中断
//void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
//{
//	if(huart->Instance == USART1)
//	{
//		uart_rx_ticks = uwTick;
//		uart_rx_index++;
//		
//		HAL_UART_Receive_IT(&huart1, &uart_rx_buffer[uart_rx_index], 1);
//		
//	}
//}
//空闲中断
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
{printf("dma data:%s\r\n", uart_rx_dma_buffer);
//	LcdSprintf(Line1, "%s", uart_rx_dma_buffer);memset(uart_rx_dma_buffer, 0, sizeof(uart_rx_dma_buffer));
}
void usart_proc(void)
{
//串口中断
//	 if(uart_rx_index == 0) return;//     // 如果从最后一次接收到数据到现在已经超过100ms
//     if(uwTick - uart_rx_ticks > 100) // 100ms内没有收到新的数据
//     {
//         printf("uart data: %s\n", uart_rx_buffer);//         // 清空接收缓冲区,将接收索引置零
//         memset(uart_rx_buffer, 0, uart_rx_index);
//         uart_rx_index = 0;
//      
//         // 将UART接收缓冲区指针重置为接收缓冲区的起始位置
//         huart1.pRxBuffPtr = uart_rx_buffer;
//     }//空闲中断
}

我觉得DMA转运应该是比赛中最应该使用的,西风的视频里面讲到串口中断直接进行处理会造成数码管的卡死,使用DMA转运则会减轻串口的使用时间,从而解决 数码管的卡死

 

(2)stm32g4xx_it.c和usart.c中

一定记得加上:
 

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

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词