linux 信号发生器,用STM32实现函数信号发生器

自己慢慢看,,,,

[mw_shl_code=c,true]#ifndef __BSP_WAVEMAKER_H

#define __BSP_WAVEMAKER_H

#include "stm32f10x.h"

#define DAC_DHR12RD_Address 0x40007420

#define DAC_DHR8R1_Address 0x40007410

#define DAC_DHR12R1_Address0x40007408

/* DMA 传输数据长度 */

enum

{

DMA_BufferSize_36 = 36,

DMA_BufferSize_50 = 50,

DMA_BufferSize_100 = 100,

};

/* 波形类型 */

enum

{

WT_RECT = 0,/* 矩形波 */

WT_SIN = 1,/* 正弦波 */

WT_TRIA = 2,/* 三角波 */

WT_SAW = 3, /* 锯齿波 */

WT_NOISE = 4, /* 噪声 */

};

/* 正弦波 */

typedef struct

{

uint32_t Frequency; //频率

uint16_t Amplitude; //幅值

}SIN_T;

/* 三角波 */

typedef struct

{

uint16_t Frequency; //频率

uint16_t Amplitude; //幅值

}TRIA_T;

/* 锯齿波 */

typedef struct

{

uint32_t Frequency; //频率

uint16_t Amplitude; //幅值

}SAW_T;

/* 矩形波 */

typedef struct

{

uint32_t Frequency; //频率

uint16_t Amplitude; //幅值

uint8_t DutyCycle; //占空比

}RECT_T;

/* 噪声 */

typedef struct

{

uint16_t Frequency; //频率

uint16_t Amplitude; //幅值

}NOISE_T;

extern SIN_T g_Sine;

extern RECT_T g_Rect;

extern SAW_T g_Saw;

extern NOISE_T g_Noise;

extern TRIA_T g_Tria;

void InitWaveMaker(void);

void SetupWaveType(uint8_t _ucType,uint32_t _ulFrequency,uint16_t _usAmplitude,

uint8_t _ucDutyCycle);

#endif[/mw_shl_code]

[mw_shl_code=c,true]#include "stm32f10x.h"

#include

#include "stdlib.h"

#include "bsp_WaveMaker.h"

#include "arm_math.h"

SIN_T g_Sine; /*正弦波*/

RECT_T g_Rect; /*矩形波*/

SAW_T g_Saw; /*锯齿波*/

NOISE_T g_Noise; /*噪声 */

TRIA_T g_Tria; /*三角波*/

uint16_t g_Wave[100];

/*******************************************************************************

*函数名: InitWaveMaker

*输 入:无

*输 出:无

*功能说明:初始化波形发生器。

*******************************************************************************/

void InitWaveMaker(void)

{

GPIO_InitTypeDef GPIO_InitStructure;

DAC_InitTypeDef DAC_InitStructure;

RCC_AHBPeriphClockCmd(RCC_AHBPeriph_DMA2, ENABLE);

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE);

RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);

/*初始化DAC 通道1 */

DAC_InitStructure.DAC_Trigger = DAC_Trigger_T6_TRGO;

DAC_InitStructure.DAC_WaveGeneration = DAC_WaveGeneration_None;

DAC_InitStructure.DAC_OutputBuffer = DAC_OutputBuffer_Enable;

DAC_Init(DAC_Channel_1, &DAC_InitStructure);

DAC_DMACmd(DAC_Channel_1, ENABLE);

/* 配置PA4为DAC_OUT1 */

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_10MHz;

GPIO_Init(GPIOA, &GPIO_InitStructure);

}

/*

*********************************************************************************************************

*函 数 名: InitWaveFreq(uint32_t _usFrequency, uint8_t _ucDMABuffuerSize)

*功能说明: 用于初始化各种波形的产生

*形 参:_usFrequency 表示要产生波形的触发频率,

* _ucDMABuffuerSize 表示DMA要传输的数据数。

*返 回 值: 无

*********************************************************************************************************

*/

void InitWaveFreq(uint32_t _usFrequency, uint8_t _ucDMABuffuerSize)

{

DMA_InitTypeDef DMA_InitStructure;

/*初始化定时器*/

TIM_PrescalerConfig(TIM6, 0, TIM_PSCReloadMode_Update);

TIM_SetAutoreload(TIM6, _usFrequency);

TIM_SelectOutputTrigger(TIM6, TIM_TRGOSource_Update);

/*初始化DMA */

DMA_DeInit(DMA2_Channel3);

DMA_InitStructure.DMA_PeripheralBaseAddr = DAC_DHR12R1_Address;

DMA_InitStructure.DMA_MemoryBaseAddr = (uint32_t)&g_Wave;

DMA_InitStructure.DMA_DIR = DMA_DIR_PeripheralDST;

DMA_InitStructure.DMA_BufferSize = _ucDMABuffuerSize;

DMA_InitStructure.DMA_PeripheralInc = DMA_PeripheralInc_Disable;

DMA_InitStructure.DMA_MemoryInc = DMA_MemoryInc_Enable;

DMA_InitStructure.DMA_PeripheralDataSize = DMA_PeripheralDataSize_HalfWord;

DMA_InitStructure.DMA_MemoryDataSize = DMA_MemoryDataSize_HalfWord;

DMA_InitStructure.DMA_Mode = DMA_Mode_Circular;

DMA_InitStructure.DMA_Priority = DMA_Priority_Low ;

DMA_InitStructure.DMA_M2M = DMA_M2M_Disable;

DMA_Init(DMA2_Channel3, &DMA_InitStructure);

DMA_Cmd(DMA2_Channel3, ENABLE);

}

/*

*********************************************************************************************************

*函 数 名: SetupWaveType

*功能说明: 用于建立产生各种波形

*形 参:_ucType表示要产生的波形的类型

_ulFrequency表示波形的触发频率

_usAmplitude表示波形的幅值

_ucDutyCycle表示矩形波的占空比

*返 回 值: 无

*********************************************************************************************************

*/

void SetupWaveType(uint8_t _ucType,uint32_t _ulFrequency,uint16_t _usAmplitude,

uint8_t _ucDutyCycle)

{

uint8_t i;

TIM_Cmd(TIM6, DISABLE);

DAC_Cmd(DAC_Channel_1, DISABLE);

switch (_ucType)

{

case WT_RECT: /* 方波 */

InitWaveFreq(720000 / _ulFrequency, DMA_BufferSize_100); /*要先初始化这个*/

for (i = 0; i < _ucDutyCycle; i++)

{

g_Wave= _usAmplitude;

}

for (i = _ucDutyCycle; i < 100; i++)

{

g_Wave= 0;

}

break;

case WT_SIN:/* 正弦波 */

InitWaveFreq(720000 / _ulFrequency,DMA_BufferSize_100);

for (i = 0; i < DMA_BufferSize_100; i++)

{

g_Wave= 1024+_usAmplitude*sin(2*3.1415926f*99*i/100);

}

break;

case WT_SAW: /* 锯齿波 */

InitWaveFreq(720000 / _ulFrequency,DMA_BufferSize_100);

for (i = 0; i < DMA_BufferSize_100; i++)

{

g_Wave= 100 + i*_usAmplitude;

}

break;

case WT_TRIA: /* 三角波*/

InitWaveFreq(720000 / _ulFrequency,DMA_BufferSize_100);

for (i = 0; i < DMA_BufferSize_100; i++)

{

g_Wave= 100 + abs(50-i)*_usAmplitude;

}

break;

case WT_NOISE: /*噪声 */

InitWaveFreq(720000 / _ulFrequency,DMA_BufferSize_100);

for (i = 0; i < DMA_BufferSize_100; i++)

{

g_Wave= rand()%_usAmplitude;

}

break;

default : break;

}

DAC_Cmd(DAC_Channel_1, ENABLE);

TIM_Cmd(TIM6, ENABLE);

}[/mw_shl_code]

[mw_shl_code=c,true]//初始化显示的波形是方波

g_Rect.Frequency = 10000; //频率

g_Rect.Amplitude = 2000; //幅值

g_Rect.DutyCycle = 50; //占空比

InitWaveMaker(); //初始化

SetupWaveType(WT_RECT,g_Rect.Frequency,g_Rect.Amplitude,g_Rect.DutyCycle); //产生波形[/mw_shl_code]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/498292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

星际旅行、返老还童…1.3万字看完今年的WE大会,简直就是一部科幻电影

来源&#xff1a;腾讯科技 概要&#xff1a;在第五届WE大会上&#xff0c;科学家们的“脑洞”更大了&#xff1a;星际旅行、返老还童等一个个过去科幻电影里的镜头出现了。 11月5日&#xff0c;WE大会在老时间、老地点如约而至。 时光飞速&#xff0c;WE大会如今已经是第五届了…

gdp笔记本 linux,linux中如何使用微软鼠标的第4、5键

虽说使用的人大都对微软没什么好感&#xff0c;但不能否认微软确实也出了不少好东西呀&#xff0c;比如微软鼠标(IE系列) icon_smile.gif IE2.0和以上版本都有5个按钮&#xff0c;除了正常的左中右外&#xff0c;两侧还各有一个&#xff0c;在windows中可用来支持浏览器的前进/…

智能优化算法应用:基于战争策略算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于战争策略算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于战争策略算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.战争策略算法4.实验参数设定5.算法结果6.…

从芯片巨头沦落到收购对象 高通是怎样失去魔力的?

来源&#xff1a;凤凰科技 概要&#xff1a;过去5年&#xff0c;高通股价几乎是原地踏步&#xff0c;而其他科技公司的股价却一直在快速上涨。 据《福布斯》北京时间11月6日报道&#xff0c;在华尔街&#xff0c;高通已经失去昔日魔力。过去5年&#xff0c;高通股价几乎是原地踏…

zynq linux网口不通,已解决: ZYNQ 7035以太网口无法连通 - Community Forums

网口使用emio连接mii phy芯片&#xff0c;lwIP Echo Server测试例子可以运行&#xff0c;u-boot&#xff0c;linux无法连ping通&#xff0c;能识别到芯片&#xff1b;我该如何配置u-boot与内核&#xff1f;关键打印信息&#xff1a;U-Boot 2019.01 (May 20 2020 - 05:49:03 000…

2017年中国人工智能产业专题研究报告(完整版)

来源&#xff1a;数据观 概要&#xff1a;目前&#xff0c;中国的人工智能研究处于爆发期&#xff0c;行业巨头公司正逐渐完善自身在人工智能的产业链布局&#xff0c;而不断涌现出的创业公司将持续在垂直领域深耕深挖。 目前&#xff0c;中国的人工智能研究处于爆发期&#x…

C语言的广泛作用的论文,关于c语言论文模板

该频道包含关于c语言论文模板和c语言的范例,免费为你学习关于c语言的论文提供相关参考文献资料。摘要&#xff1a;在一套试卷中&#xff0c;重复题问题是影响考试质量的一个重要因素。该文针對C语言试卷中选择题间易出现重复题问题进行深入研究 通过对代码相似性检测以及文。摘…

周志华:最新实验表明gcForest已经是最好的非深度神经网络方法

北京时间 11月5 日到11月6日&#xff0c;西瓜书《机器学习》作者、南京大学机器学习与数据挖掘研究所&#xff08;LAMDA&#xff09;周志华教授日前在MLA 2017上的演讲&#xff1a;深度森林初探——讲述的关于他最新集成学习研究成果-深度森林&#xff0c;一种对深度神经网络可…

C语言答案写成科学记数法,c语言科学记数法_C语言中、科学计数法123456e+002具体代表什么意思、或者说怎么理解这个数_淘题吧...

『壹』 c语言用double写了一个表示科学计数法的程序&#xff0c;但是却读不出来30位以上的数&#xff0c;怎么办double 是抄64 位(8字节)&#xff0c;52 位代表有袭效数位&#xff0c;11 位表示指数&#xff0c;一位表示符号&#xff0c;精度(有效数位)十进制的 16 位。int64 的…

中国工程程院院士高文:从大数据科学到人工智能的迁移过程

概要&#xff1a;中国工程程院院士、北京大学教授高文应邀参加JDD京东金融全球数据探索者大会&#xff0c;并进行了以“探索大数据&#xff0c;迎接人工智能时代”为主题的演讲。 来源&#xff1a;亿欧 11月6日&#xff0c;京东举行JDD京东金融全球数据探索者大会&#xff0c;在…

男人女人小孩共32人c语言,C编程核心要点,你确信你会C语言?看完之后,男人沉默,女人流泪...

引言笔者有十余年的C开发经验&#xff0c;相比而言&#xff0c;我的C经验只有一两年&#xff0c;C比较简单&#xff0c;简单到《The C Programming Language》(C程序设计语言)只有区区的200多页&#xff0c;相比上千页的C大部头&#xff0c;不得不说真的很人性化了。C是古典艺术…

2017全球硬科技创新大会今日开幕 科技大腕聚集共绘西安“硬科技”发展蓝图

概要&#xff1a;2017全球硬科技创新大会今天在西安开幕。 来源&#xff1a;中国科技网 科技大腕聚集共绘西安“硬科技”发展蓝图 2017全球硬科技创新大会今天在西安开幕。本次大会参会人数超过5000人&#xff0c;其中有诺贝尔奖获得者、国内外相关领域院士专家、科技企业领袖、…

c语言能实现帧动画吗,CSS3 animation属性中的steps实现GIF动图(逐帧动画)

相信 animation 大家都用过很多&#xff0c;知道是 CSS3做动画用的。而我自己就只会在 X/Y轴 上做位移旋转&#xff0c;使用 animation-timing-function 规定动画的速度曲线&#xff0c;常用到的 贝塞尔曲线。但是这些动画效果都是连续性的。今天发现个新功能 animation-timing…

Sorenson Capital:值得投资的 5 种 AI 技术

概要&#xff1a;身为投资者的你&#xff0c;如果看好AI和机器学习的前景&#xff0c;又该在AI公司遍地开花的市场中&#xff0c;选择什么样的公司进行投资&#xff1f; 来源&#xff1a;36Kr 值得投资的机器学习和人工智能的应用有哪些&#xff1f; 人工智能、神经网络、机器…

myeclipse怎么运行c语言,windows下MyEclipse安装配置C/C++开发环境

windows下MyEclipse安装配置C/C开发环境 &#xff0c;安装MinGW&#xff1a;假设安装路径为c:\MinGW编辑如下系统变量&#xff1a;变量名变量值PATH C:\MinGW\bin;LIBRARY_PATH C:\MinGW\libC_INCLUDEDE_PATHC:\MinGW\includeCPLUS_INCLUDE_PATH C:\MinGW\include\c\3.4.2;C:\M…

这个重量级产业,中国正在爆发!

来源&#xff1a;全球新论坛 概要&#xff1a;中国在汽车领域和先进国家差距很大&#xff0c;但是我们至少做了一件对的事情&#xff0c;在中国销售的车辆都是在中国制造。 集成电路产业是中国产业升级的重中之重&#xff0c;我们都知道汽车是人类第一大工业&#xff0c;中国在…

c语言布尔类型赋值给整型,C语言的布尔类型(_Bool)【转】

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼1. 我们自己定义的“仿布尔型”在C99标准被支持之前&#xff0c;我们常常自己模仿定义布尔型&#xff0c;方式有很多种&#xff0c;常见的有下面两种&#xff1a;view plaincopy to clipboardprint?/* 第一种方法 */#define TRUE …

AI论文引用排行榜丨微软第一,清华第九;Alphabet董事长看AI:美国仅领先5年,大陆追赶速度快;

来源&#xff1a;集微网 概要&#xff1a;根据The Verge报导&#xff0c;Schmidt表示&#xff0c;美国在AI人工智慧领域落后的风险相当高&#xff0c;他预测未来5年美国还有领先的实力&#xff0c;但之后大陆追上来的速度会非常快。 1.AI论文引用排行榜:微软第一,清华第九; 日经…

双向链表逆置c语言,【C++】实现双向链表的所有操作,包括逆置双链表(三种方法)...

建立源文件List.cppinclude "List.h"int main(){Test();system("pause");return 0;}建立头文件List.h#ifndef __LISH_H__#define __LISH_H__#includeusing namespace std;typedef int DataType;struct ListNode{ListNode(DataType x):_next(NULL), _prev(N…

MIT 的新型开源系统 Taco 将数据分析速度提升 100 倍 !(附论文)

来源&#xff1a;全球人工智能 概要&#xff1a;麻省理工学院&#xff08;MIT&#xff09;开发的一种新型计算机系统为涉及“稀疏张量”&#xff08;sparse tensor&#xff09;的计算加快了速度&#xff0c;稀疏张量是主要由0组成的多维数据数组。 麻省理工学院&#xff08…