资源简介
使用stm32f103可输出频率(在100HZ-10KHZ)可调的锯齿波形
代码片段和文件信息
#include “sawtoothwave.h“
#include “delay.h“
#define DAC_DHR12R1 (DAC_base+0x08) //外设DAC通道1的基地址
#define DAC_DHR12R2 (DAC_base+0x14) //外设DAC通道2的基地址
#define N1 256
#define N2 512
/********生成锯齿波形输出表***********/
void SawTooth_Data( u16 cycle u16 *D)
{
u16 i;
for( i=0;i {
D[i]= (u16)(1.0*i/255*4095);
}
}
/********生成三角波形输出表***********/
void Triangle_Data( u16 cycle u16 *D)
{
u16 i;
for( i=0;i {
D[i]= (u16)(1.0*i/128*2047);
}
for( i=cycle/2;i {
D[i]= 2047 - (u16)(1.0*i/128*2047);
}
}
/******************三角波形表***********************/
#ifdef Triangle_WaveOutput_Enable
u16 TriangleWave_Value[256]; //已用函数代替
#endif
/******************锯齿波形表***********************/
#ifdef SawTooth_WaveOutput_Enable
u16 SawToothWave_Value[256]; //已用函数代替
#endif
/****************引脚初始化******************/
void SawtoothWave_GPIO_Config( FunctionalState NewState1 FunctionalState NewState2)
{
GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA ENABLE); //开时钟
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽输出模式
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //输出速率
if( NewState1!=DISABLE)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 ; //选择引脚
GPIO_SetBits(GPIOAGPIO_Pin_4) ; //拉高输出
}
if( NewState2!=DISABLE)
{
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 ; //选择引脚
GPIO_SetBits(GPIOAGPIO_Pin_5) ; //拉高输出
}
GPIO_Init(GPIOA &GPIO_InitStructure); //初始化
}
/******************DAC初始化*************************/
void SawtoothWave_DAC_Config( FunctionalState NewState1 FunctionalState NewState2)
{
DAC_InitTypeDef DAC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC ENABLE);//开DAC时钟
/**************DAC结构初始化,很重要,否则无波形*******************/
DAC_StructInit(&DAC_InitStructure);
DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;//不产生波形
DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Disable; //不使能输出缓存
if( NewState1!=DISABLE)
{
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T2_TRGO;//选择DAC触发源为TIM2
DAC_Init(DAC_Channel_1 &DAC_InitStructure);//初始化
DAC_Cmd(DAC_Channel_1 ENABLE); //使能DAC通道1
DAC_DMACmd(DAC_Channel_1 ENABLE); //使能DAC通道1的DMA
}
if( NewState2!=DISABLE)
{
DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;//选择DAC触发源为TIM6
DAC_Init(DAC_Channel_2 &DAC_InitStructure);//初始化
DAC_Cmd(DAC_Channel_2 ENABLE); //使能DAC通道2
DAC_DMACmd(DAC_Channel_2 ENABLE); //使能DAC通道2的DMA
}
}
/*********定时器配置************/
void SawtoothWave_TIM_Config( u32 Wave1_Fre )
{
TIM_TimebaseInitTypeDef TIM_TimebaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 | RCC_APB1Periph_TIM6 ENABLE);//开时钟
TIM_TimebaseStructInit(&TIM_TimebaseStructure);
TIM_TimebaseStructure.TIM_Period = Wave1_Fre; //正弦波1频率设置
TIM_TimebaseStructure.TIM_Prescaler = 0x0; //不预分频
TIM_TimebaseStructure.TIM_Clo
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6738 2018-05-16 08:29 SAWTOOTHWAVE\sawtoothwave.c
文件 589 2018-05-15 22:39 SAWTOOTHWAVE\sawtoothwave.h
目录 0 2018-05-16 08:50 SAWTOOTHWAVE
----------- --------- ---------- ----- ----
7327 3
- 上一篇:基础拓扑学讲义部分习题解答
- 下一篇:任意波形数据生成器
评论
共有 条评论