DST_Buffer[i] = SRC_Const_Buffer[i]; }
/* 保存计时数据 */ TickCntCPU = Tick; for(i = 0; i < BufferSize; i++) {
DST_Buffer[i] = 0; } Tick = 0;
DMA_Cmd(DMA1_Channel6, ENABLE); /* 等待传输完成 */
while(CurrDataCounter != 0); TickCntDMA = Tick;
if(strncmp((const char*)SRC_Const_Buffer, (const char*)DST_Buffer, BufferSize) == 0) {
printf(\ } else {
printf(\ }
printf(\ printf(\ while(1); }
RCC_Configuration() /*在前面基础上增加 开启 DMA , USART1 和 GPIOA 时钟 */ {
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA1, ENABLE); }
void NVIC_Configuration(void) {
/* 定义NVIC初始化结构体 NVIC_InitStructure */ NVIC_InitTypeDef NVIC_InitStructure;
/* #ifdef...#else...#endif结构的作用是根据预编译条件决定中断向量表起始地址*/ NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 11 页 共 12页
/* 开启DMA16通道中断控制,0级先占优先级,0级次占优先级*/ NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel6_IRQChannel; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init(&NVIC_InitStructure); }
void DMA_Configuration(void) {
DMA_InitTypeDef DMA_InitStructure;
DMA_DeInit(DMA1_Channel6);
DMA_InitStructure.DMA_PeripheralBaseAddr = (u32)SRC_Const_Buffer; DMA_InitStructure.DMA_MemoryBaseAddr = (u32)DST_Buffer; DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralSRC; DMA_InitStructure.DMA_BufferSize = BufferSize;
DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Enable; DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;
DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_Word; DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_Word; DMA_InitStructure.DMA_Mode = DMA_Mode_Normal; DMA_InitStructure.DMA_Priority = DMA_Priority_High; DMA_InitStructure.DMA_M2M = DMA_M2M_Enable; DMA_Init(DMA1_Channel6, &DMA_InitStructure); DMA_ITConfig(DMA1_Channel6, DMA_IT_TC, ENABLE); CurrDataCounter= DMA_GetCurrDataCounter(DMA1_Channel6); }
《嵌入式系统原理与应用 》课程试卷(A )参考答案及评分标准 第 12 页 共 12页