初级会员

- 积分
- 109
- 金钱
- 109
- 注册时间
- 2019-4-3
- 在线时间
- 40 小时
|
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
|
|