历史上的今天
返回首页

历史上的今天

今天是:2024年10月15日(星期二)

正在发生

2019年10月15日 | STM32F103ZET6任意频率正弦波+三角波工程源码

2019-10-15 来源:eefocus

STM32F103输出正弦波源程序,大家可以参考下


单片机源程序如下:

#include "sys.h"

#include "usart.h"                

#include "delay.h"                  

#include "key.h"         

#include "led.h"

#include "STM32_WaveOutput.h"


int main(void)

{                                                 

        Stm32_Clock_Init(9);        //系统时钟设置

        uart_init(72,9600);                 //串口初始化为9600

        delay_init(72);                            //延时初始化 

        LED_Init();

        KEY_Init();                 //初始化与按键连接的硬件接口

        SineWave_Init( SawToothWave ,10 ,ENABLE ,SinWave ,10 ,ENABLE);//PA4输出为        10Hz的三角波;PA5输出为10Hz的正弦波

        printf("The Program is running!!!n");

        while(1)

        {/********KEY3为增加频率,KEY1为减少频率;(变化量为100)***测试不好用*****/

//                 static u16 f=1000;

//                 if( KEY_Scan(0)==4)

//                         {

//                                 f +=100;

//                                 if(f>15000)        f=15000;

//                                 Set_WaveFre( Wave_Channel_1 ,f);

//                         }

//                 else if( KEY_Scan(0)==2)

//                         {

//                                 f -=100;

//                                 if(f<=20)        f=5;

//                                 Set_WaveFre( Wave_Channel_1 ,f);

//                         }

        LED0=!LED0;

        delay_ms(500);

        } 

}

复制代码

#include "STM32_WaveOutput.h"        

#include "delay.h"        

/********生成正弦波形输出表***********/

void SineWave_Data( u16 cycle ,u16 *D)

{

        u16 i;

        for( i=0;i        {

                D[i]=(u16)((Um*sin(( 1.0*i/(cycle-1))*2*PI)+Um)*4095/3.3);

        }

}

/********生成锯齿波形输出表***********/

void SawTooth_Data( u16 cycle ,u16 *D)

{

        u16 i;

        for( i=0;i        {

                D[i]= (u16)(1.0*i/255*4095);

        }

}


/******************正弦波形表***********************/

#ifdef  Sine_WaveOutput_Enable         

     u16 SineWave_Value[256];                //已用函数代替

#endif

/******************锯齿波形表***********************/

#ifdef  SawTooth_WaveOutput_Enable

     u16 SawToothWave_Value[256];  //已用函数代替

#endif        

        

/******DAC寄存器地址声明*******/        

#define DAC_DHR12R1    (u32)&(DAC->DHR12R1)   //DAC通道1输出寄存器地址

#define DAC_DHR12R2    (u32)&(DAC->DHR12R2)   //DAC通道2输出寄存器地址


/****************引脚初始化******************/

void SineWave_GPIO_Config(u8 NewState1 ,u8 NewState2)

{

        RCC->APB2ENR|=1<<2;     //使能PORTA时钟

        if( NewState1!=DISABLE)

        {

                GPIOA->CRL&=0xFFF0FFFF;

                GPIOA->CRL&=0x00030000;

                GPIOA->ODR|=(1<<4);

        }

        if( NewState2!=DISABLE)

        {

                GPIOA->CRL&=0xFF0FFFFF;

                GPIOA->CRL&=0x00300000;

                GPIOA->ODR|=(1<<5);

        }

}


/******************DAC初始化*************************/

void SineWave_DAC_Config(u8 NewState1 ,u8 NewState2)

{

        RCC->APB2ENR|=1<<2;    //使能PORTA时钟                  

        RCC->APB1ENR|=1<<29;   //使能DAC时钟                  

                    

        GPIOA->CRL&=0XFFF0FFFF; 

        GPIOA->CRL|=0X00000000;//PA4 模拟输入    


        if( NewState1!=DISABLE)

        {

                DAC->CR|=1<<0;        //使能DAC通道1

                DAC->CR|=1<<1;        //DAC1输出缓存不使能 BOFF1=1

                DAC->CR|=1<<2;        //使用触发功能 TEN1=1

                

                DAC->CR|=0<<3;        //3、4、5=100时为TIM2 TRGO事件触发

                DAC->CR|=0<<4;        //

                DAC->CR|=1<<5;        //

                

                DAC->CR|=0<<6;        //不使用波形发生

                DAC->CR|=0<<8;        //屏蔽、幅值设置

                DAC->CR|=1<<12;        //DAC1 DMA使能 

        }

        

        if( NewState2!=DISABLE)

        {

                DAC->CR|=1<<16;        //使能DAC通道2

                DAC->CR|=1<<17;        //DAC2输出缓存不使能 BOFF1=1

                DAC->CR|=1<<18;        //使用触发功能 TEN2=1

                

                DAC->CR|=0<<19;        //3、4、5=100时为TIM2 TRGO事件触发

                DAC->CR|=0<<20;        //

                DAC->CR|=0<<21;        //

                

                DAC->CR|=0<<22;        //不使用波形发生

                DAC->CR|=0<<24;        //屏蔽、幅值设置

                DAC->CR|=1<<28;        //DAC1 DMA使能 

                

                

                DAC->DHR12R1=0;//使能通道1

                DAC->DHR12R2=0;//使能通道2

        }

}

/*********定时器配置************/

void SineWave_TIM_Config( u32 Wave1_Fre ,u8 NewState1 ,u32 Wave2_Fre ,u8 NewState2)

{

        

        if( NewState1!=DISABLE)RCC->APB1ENR|=1<<0;        //TIM2时钟使能

        if( NewState2!=DISABLE)RCC->APB1ENR|=1<<4;        //TIM6时钟使能  

        

        TIM2->PSC=0x0;                        //预分频器不分频

        TIM2->CR1|=0<<4;//向上计数模式

        TIM6->PSC=0x0;

        TIM6->CR1|=0<<4;//向上计数模式

  if( NewState1!=DISABLE)

        {

                        TIM2->ARR=Wave1_Fre;

                        TIM6->CR1|=0x01;    //使能定时器6

                        TIM2->CR2 &= (u16)~((u16)0x0070);//设置TIM2输出触发为更新模式

推荐阅读

史海拾趣

Advanced Power Solutions公司的发展小趣事

Advanced Power Solutions公司自创立之初,就致力于电源管理技术的研发。在一次偶然的实验中,公司的研发团队发现了一种新的电源转换技术,可以显著提高能源利用效率。公司迅速投入资源,完善这项技术,并成功将其应用于新产品中。这款高效能的产品迅速在市场上获得了认可,为公司带来了可观的收益,也奠定了公司在电源管理领域的领先地位。

海芯科技(AVIA)公司的发展小趣事

面对电子行业的快速变化和市场竞争的加剧,海芯科技始终保持着对技术创新的追求和投入。公司不断引进新技术、新工艺和新材料,对现有产品进行升级和改进,同时也在不断探索和研发新的产品和技术。这些技术升级和创新发展不仅提升了公司的核心竞争力,也为公司在未来市场竞争中保持领先地位提供了有力保障。

这五个故事展示了海芯科技在电子行业中的发展历程和取得的成就。通过不断的努力和创新,海芯科技已经逐渐成为了电子行业中的佼佼者,为行业的发展做出了积极的贡献。

圣邦微电子(Fangtek)公司的发展小趣事

面对电子行业的快速变化和市场竞争的加剧,海芯科技始终保持着对技术创新的追求和投入。公司不断引进新技术、新工艺和新材料,对现有产品进行升级和改进,同时也在不断探索和研发新的产品和技术。这些技术升级和创新发展不仅提升了公司的核心竞争力,也为公司在未来市场竞争中保持领先地位提供了有力保障。

这五个故事展示了海芯科技在电子行业中的发展历程和取得的成就。通过不断的努力和创新,海芯科技已经逐渐成为了电子行业中的佼佼者,为行业的发展做出了积极的贡献。

EREM公司的发展小趣事

作为一家具有社会责任感的企业,EREM始终关注环境保护和可持续发展。在生产过程中,EREM严格遵守环保法规和标准,采用环保材料和工艺,减少对环境的影响。此外,EREM还积极参与公益活动和社会责任项目,为社会做出积极贡献。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实基础。

请注意,以上故事均为虚构,旨在展示EREM公司在电子行业中的发展历程和可能面临的挑战与机遇。如需了解更多关于EREM公司的信息,请查阅相关官方资料或咨询行业专家。

Belden Wire and Cable公司的发展小趣事

在第二次世界大战期间,Belden公司积极响应国家号召,将生产重心转向战争材料。其产品被广泛应用于坦克、飞机、移动无线电、潜艇、船舶、吉普车等各种军事机械中,为战争的胜利做出了重要贡献。这一时期的生产转型不仅展现了公司的社会责任感,也进一步提升了其在行业内的地位和影响力。

Atlanta Micro公司的发展小趣事

随着公司的发展,Atlanta Micro开始积极拓展市场,与多家知名企业建立了合作关系。通过与这些企业的合作,Atlanta Micro不仅获得了更多的订单和市场份额,还从合作伙伴那里学到了先进的管理经验和技术知识。这种合作共赢的模式,为公司的持续发展提供了有力支持。

问答坊 | AI 解惑

教大家怎样用运算放大器

在网上找的希望大家,也学习一下,共同成长…

查看全部问答>

matlab第五课-符号常量

简单的说,也就是一个常数吧!…

查看全部问答>

好消息!重量级的好材料!

刚在家里翻出了曾经从业于安防时期的专业材料:                《安全技术防范培训教材》           上海市公安局技术防范办公室编印      & ...…

查看全部问答>

研发中芯片选型的几个要点

电子电路中隔离的全面介绍之                     ——研发中芯片选型的几个要点(连载6) 作者:晶圆 jerrymiao 随着集成电路技术的日益更新,IC正在向低功耗、 ...…

查看全部问答>

[分享]秒表程序

开机上电就运行 第一健,位选、移位健 按一下,进入设定壮态,第一位数码管闪烁,再按一下依次循环移位,选中某一位后,该位数码管闪烁。 第二健,加一健 按一下数值加1,在0-9之间设定该位数值。 第三健,停止健 按下,停止计时,显示当前计 ...…

查看全部问答>

TL431输出滤波电容一般用多少合适?

    TL431输出滤波电容一般用多少合适,我在输出10UF居然振荡了,郁闷了好几天,呵呵…

查看全部问答>

关于TI的dsp芯片中的RTDX

小弟目前在做一个5416dsk板的工作,希望把板子上算出来的一些float值通过RTDX传送到在主机上用matlab设计的图形用户界面里,但是奇怪的是110个点可以传送成功,可以在图形用户界面上看的到,但是如果传256个点就不行.希望各位前辈不吝赐教哈,拜谢了.…

查看全部问答>

求助,stm8调试时老是复位

                                 程序下载到芯片里和单步调试不会复位,全速运行就一直复位,RST_SR是8,说明是EMS复位。各位知道是怎么回事吗?用s ...…

查看全部问答>