完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
前言
由于最近工作需要利用示波器检测出想要的波形,所以突发奇想能不能利用示波器显示出爱心波形。 经查资料得出,示波器不仅能显示爱心波形,还能唱歌跳舞(B站搜索关键词示波器 + Bad Apple)。 下面介绍其中一种方法,利用STM32的DAC数模转换功能显示出爱心波形。 一、DAC介绍 数字/模拟转换模块(DAC)是12位数字输入,电压输出的数字/模拟转换器。 DAC可以配置为8位或12位模式,也可以与DMA控制器配合使用。典型的数字模拟转换器将表示一定比例电压值的数字信号转换为模拟信号。具体可参考《STM32中文参考手册V10》-第12章 数字模拟转换DAC。 二、配置流程 废话不多说,直接贴代码。 dac.c代码如下(示例): #include "dac.h" void Dac1_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; DAC_InitTypeDef DAC_InitStructure; /*使能时钟*/ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_DAC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;//模拟输入 GPIO_Init(GPIOA,&GPIO_InitStructure); DAC_InitStructure.DAC_Trigger= DAC_Trigger_None; //不使用触发功能 DAC_InitStructure.DAC_WaveGeneration=DAC_WaveGeneration_None;//不使用波形发生 DAC_InitStructure.DAC_LFSRUnmask_TriangleAmplitude=DAC_LFSRUnmask_Bit0; DAC_InitStructure.DAC_OutputBuffer=DAC_OutputBuffer_Disable ;//关DAC1输出缓存 DAC_Init(DAC_Channel_1,&DAC_InitStructure); //初始化 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 = temp * 4096 / 3.3; DAC_SetChannel1Data(DAC_Align_12b_R,temp);//12位右对齐设置DAC值 } dac.h代码如下(示例): #ifndef _DAC_H_ #define _DAC_H_ #include "stm32f10x.h" void Dac1_Init(void); void Dac1_Set_Vol(u16 vol); #endif main.c代码如下(示例): #include "math.h" #include "dac.h" #include "delay.h" int main() { u8 t = 0; double Fx1,Fx2,Fx3,Fx4,x = 1.8165; Dac1_Init(); Delay_Init(); while(1) { Fx1 = pow(x,0.6666); Fx2 = sqrt(3.3 - pow(x,2)); Fx3 = sin(31.41592 * x); Fx4 = (Fx1 + 0.9 * Fx2 * Fx3) * 900; Dac1_Set_Vol(Fx4 + 1100);//DAC输出函数 if(t == 0) { x = x - 0.001; } else { x = x + 0.001; } if(x <= 0) t = 1; if(x == 1.8165) { t = 0; delay_ms(1000); } } } 三、最终效果 示波器展示: 总结 当示波器开始显示爱心,接下来是不是该让示波器跳bad apple了呢!? 爱心函数参考于B站UP主:不忘初心MCU。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1810 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1631 浏览 1 评论
1098 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
737 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1687 浏览 2 评论
1945浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
750浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
584浏览 3评论
604浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
568浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-29 12:40 , Processed in 0.840846 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (威廉希尔官方网站 图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号