📄 stm32f10x_dma.c
字号:
/* Initialize the DMA_DIR member [初始化DMA_DIR成员]*/
DMA_InitStruct->DMA_DIR = DMA_DIR_PeripheralSRC;
/* Initialize the DMA_BufferSize member[初始化DMA_BufferSize成员] */
DMA_InitStruct->DMA_BufferSize = 0;
/* Initialize the DMA_PeripheralInc member [初始化DMA_PeripheralInc成员]*/
DMA_InitStruct->DMA_PeripheralInc = DMA_PeripheralInc_Disable;
/* Initialize the DMA_MemoryInc member [初始化DMA_MemoryInc成员]*/
DMA_InitStruct->DMA_MemoryInc = DMA_MemoryInc_Disable;
/* Initialize the DMA_PeripheralDataSize member [初始化DMA_PeripheralDataSize成员]*/
DMA_InitStruct->DMA_PeripheralDataSize = DMA_PeripheralDataSize_Byte;
/* Initialize the DMA_MemoryDataSize member [初始化DMA_MemoryDataSize成员]*/
DMA_InitStruct->DMA_MemoryDataSize = DMA_MemoryDataSize_Byte;
/* Initialize the DMA_Mode member [初始化DMA_DMA_Mode成员]*/
DMA_InitStruct->DMA_Mode = DMA_Mode_Normal;
/* Initialize the DMA_Priority member [初始化DMA_Priority成员]*/
DMA_InitStruct->DMA_Priority = DMA_Priority_Low;
/* Initialize the DMA_M2M member [初始化DMA_M2M成员]*/
DMA_InitStruct->DMA_M2M = DMA_M2M_Disable;
}
/*******************************************************************************
* 函数名称: DMA_Cmd
* 功能描述: 使能(或禁能)特定的DMAy通道x .
* 输入参数: (1)DMAy_Channelx:y可以是1或者2,DMA1的x可以是1到7 和DMA2的x可以是1到5来选择各通道.
* (2)NewState:DMA通道的新状态。该参数可为:ENABLE或DISABLE.
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void DMA_Cmd(DMA_Channel_TypeDef* DMAy_Channelx, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the selected DMAy Channelx [使能选择的DMAy通道x]*/
DMAy_Channelx->CCR |= CCR_ENABLE_Set;
}
else
{
/* Disable the selected DMAy Channelx [禁止选择的DMAy通道x]*/
DMAy_Channelx->CCR &= CCR_ENABLE_Reset;
}
}
/*******************************************************************************
* 函数名称: DMA_ITConfig
* 功能描述: 使能(或禁能)特定的DMAy通道x的中断.
* 输入参数: (1)DMAy_Channelx:y可以是1或者2,DMA1的x可以是1到7 和DMA2的x可以是1到5来选择各通道.
* (2)DMA_IT: 确定DMA通道的中断源是否被使能。
* 这个参数可以是下面值的任意组合:
* - DMA_IT_TC: 传输结束中断屏蔽 mask
* - DMA_IT_HT: 半传输中断屏蔽 mask
* - DMA_IT_TE: 传输错误中断屏蔽 mask
* (3)NewState:指定的DMA通道中断的新状态。该参数可为:ENABLE或DISABLE
* 输出参数: 无
* 返回参数: 无
*******************************************************************************/
void DMA_ITConfig(DMA_Channel_TypeDef* DMAy_Channelx, u32 DMA_IT, FunctionalState NewState)
{
/* Check the parameters [检查参数]*/
assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
assert_param(IS_DMA_CONFIG_IT(DMA_IT));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the selected DMA interrupts [使能选择的DMA中断]*/
DMAy_Channelx->CCR |= DMA_IT;
}
else
{
/* Disable the selected DMA interrupts [禁止选择的DMA中断]*/
DMAy_Channelx->CCR &= ~DMA_IT;
}
}
/*******************************************************************************
* 函数名称: DMA_GetCurrDataCounter
* 功能描述: 返回当前DMAy通道x传输剩余的数据单元.
* 输入参数: DMAy_Channelx:y可以是1或者2,DMA1的x可以是1到7 和DMA2的x可以是1到5来选择各通道.
* 输出参数: 无
* 返回参数: 当前DMA通道传输中剩余的数据单元的数量.
*******************************************************************************/
u16 DMA_GetCurrDataCounter(DMA_Channel_TypeDef* DMAy_Channelx)
{
/* Check the parameters [检查参数]*/
assert_param(IS_DMA_ALL_PERIPH(DMAy_Channelx));
/* Return the number of remaining data units for DMAy Channelx [返回DMAy Channelx剩余数据单元的数字]*/
return ((u16)(DMAy_Channelx->CNDTR));
}
/*******************************************************************************
* 函数名称: DMA_GetFlagStatus
* 功能描述: 检查特定的DMAy通道x的标志是否被置位了
* 输入参数: DMA_FLAG:指定需要检查的标志。
* 这个参数可以是下面的值之一:
* - DMA1_FLAG_GL1: DMA1通道1全局标志
* - DMA1_FLAG_TC1: DMA1通道1传输结束标志
* - DMA1_FLAG_HT1: DMA1通道1半传输标志
* - DMA1_FLAG_TE1: DMA1通道1传输错误标志
* - DMA1_FLAG_GL2: DMA1 通道2 全局标志.
* - DMA1_FLAG_TC2: DMA1 通道2 传输结束标志.
* - DMA1_FLAG_HT2: DMA1 通道2 半传输标志.
* - DMA1_FLAG_TE2: DMA1 通道2 传输错误标志.
* - DMA1_FLAG_GL3: DMA1 通道3 全局标志.
* - DMA1_FLAG_TC3: DMA1 通道3 传输结束标志.
* - DMA1_FLAG_HT3: DMA1 通道3 半传输标志.
* - DMA1_FLAG_TE3: DMA1 通道3 传输错误标志.
* - DMA1_FLAG_GL4: DMA1 通道4 全局标志.
* - DMA1_FLAG_TC4: DMA1 通道4 传输结束标志.
* - DMA1_FLAG_HT4: DMA1 通道4 半传输标志.
* - DMA1_FLAG_TE4: DMA1 通道4 传输错误标志.
* - DMA1_FLAG_GL5: DMA1 通道5 全局标志.
* - DMA1_FLAG_TC5: DMA1 通道5 传输结束标志.
* - DMA1_FLAG_HT5: DMA1 通道5 半传输标志.
* - DMA1_FLAG_TE5: DMA1 通道5 传输错误标志.
* - DMA1_FLAG_GL6: DMA1 通道6 全局标志.
* - DMA1_FLAG_TC6: DMA1 通道6 传输结束标志.
* - DMA1_FLAG_HT6: DMA1 通道6 半传输标志.
* - DMA1_FLAG_TE6: DMA1 通道6 传输错误标志.
* - DMA1_FLAG_GL7: DMA1 通道7 全局标志.
* - DMA1_FLAG_TC7: DMA1 通道7 传输结束标志.
* - DMA1_FLAG_HT7: DMA1 通道7 半传输标志.
* - DMA1_FLAG_TE7: DMA1 通道7 传输错误标志.
* - DMA2_FLAG_GL1: DMA2 通道1 全局标志.
* - DMA2_FLAG_TC1: DMA2 通道1 传输结束标志.
* - DMA2_FLAG_HT1: DMA2 通道1 半传输标志.
* - DMA2_FLAG_TE1: DMA2 通道1 传输错误标志.
* - DMA2_FLAG_GL2: DMA2 通道2 全局标志.
* - DMA2_FLAG_TC2: DMA2 通道2 传输结束标志.
* - DMA2_FLAG_HT2: DMA2 通道2 半传输标志.
* - DMA2_FLAG_TE2: DMA2 通道2 传输错误标志.
* - DMA2_FLAG_GL3: DMA2 通道3 全局标志.
* - DMA2_FLAG_TC3: DMA2 通道3 传输结束标志.
* - DMA2_FLAG_HT3: DMA2 通道3 半传输标志.
* - DMA2_FLAG_TE3: DMA2 通道3 传输错误标志.
* - DMA2_FLAG_GL4: DMA2 通道4 全局标志.
* - DMA2_FLAG_TC4: DMA2 通道4 传输结束标志.
* - DMA2_FLAG_HT4: DMA2 通道4 半传输标志.
* - DMA2_FLAG_TE4: DMA2 通道4 传输错误标志.
* - DMA2_FLAG_GL5: DMA2 通道5 全局标志.
* - DMA2_FLAG_TC5: DMA2 通道5 传输结束标志.
* - DMA2_FLAG_HT5: DMA2 通道5 半传输标志.
* - DMA2_FLAG_TE5: DMA2 通道5 传输错误标志.
* 输出参数: 无
* 返回参数: DMA_FLAG的新状态(SET或RESET).
*******************************************************************************/
FlagStatus DMA_GetFlagStatus(u32 DMA_FLAG)
{
FlagStatus bitstatus = RESET;
u32 tmpreg = 0;
/* Check the parameters [检查参数]*/
assert_param(IS_DMA_GET_FLAG(DMA_FLAG));
/* Calculate the used DMA [计算使用的DMA]*/
if ((DMA_FLAG & FLAG_Mask) != (u32)RESET)
{
/* Get DMA2 ISR register value [取得DMA2 ISR寄存器值]*/
tmpreg = DMA2->ISR ;
}
else
{
/* Get DMA1 ISR register value [取得DMA1 ISR寄存器值]*/
tmpreg = DMA1->ISR ;
}
/* Check the status of the specified DMA flag [检查指定的DMA标志状态]*/
if ((tmpreg & DMA_FLAG) != (u32)RESET)
{
/* DMA_FLAG is set [置位DMA_FLAG]*/
bitstatus = SET;
}
else
{
/* DMA_FLAG is reset [复位DMA_FLAG]*/
bitstatus = RESET;
}
/* Return the DMA_FLAG status [返回DMA_FLAG状态]*/
return bitstatus;
}
/*******************************************************************************
* 函数名称: DMA_ClearFlag
* 功能描述: 清除 DMAy 通道x 挂起标志.
* 输入参数: DMA_FLAG:需要清除的标志。使用"|"运算符可以清除多个标志。
* 这个参数可以是下面值的任意组合 (同一个 DMA) :
* - DMA1_FLAG_GL1: DMA1 通道1 全局标志.
* - DMA1_FLAG_TC1: DMA1 通道1 传输结束标志.
* - DMA1_FLAG_HT1: DMA1 通道1 半传输标志.
* - DMA1_FLAG_TE1: DMA1 通道1 传输错误标志.
* - DMA1_FLAG_GL2: DMA1 通道2 全局标志.
* - DMA1_FLAG_TC2: DMA1 通道2 传输结束标志.
* - DMA1_FLAG_HT2: DMA1 通道2 半传输标志.
* - DMA1_FLAG_TE2: DMA1 通道2 传输错误标志.
* - DMA1_FLAG_GL3: DMA1 通道3 全局标志.
* - DMA1_FLAG_TC3: DMA1 通道3 传输结束标志.
* - DMA1_FLAG_HT3: DMA1 通道3 半传输标志.
* - DMA1_FLAG_TE3: DMA1 通道3 传输错误标志.
* - DMA1_FLAG_GL4: DMA1 通道4 全局标志.
* - DMA1_FLAG_TC4: DMA1 通道4 传输结束标志.
* - DMA1_FLAG_HT4: DMA1 通道4 半传输标志.
* - DMA1_FLAG_TE4: DMA1 通道4 传输错误标志.
* - DMA1_FLAG_GL5: DMA1 通道5 全局标志.
* - DMA1_FLAG_TC5: DMA1 通道5 传输结束标志.
* - DMA1_FLAG_HT5: DMA1 通道5 半传输标志.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -