#include "sys.h" #include "usart.h" #include "delay.h" #include "led.h" #include "key.h" #include "LCD.h" #include "Dis_Picture.h" #include "Text.h" #include "GBK_LibDrive.h" #include "mpu.h" #include "dma.h" /*********************************************************************/ //DMA 实验 //STM32H7工程模板-HAL库函数版本 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*********************************************************************/ #define SEND_BUF_SIZE 7800 //发送数据长度,最好等于sizeof(TEXT_TO_SEND)+2的整数倍. u8 SendBuff[SEND_BUF_SIZE]; //发送数据缓冲区 const u8 TEXT_TO_SEND[]={" mcudev.taobao.com STM32H7XXX DMA 串口实验 "}; u16 i; u8 t=0; u8 j,mask=0; float pro=0; u8 tbuf[32]; int main(void) { Cache_Enable(); //打开L1-Cache Stm32_Clock_Init(160,5,2,4); //设置时钟,400Mhz HAL_Init(); //初始化HAL库 delay_init(400); //延时初始化 uart_init(115200); //串口初始化 LED_Init(); //初始化LED时钟 KEY_Init(); MPU_Memory_Protection(); //保护相关存储区域 LCD_Init(); //初始化2.0寸 240x320 高清屏 LCD显示 GBK_Lib_Init(); //硬件GBK字库初始化--(如果使用不带字库的液晶屏版本,此处可以屏蔽,不做字库初始化) LCD_Clear(WHITE); //清屏 MYDMA_Config(DMA2_Stream7); //初始化DMA Draw_Font16B(16,16,RED," STM32H7 DMA "); Draw_Font16B(16,32,BLUE," 嵌入式开发网 "); Draw_Font16B(16,48,BLUE,"mcudev.taobao.com"); Draw_Font24B(16,64,RED, "KEY2:Start"); //显示提示信息 j=sizeof(TEXT_TO_SEND); for(i=0;i=j)//加入换行符 { if(mask) { SendBuff[i]=0x0a; t=0; }else { SendBuff[i]=0x0d; mask++; } } else//复制TEXT_TO_SEND语句 { mask=0; SendBuff[i]=TEXT_TO_SEND[t]; t++; } } POINT_COLOR=BLUE;//设置字体为蓝色 i=0; while(1) { t=KEY_Scan(0); if(t==KEY2_PRES)//KEY0按下 { printf("\r\nDMA DATA:\r\n"); Draw_Font24B(8,90,RED, "Start Transimit.. "); Draw_Font24B(8,120,RED," % ");//显示百分号 HAL_UART_Transmit_DMA(&UART1_Handler,SendBuff,SEND_BUF_SIZE);//开启DMA传输 //使能串口1的DMA发送等待DMA传输完成,此时我们来做另外一些事,点灯 //实际应用中,传输数据期间,可以执行另外的任务 while(1) { if(__HAL_DMA_GET_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7))//等待DMA2_Steam7传输完成 { __HAL_DMA_CLEAR_FLAG(&UART1TxDMA_Handler,DMA_FLAG_TCIF3_7);//清除DMA2_Steam7传输完成标志 HAL_UART_DMAStop(&UART1_Handler); //传输完成以后关闭串口DMA break; } pro=__HAL_DMA_GET_COUNTER(&UART1TxDMA_Handler);//得到当前还剩余多少个数据 pro=1-pro/SEND_BUF_SIZE; //得到百分比 pro*=100; //扩大100倍 sprintf((char*)tbuf,"%5.2f % ",pro); //显示无符号十进制整数 Draw_Font24B(16,120,RED, tbuf);//显示百分号//显示100% } Draw_Font24B(8,120,RED, "100% ");//显示百分号//显示100% Draw_Font24B(8,90, RED, "Transimit Finished!");//提示传送完成 } i++; delay_ms(10); if(i==20) { LED2_Toggle;//提示系统正在运行 i=0; } } } /*********************************************************************/ //DMA 实验 //STM32H7工程模板-HAL库函数版本 //DevEBox 大越创新 //淘宝店铺:mcudev.taobao.com //淘宝店铺:shop389957290.taobao.com /*********************************************************************/