下面是关于TIM1时基参数的初始配置,其中ARR和CCR1值我是随便设定的,算是个过渡值,目的就是产生更新事件和比较事件,之后都会按照代码中预定的数据运行。
下面是有关TIM1的基于更新事件和通道1比较事件的DMA配置。
下面截图是关于DAC的CubeMx配置,比较简单,开启其输出功能即可。
下面截图里的数组DacOutData[10]存放不同时刻DAC输出所对应的数据。数组PulseData3[30]存放10次DMA Burst 传输用到的数据。显然这两个数组数据在使用时间上要匹配,否则输出波形对不了。
下面是具体的用户代码,使用CubeMx进行配置和STM32 HAL库函数,以源码形式放在下面,供有需要的参考、使用。 - HAL_DMA_Start_IT(&hdma_tim1_up, (uint32_t) DacOutData, \
- (uint32_t)&hdac.Instance->DHR12R1, 10);
- __HAL_TIM_CLEAR_FLAG(&htim1,TIM_FLAG_UPDATE);
- __HAL_TIM_CLEAR_FLAG(&htim1,TIM_DMA_CC1);
- HAL_TIM_DMABurst_MultiWriteStart(&htim1, TIM_DMABASE_ARR, \
- TIM_DMA_CC1,(uint32_t *)PulseData3, \
- TIM_DMABURSTLENGTH_3TRANSFERS,10*3);
- __HAL_TIM_ENABLE_DMA(&htim1, TIM_DMA_UPDATE);
- HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
- __HAL_TIM_ENABLE(&htim1);
复制代码
下面黑底黄线图是基于上面配置及代码的最终实现截图。跟最初的需求曲线进行比对,不难发现是一致的。
OK,今天的分享就到这里,是些比较基础的东西。只有掌握最基础的,才会有最灵活的发挥。
|