银杏科技有限公司旗下技术文档发布平台 | |||
技术支持电话 | 0379-69926675-801 | ||
技术支持邮件 | Gingko@vip.163.com | ||
版本 | 日期 | 作者 | 修改内容 |
---|---|---|---|
V1.0 | 2020-03-28 | gingko | 初次建立 |
1. 在主界面选择File–>New Project 或者直接点击ACCEE TO MCU SELECTOR 2. 出现芯片型号选择,搜索芯片的型号,双击型号,或者点击Start Project进入配置 在搜索栏的下面,提供的各种查找方式,可以选择芯片内核、型号等,可以帮助用户查找芯片。本实验选取的芯片型号为:STM32F407IGTx。 3. 配置RCC,使用外部时钟源 4. 配置调试引脚 5. 将LED对应的3个引脚(PI5,PI6,PI7)设置为GPIO_Output 6. 引脚模式配置 7. 配置DMA 8. 时钟源设置,选择外部高速时钟源,配置为最大主频 9. 工程文件的设置, 这里就是工程的各种配置,我们只用到有限几个,其他的默认即可 IDE我们使用的是 MDK5 10. 点击Code Generator,进行进一步配置
int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); //GPIO初始化 MX_DMA_Init(); //DMA初始化 dma2.initialize(); HAL_DMA_Start(&hdma_memtomem_dma2_stream0,(unsigned long int)src_buffer,(unsigned long int)dst_buffer,(unsigned long int)BUFFER_SIZE); //等待DMA传输完成 while(__HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0,DMA_FLAG_TCIF0_4) == SET); for(i = 0;i < BUFFER_SIZE;i++){ if(dst_buffer[i] != src_buffer[i]){ while(1){ //测试失败 HAL_Delay(500); LED_RED_ON; HAL_Delay(500); LED_RED_OFF; } } } while (1) //测试成功 { HAL_Delay(500); LED_BLUE_ON; HAL_Delay(500); LED_BLUE_OFF; } }
//DMA外设基地址 //定义src_buffer数组作为DMA传输数据源 //const 关键字将src_buffer数组变量定义为常量类型,表示数据存储在内部FLASH中 const unsigned long int src_buffer[BUFFER_SIZE] = 0x01020304,0x05060708,0x090A0B0C,0x0D0E0F10, 0x11121314,0x15161718,0x191A1B1C,0x1D1E1F20, 0x21222324,0x25262728,0x292A2B2C,0x2D2E2F30, 0x31323334,0x35363738,0x393A3B3C,0x3D3E3F40, 0x41424344,0x45464748,0x494A4B4C,0x4D4E4F50, 0x51525354,0x55565758,0x595A5B5C,0x5D5E5F60, 0x61626364,0x65666768,0x696A6B6C,0x6D6E6F70, 0x71727374,0x75767778,0x797A7B7C,0x7D7E7F80}; //DMA存储器地址 //定义dst_buffer数组作为DMA传输目标存储器,存储在内部SDAM中 unsigned long int dst_buffer[BUFFER_SIZE] = {0};
DMA_HandleTypeDef hdma_memtomem_dma2_stream0;
typedef struct __DMA_HandleTypeDef { DMA_Stream_TypeDef *Instance; //DMA寄存器基地址 DMA_InitTypeDef Init; //DMA通信参数 HAL_LockTypeDef Lock; //DMA锁定参数 __IO HAL_DMA_StateTypeDef State; void *Parent; void (* XferCpltCallback)( struct __DMA_HandleTypeDef * hdma); void (* XferHalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); void (* XferM1CpltCallback)( struct __DMA_HandleTypeDef * hdma); void (* XferM1HalfCpltCallback)( struct __DMA_HandleTypeDef * hdma); void (* XferErrorCallback)( struct __DMA_HandleTypeDef * hdma); void (* XferAbortCallback)( struct __DMA_HandleTypeDef * hdma); __IO uint32_t ErrorCode; uint32_t StreamBaseAddress; uint32_t StreamIndex; }DMA_HandleTypeDef;
typedef struct { uint32_t DMA_Channel; //选择通道 uint32_t DMA_PeripheralBaseAddr; //DMA外设基地址 uint32_t DMA_Memory0BaseAddr; //DMA存储器地址 uint32_t DMA_DIR; //DMA传输方向 uint32_t DMA_BufferSize; //数据传输量 uint32_t DMA_PeripheralInc; //外设增量模式选择 uint32_t DMA_MemoryInc; //存储器增量模式 uint32_t DMA_PeripheralDataSize; //设置外设数据宽度 uint32_t DMA_MemoryDataSize; //设置存储器数据宽度 uint32_t DMA_Mode; //运行模式选择 uint32_t DMA_Priority; //优先级选择 uint32_t DMA_FIFOMode; //FIFO模式选择 uint32_t DMA_FIFOThreshold; //FIFO阀值 uint32_t DMA_MemoryBurst; //存储器突发传输 uint32_t DMA_PeripheralBurst; //外设突发传输 }DMA_InitTypeDef;
HAL_StatusTypeDef HAL_DMA_Start(DMA_HandleTypeDef *hdma, uint32_t SrcAddress, uint32_t DstAddress, uint32_t DataLength)
__HAL_DMA_GET_FLAG(&hdma_memtomem_dma2_stream0,DMA_FLAG_TCIF0_4)
实验成功,iCore3 双核心板蓝色LED灯点亮;实验失败,红色LED灯闪烁。