OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2176|回复: 5

stm32H743 DAC输出的 三角波频率有问题

[复制链接]

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-4-3
在线时间
40 小时
发表于 2019-11-7 16:29:06 | 显示全部楼层 |阅读模式
20金钱
本人现在用板子自带的dac输出三角波,用示波器观察是有三角波的,但频率高达30MHz,然后改变定时器的arr和psc以及dac里的DAC_TRIANGLEAMPLITUDE_1023,都不能改变频率,看了好多的帖子,也换了好几种格式写的的程序,一直出现这个问题,希望大家帮帮我吧。
代码如下:main.c

#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "key.h"
#include "lcd.h"
#include "sdram.h"
#include "usmart.h"
#include "dac.h"
DAC_HandleTypeDef    DacHandle;
static DAC_ChannelConfTypeDef sConfig;
static void DAC_Ch1_TriangleConfig(void);
static void TIM6_Config(void);
static void DAC_Ch1_TriangleConfig(void)
{
         DacHandle.Instance = DACx;
  /*##-1- Initialize the DAC peripheral ######################################*/
  if (HAL_DAC_Init(&DacHandle) != HAL_OK)
  {
    /* DAC initialization Error */
    //Error_Handler();
  }

  /*##-2- DAC channel2 Configuration #########################################*/
  sConfig.DAC_Trigger = DAC_TRIGGER_T6_TRGO;
  sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;

  if (HAL_DAC_ConfigChannel(&DacHandle, &sConfig, DACx_CHANNEL) != HAL_OK)
  {
    /* Channel configuration Error */
    //Error_Handler();
  }

  /*##-3- DAC channel2 Triangle Wave generation configuration ################*/
  if (HAL_DACEx_TriangleWaveGenerate(&DacHandle, DACx_CHANNEL, DAC_TRIANGLEAMPLITUDE_1023) != HAL_OK)
  {
    /* Triangle wave generation Error */
    //Error_Handler();
  }

  /*##-4- Enable DAC Channel1 ################################################*/
  if (HAL_DAC_Start(&DacHandle, DACx_CHANNEL) != HAL_OK)
  {
    /* Start Error */
   // Error_Handler();
  }

  /*##-5- Set DAC channel1 DHR12RD register ################################################*/
  if (HAL_DAC_SetValue(&DacHandle, DACx_CHANNEL, DAC_ALIGN_12B_R, 0x100) != HAL_OK)
  {
    /* Setting value Error */
   // Error_Handler();
  }
}

void TIM6_Config(void)
{
  static TIM_HandleTypeDef  htim;
  TIM_MasterConfigTypeDef sMasterConfig;

  /*##-1- Configure the TIM peripheral #######################################*/
  /* Time base configuration */
  htim.Instance = TIM6;

  htim.Init.Period            = 0x7FF;//=2014-1
  htim.Init.Prescaler         = 0;
  htim.Init.ClockDivision     = 0;
  htim.Init.CounterMode       = TIM_COUNTERMODE_UP;
  htim.Init.RepetitionCounter = 0;
  HAL_TIM_Base_Init(&htim);

  /* TIM6 TRGO selection */
  sMasterConfig.MasterOutputTrigger = TIM_TRGO_UPDATE;
  sMasterConfig.MasterSlaveMode = TIM_MASTERSLAVEMODE_DISABLE;

  HAL_TIMEx_MasterConfigSynchronization(&htim, &sMasterConfig);

  /*##-2- Enable TIM peripheral counter ######################################*/
  HAL_TIM_Base_Start(&htim);
}
void HAL_TIM_Base_MspInit(TIM_HandleTypeDef *htim)
{
  /* TIM6 Periph clock enable */
  __HAL_RCC_TIM6_CLK_ENABLE();
}

void HAL_TIM_Base_MspDeInit(TIM_HandleTypeDef *htim)
{

  /*##-1- Reset peripherals ##################################################*/
  __HAL_RCC_TIM6_FORCE_RESET();
  __HAL_RCC_TIM6_RELEASE_RESET();
}


int main(void)
{
       
        Cache_Enable();                                       
        HAL_Init();                                               
        Stm32_Clock_Init(160,5,2,4);                   
        delay_init(400);                                               
        uart_init(115200);                                               
        usmart_dev.init(200);                                    
        LED_Init();                                                               
        KEY_Init();                                                               
        SDRAM_Init();                                  
        TIM6_Config();
    while(1)
        {


                 HAL_DAC_DeInit(&DacHandle);
                 DAC_Ch1_TriangleConfig();
       
        }
}
dac.h
#ifndef __DAC_H
#define __DAC_H
#include "sys.h"
#define DACx                            DAC1
#define DACx_CHANNEL_GPIO_CLK_ENABLE()  __HAL_RCC_GPIOA_CLK_ENABLE()
#define DMAx_CLK_ENABLE()               __HAL_RCC_DMA1_CLK_ENABLE()

#define DACx_CLK_ENABLE()               __HAL_RCC_DAC12_CLK_ENABLE()
#define DACx_FORCE_RESET()              __HAL_RCC_DAC12_FORCE_RESET()
#define DACx_RELEASE_RESET()            __HAL_RCC_DAC12_RELEASE_RESET()

/* Definition for DACx Channel Pin */
#define DACx_CHANNEL_PIN                GPIO_PIN_4
#define DACx_CHANNEL_GPIO_PORT          GPIOA

/* Definition for DACx's Channel */

#define DACx_CHANNEL                    DAC_CHANNEL_1

/* Definition for DACx's DMA_STREAM */
#define DACx_DMA_INSTANCE               DMA1_Stream5

/* Definition for DACx's NVIC */
#define DACx_DMA_IRQn                   DMA1_Stream5_IRQn
#define DACx_DMA_IRQHandler             DMA1_Stream5_IRQHandler

#endif




最佳答案

查看完整内容[请看2#楼]

问题解决了,是板子上P11多功能引脚,把DAC和GND用跳线帽连在一起了(真想打自己一巴掌!!!)。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-4-3
在线时间
40 小时
 楼主| 发表于 2019-11-7 16:29:07 | 显示全部楼层
问题解决了,是板子上P11多功能引脚,把DAC和GND用跳线帽连在一起了(真想打自己一巴掌!!!)。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2019-11-8 02:10:33 | 显示全部楼层
STM32 的DAC输出不了30M 波形的,建议看看是不是示波器没设置好
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-4-3
在线时间
40 小时
 楼主| 发表于 2019-11-8 09:07:34 | 显示全部楼层
正点原子 发表于 2019-11-8 02:10
STM32 的DAC输出不了30M 波形的,建议看看是不是示波器没设置好

我看例程算了下确实只有几十Hz,在示波器上看不出来,我不知道我上面写的程序对不对
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-4-3
在线时间
40 小时
 楼主| 发表于 2019-11-10 17:37:30 | 显示全部楼层
通道配置我忘记放了,我照原子哥说重新设置下了示波器,问题变成了没有信号输出
回复

使用道具 举报

4

主题

21

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2019-4-3
在线时间
40 小时
 楼主| 发表于 2019-11-11 16:09:31 | 显示全部楼层
问题解决了,是板子上P11多功能引脚,把DAC和GND用跳线帽连在一起了(真想打自己一巴掌!!!)。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 11:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表