資源簡介
使用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
- 上一篇:基礎拓撲學講義部分習題解答
- 下一篇:任意波形數據生成器
評論
共有 條評論