#include “dac.h”
//DAC 通道 1 输出初始化
void Dac1_Init(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
DAC_InitTypeDef DAC_InitType;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE ); //①使能 PA 时钟
RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE ); //②使能DAC时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; // 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; //模拟输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure); //①初始化 GPIOA
GPIO_SetBits(GPIOA,GPIO_Pin_4) ; //PA.4 输出高
DAC_InitType.DAC_Trigger=DAC_Trigger_None; //不使用触发功能
DAC_InitType.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生
DAC_InitType.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0;
DAC_InitType.DAC_OutputBuffer=DAC_OutputBuffer_Disable ; //DAC1 输出缓存关
DAC_Init(DAC_Channel_1,&DAC_InitType); //③初始化 DAC 通道 1
DAC_Cmd(DAC_Channel_1, ENABLE); //④使能 DAC1
DAC_SetChannel1Data(DAC_Align_12b_R, 0); //⑤12 位右对齐,设置 DAC 初始值
}
//设置通道 1 输出电压
//vol:0~3300,代表 0~3.3V
void Dac1_Set_Vol(u16 vol)
{
float temp=vol;
temp/=1000;
temp=temp4096/3.3;
DAC_SetChannel1Data(DAC_Align_12b_R,temp);// 12 位右对齐设置 DAC 值
}
此部分代码就 2 个函数,Dac1_Init 函数用于初始化 DAC 通道 1。步骤①~⑤基本上是按我
们上面的步骤来初始化的,经过这个初始化之后,我们就可以正常使用 DAC 通道 1 了。第二
个函数 Dac1_Set_Vol,用于设置 DAC 通道 1 的输出电压,通过 USMART 调用该函数,就可以
随意设置 DAC 通道 1 的输出电压了。
接下来我们看看 main 函数如下:
int main(void)
{
u16 adcx;
float temp;
u8 t=0;
u16 dacval=0;
u8 key;
delay_init(); //延时函数初始化
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置 NVIC 中断分组 2
uart_init(115200); //串口初始化波特率为 115200
KEY_Init(); //初始化按键程序
LED_Init(); //LED 端口初始化
LCD_Init(); //LCD 初始化
usmart_dev.init(72); //初始化 USMART
Adc_Init(); //ADC 初始化
Dac1_Init(); //DAC 初始化
POINT_COLOR=RED;//设置字体为红色
LCD_ShowString(30,50,200,16,16,“WarShip STM32”);
LCD_ShowString(30,70,200,16,16,“DAC TEST”);
LCD_ShowString(30,90,200,16,16,“ATOM@ALIENTEK”);
LCD_ShowString(30,110,200,16,16,“2015/1/15”);
LCD_ShowString(30,130,200,16,16,“WK_UP:+ KEY1:-”);
//显示提示信息
POINT_COLOR=BLUE;//设置字体为蓝色
LCD_ShowString(60,150,200,16,16,“DAC VAL:”);
LCD_ShowString(60,170,200,16,16,“DAC VOL:0.000V”);
LCD_ShowString(60,190,200,16,16,“ADC VOL:0.000V”);
DAC_SetChannel1Data(DAC_Align_12b_R, 0); //初始值为 0
while(1)
{
t++;
key=KEY_Scan(0);
if(key== WKUP_PRES)
{
if(dacval<4000)dacval+=200;
DAC_SetChannel1Data(DAC_Align_12b_R, dacval); //设置 DAC 值
}else if(key== KEY1_PRES)
{
if(dacval>200)dacval-=200;
else dacval=0;
DAC_SetChannel1Data(DAC_Align_12b_R, dacval); //设置 DAC 值
}
if(t10||keyKEY1_PRES||key==WKUP_PRES)
{
adcx=DAC_GetDataOutputValue(DAC_Channel_1); //读取前面设置 DAC 的值
LCD_ShowxNum(124,150,adcx,4,16,0); //显示 DAC 寄存器值
temp=(float)adcx
(3.3/4096); //得到 DAC 电压值
adcx=temp;
LCD_ShowxNum(124,170,temp,1,16,0); //显示电压值整数部分
temp-=adcx;
temp*=1000;
LCD_ShowxNum(140,170,temp,3,16,0X80); //显示电压值的小数部分
adcx=Get_Adc_Average(ADC_Channel_1,10); //得到 ADC 转换值
temp=(float)adcx*(3.3/4096); //得到 ADC 电压值
adcx=temp;
LCD_ShowxNum(124,190,temp,1,16,0); //显示电压值整数部分
temp-=adcx;
temp*=1000;
LCD_ShowxNum(140,190,temp,3,16,0X80); //显示电压值的小数部分
LED0=!LED0;
t=0;
}
delay_ms(10);
}
}

stm32实现波形发生器相关推荐

  1. stm32锯齿波_工程师实战:基于STM32的波形发生器设计

    本文摘自21ic论坛,作者:21ic网友 一路向北lm) 为了调动大家的积极性,先开个贴,万一你们都不参加呢!哈哈侥幸心理............... 先发个波让你们看看 ,吓吓你们,快点来参赛!! ...

  2. 基于STM32的波形发生器

    个人博客:http://www.chenjianqu.com/ 原文链接:http://www.chenjianqu.com/show-30.html 设计实现的要求 基本要求 (1)具有产生正弦波. ...

  3. 【STM32入门】这个项目绝了,用手势来产生波形,基于手势控制的波形发生器

    大家好,我是张巧龙,之前有给实验室学生出了一道关于STM32的题:基于手势控制的波形产生题,题目简单,但综合性较强. 有些学生完成的还不错,个人觉得此题用来 入门 STM32再合适不过了. 展示视频: ...

  4. 【STM32+cubemx】0030 HAL库开发:DDS芯片AD9833实现简单的波形发生器

    大家好,我是学电子的小白白,今天带大家了解一款波形发生器芯片--AD9833. AD9833是AD公司出品的一款DDS波形发生器,能够产生正弦波.三角波和方波输出. 1)什么是DDS 通俗来讲,DDS ...

  5. 基于stm32单片机的四种波形发生器正弦波、方波、三角波、锯齿波

    基于stm32单片机的四种波形发生器(源程序+仿真+设计报告)全套资料 资料编号:010 具体功能: (1) 可以实现四种波形:正弦波.方波.三角波.锯齿波: (2) 通过按键进行选择,频率可以调整: ...

  6. 基于STM32+DAC+DMA和AD9850的波形发生器

    基于STM32+DAC+DMA和AD9850的波形发生器 试验目的 一.通过STM32单片机DAC+DMA产生频率可调正弦波.三角波.锯齿波.方波. 二.使用STM32驱动AD9850波形发生模块产生 ...

  7. 已调信号波形是怎样的_【鼎阳硬件智库原创 | 测试测量】初识任意波形发生器...

    方浩 鼎阳硬件设计与测试智库专家组成员 在产品调试的过程中,大多数的电路需要输入某种幅度随时间变化的信号,在这样的应用场景中,一个完整的测试测量系统一般会包含激励源,被测件和采集仪器三个部分.采集仪器 ...

  8. dve 二维数组信号 显示波形_函数任意波形发生器价格

    函数任意波形发生器价格,深圳市乐信智测科技有限公司成立于2017年01月11日,注册地位于深圳市龙华区民治街道北站社区创业花园177-180栋411,法人代表为李澍龙. 函数任意波形发生器价格, 说明 ...

  9. 画时域随机信号波形_【鼎阳硬件智库原创︱测试测量】任意波形发生器的基本输出波形及其相关参数...

    方浩 鼎阳硬件设计与测试智库专家组成员 传统的函数发生器可以输出正弦波.方波.三角波等标准波形,但是在实际的测试场景中,为了模拟产品在实际使用过程中的复杂情况,往往需要人为地去制造一些"不规 ...

最新文章

  1. 从“执行新过程新增5%的工作量”看新过程引入
  2. 遮罩层中的相对定位与绝对定位(Ajax)
  3. SAP Spartacus core模块的单元测试
  4. 牛客练习赛26B 烟花 (概率DP)
  5. Windows 未能启动。原因可能是最近更改了硬件或软件。解决此问题的步骤
  6. Acwing - 最长公共子序列
  7. bzoj千题计划176:bzoj1199: [HNOI2005]汤姆的游戏
  8. SPSS基础教程:统计分析前的准备
  9. 明解c语言 练习,《明解C语言》示例代码和练习代码[第8章]
  10. 罗技 logic C930c 摄像头 驱动 win7 64位 家庭中文版 无法使用
  11. 新媒体推广之标题写作的4项原则+6大元素,爆款标题一招就够了! | 黎想
  12. IE主页被https://hao.360.cn/?a1004劫持,如何解决
  13. 报错 [Error] expected primary-expression before ‘)‘ token
  14. 房贷又降,不买!还能降
  15. DrLLPS (相分离数据库): 第一个注释全面的液液相分离相关蛋白质数据库 (liquid-liquid phase separation database)
  16. 【无标题】绝对定位的特点
  17. C++贪吃蛇的简单实现版
  18. 你的微信昵称,可能正在出卖你
  19. C语言:动态内存分配
  20. 根据IP获取地理位置信息 — Golang

热门文章

  1. Activity基础学习
  2. 微信公众号开发-----实现模板、图文、文本、音乐、图片推送
  3. 英语时态:一般、否定疑问句、现表将来
  4. 微信支付2.0版本,更换参数即可使用
  5. 三星typec转接耳机没反应_typec转3.5mm转接线,你买对了吗?
  6. 75佳精美的 CSS 网页设计作品欣赏(系列一)
  7. python牛顿法求方程的根_python计算方程式根的方法 如何用python计算三元方程
  8. AndroidStudio使用之仿微信首页界面
  9. VB.net byval和byref
  10. java打印数组的连续非空子集_求一个字符串数组所有非空子集