|
本帖最后由 billy 于 2021-11-21 16:25 编辑
各位好,我在做DAC输出波形的时候,通过DMA+TIM6触发,始终没有输出,具体描述如下,哪位能指导一二,看问题到底在哪?
一,首先确定DAC正常工作。
1.1,生成正弦波表格。
uint8_t dat[256] = {
128,131,134,137,141,144,147,150,153,156,159,162,165,168,171,174,177,180,183,186,189,191,194,197,199,202,205,207,209,212,
……………………
51,54,57,59,62,65,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109,112,115,119,122,125,128,
};
1.2,通过cubemx配置时钟,配置DAC输出:
1.3,生成keil工程,在main函数中通过for循环给DAC送正弦波数据表
int main(void)
{
/* USER CODE BEGIN 1 */
uint32_t i;
/* USER CODE END 1 */
这里省略了MX自动生成的代码
………………
/* USER CODE BEGIN 2 */
HAL_DAC_Start(&hdac,DAC_CHANNEL_2);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
for(i = 0;i<256;i++)
HAL_DAC_SetValue(&hdac,DAC_CHANNEL_2,DAC_ALIGN_8B_R,dat);
}
/* USER CODE END 3 */
}
1.4,观察波形
从上面的结果来看,可以确定正弦波数据表没有错误,DAC也能正常工作。
二,接下来尝试用DMA方式:
2.1,修改DAC配置TIM6触发方式,配置DMA 循环模式,8byte宽度
2.2配置定TIM6
2.3,修改main函数
int main(void)
{
/* USER CODE BEGIN 1 */
uint32_t i;
/* USER CODE END 1 */
这里省略了MX自动生成的代码
………………
/* USER CODE BEGIN 2 */
//开启TIM6,启动DAC
HAL_TIM_Base_Start(&htim6);
HAL_DAC_Start_DMA(&hdac,DAC_CHANNEL_2,(uint32_t *)dat,256,DAC_ALIGN_8B_R);
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
}
/* USER CODE END 3 */
}
以上是尝试用tim6触发,DMA方式去生成波形,但是并没有得到任何输出。
在线仿真,程序跑起来后:
DHR8R2中的值一直是0,并没有变化,这个DMAUDR2被值位了,没有任何波形输出,手动更改DHR8R2值,输出有变化。
结论AC工作正常(因为手动更改DHR8R2有变化),DMA和TIM6并没有和DAC协调,将正弦波表格的数据一个一个送过去。
问题:网上看了不少博主写的,基本也是这样配置,目前不知道问题出在哪里。望各位指教,不胜感激!
|
|