CUbeMX HAL中库 高级定时器部分有2个函数,清楚不太这两个函数的区别 第一个的英文HAL_TIM_DMABurst_WriteStart() 第二个是HAL_TIM_OC_Start_DMA() 这两个用起来有什么区别 描述如下 / ** * @brief配置DMA突发以将数据从内存传输到TIM外围设备 * @param htim TIM句柄 * @param BurstBaseAddress TIM DMA从其开始写入数据的基地址 *该参数可以是以下值之一: * @arg TIM_DMABASE_CR1 * @arg TIM_DMABASE_CR2 * @arg TIM_DMABASE_SMCR * @arg TIM_DMABASE_DIER * @arg TIM_DMABASE_SR * @arg TIM_DMABASE_EGR * @arg TIM_DMABASE_CCMR1 * @arg TIM_DMABASE_CCMR2 * @arg TIM_DMABASE_CCER * @arg TIM_DMABASE_CNT * @arg TIM_DMABASE_PSC * @arg TIM_DMABASE_ARR * @arg TIM_DMABASE_RCR * @arg TIM_DMABASE_CCR1 * @arg TIM_DMABASE_CCR2 * @arg TIM_DMABASE_CCR3 * @arg TIM_DMABASE_CCR4 * @arg TIM_DMABASE_BDTR * @ param BurstRequestSrc TIM DMA请求源 *此参数可以是以下值之一: * @arg TIM_DMA_UPDATE:TIM更新中断源 * @arg TIM_DMA_CC1:TIM捕获比较1 DMA源 * @arg TIM_DMA_CC2:TIM捕获比较2 DMA源 * @arg TIM_DMA_CC3:TIM捕获比较3 DMA源 * @arg TIM_DMA_CC4:TIM捕获比较4 DMA源 * @arg TIM_DMA_COM:TIM换向DMA源 * @arg TIM_DMA_TRIGGER:TIM触发DMA源 * @param BurstBuffer缓冲区地址。 * @param BurstLength DMA突发长度。此参数可以是 TIM_DMABURSTLENGTH_1TRANSFER和TIM_DMABURSTLENGTH_18TRANSFERS之间的一个值*。 * @note仅当BurstLength等于DMA数据传输长度时,才应使用此函数。 * @retval HAL状态 * / HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef * htim,uint32_t的BurstBaseAddress,uint32_t的BurstRequestSrc, uint32_t的* BurstBuffer,uint32_t的BurstLength) 第二个是HAL_TIM_IC_Start_DMA() 这两个用起来有什么区别 / ** * @brief启动在TIM输入捕捉测量DMA模式。 * @param htim TIM输入捕获句柄 * @param通道TIM通道启用 *该参数可以是以下值之一: * @arg TIM_CHANNEL_1:TIM通道1已选择 * @arg TIM_CHANNEL_2:TIM通道2已选择 * @arg TIM_CHANNEL_3 :已选择TIM通道3 * @arg TIM_CHANNEL_4:TIM通道4已选择 * @param pData目标缓冲区地址。 * @param长度从TIM外设传输到存储器的数据长度。 * @retval HAL状态 * / HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef * htim,uint32_t通道,uint32_t * pData,uint16_t长度) |
第一个函数是说定时器具有burst传输。也就是一次DMA请求可以搬运一组数据。因此需要目标寄存器基地址和长度作为参数。 这个在手册上有描述,并且在寄存器处增加了一个例子说明。 第二个函数是输入捕获的DMA模式,将捕获值通过DMA模式存贮到RAM中去。所以需要知道捕获的哪个通道,缓冲区和长度的参数。 |