引言:

本文利用STM32F4设计制作了一个双路低频信号发生器。
能够完成以下功能:
(1) 两路信号发生器可选择输出正弦波、方波,频率连续可调,范围为 1kHz 到 10kHz,每路信号的波形及频率可单独设置。
(2) 输出正弦信号的电压峰峰值 VPP 范围为 0.1~5V 且两路信号幅度可单独设置。
(3) 具有显示输出信号波形和相应参数(幅度、频率等)的功能.。
(4) 输出的两路方波信号占空比 10%到 90%单独可调。

完整代码请参考:https://github.com/PPPerry/Dual-low-frequency-signal-generator

1.硬件模块

电源采用 5V 实验电源供电
独立按键按键输入
TFTLCD电容触摸屏触摸输入
STM32F407探索者开发板

2.软件模块

顶层代码:

#include "sys.h"
#include "dac.h"
#include "lcd.h"
#include "pwm.h"
#include "delay.h"
#include "usart.h"
#include "touch.h"
#include "key.h"int main(void)
{double sinf1=6.58,sinf2=6.58,sinv1=1.52,sinv2=1.52,pwmf1=5.00,pwmf2=5.00,pwmr1=50,pwmr2=50;u8 choice1=0,choice2=0;u32 position=0;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);      //初始化延时函数uart_init(115200);     //初始化串口波特率为115200LCD_Init();                    LCD_BackInit();    //LCD初始化KEY_Init();tp_dev.init();                //触摸屏初始化sin_Generation1(0.5);sin_Generation2(0.5,0);GPIO_Configuration();TIM6_Configuration();TIM7_Configuration();DAC_DMA_Configuration1();   DAC_DMA_Configuration2(); TIM14_PWM_Init(200-1,84-1,100); //84 TIM10_PWM_Init(200-1,168-1,100); //168MHzwhile(1){        if(IfTouch(25,25,200,200))//1 PA4{choice1=1; RedDot(1);POINT_COLOR=BLUE;LCD_ShowDouble(280,50,sinf1,1);LCD_ShowDouble(300,50+88,sinv1,2);TIM_Cmd(TIM14, DISABLE);DAC_DMACmd(DAC_Channel_1, ENABLE);} if(IfTouch(25,25+175,200,200+175))//2 PF9{choice1=2;RedDot(2);POINT_COLOR=BLUE;LCD_ShowDouble(280,50+175,pwmf1,1);LCD_ShowDouble(325,50+88+175,pwmr1,3);DAC_DMACmd(DAC_Channel_1, DISABLE);TIM_Cmd(TIM14, ENABLE);  //使能TIM14}if(IfTouch(25,25+400,200,200+400))//3 PA5{choice2=1;RedDot(3);POINT_COLOR=BLUE;LCD_ShowDouble(280,50+400,sinf2,1);LCD_ShowDouble(300,50+88+400,sinv2,2);TIM_Cmd(TIM10, DISABLE);DAC_DMACmd(DAC_Channel_2, ENABLE);}if(IfTouch(25,25+175+400,200,200+400+175))//4 PF6{choice2=2;RedDot(4);POINT_COLOR=BLUE;LCD_ShowDouble(280,50+175+400,pwmf2,1);LCD_ShowDouble(325,50+88+175+400,pwmr2,3);DAC_DMACmd(DAC_Channel_2, DISABLE);TIM_Cmd(TIM10, ENABLE);  //使能TIM10}if(choice1==1){while(IfTouch(259-44,47,259,47+44)||IfTouch(396,47,396+44,47+44)){if(IfTouch(259-44,47,259,47+44)){if(sinf1<=1)break;sinf1-=0.01;}if(IfTouch(396,47,396+44,47+44)){if(sinf1>=10)break;sinf1+=0.01;}delay_ms(20);TIM_Cmd(TIM6, DISABLE);TIM_SetAutoreload(TIM6, (u32)(328.125/sinf1)-1);TIM_Cmd(TIM6, ENABLE);LCD_ShowDouble(280,50,sinf1,1);}while(IfTouch(259-44,47+88,259,47+44+88)||IfTouch(396,47+88,396+44,47+44+88)){if(IfTouch(259-44,47+88,259,47+44+88)){if(sinv1<=0.1)break;sinv1-=0.01;}if(IfTouch(396,47+88,396+44,47+44+88)){if(sinv1>=3.3)break;sinv1+=0.01;}delay_ms(20);DMA_Cmd(DMA1_Stream5, DISABLE);sin_Generation1(sinv1/3.3);DMA_Cmd(DMA1_Stream5, ENABLE);LCD_ShowDouble(300,50+88,sinv1,2);}}else if(choice1==2){while(IfTouch(259-44,47+175,259,47+44+175)||IfTouch(396,47+175,396+44,47+44+175)){if(IfTouch(259-44,47+175,259,47+44+175)){if(pwmf1<=1)break;pwmf1-=0.01;}if(IfTouch(396,47+175,396+44,47+44+175)){if(pwmf1>=10)break;pwmf1+=0.01;}delay_ms(20);TIM_Cmd(TIM14, DISABLE);TIM_SetAutoreload(TIM14,1000/pwmf1-1);TIM_SetCompare1(TIM14,(u32)(10*pwmr1/pwmf1));TIM_Cmd(TIM14, ENABLE);LCD_ShowDouble(280,50+175,pwmf1,1);}while(IfTouch(259-44,47+88+175,259,47+44+88+175)||IfTouch(396,47+88+175,396+44,47+44+88+175)){if(IfTouch(396,47+88+175,396+44,47+44+88+175)){if(pwmr1<=10)break;pwmr1-=1;}if(IfTouch(259-44,47+88+175,259,47+44+88+175)){if(pwmr1>=90)break;pwmr1+=1;}delay_ms(20);TIM_Cmd(TIM14, DISABLE);TIM_SetCompare1(TIM14,(u32)(10*pwmr1/pwmf1));TIM_Cmd(TIM14, ENABLE);LCD_ShowDouble(325,50+88+175,100-pwmr1,3);}}if(choice2==1){while(IfTouch(259-44,47+400,259,47+44+400)||IfTouch(396,47+400,396+44,47+44+400)){if(IfTouch(259-44,47+400,259,47+44+400)){if(sinf2<=1)break;sinf2-=0.01;}if(IfTouch(396,47+400,396+44,47+44+400)){if(sinf2>=10)break;sinf2+=0.01;}delay_ms(20);TIM_Cmd(TIM7, DISABLE);TIM_SetAutoreload(TIM6, (u32)(328.125/sinf2)-1);TIM_Cmd(TIM7, ENABLE);LCD_ShowDouble(280,50+400,sinf2,1);}while(IfTouch(259-44,47+88+400,259,47+44+88+400)||IfTouch(396,47+88+400,396+44,47+44+88+400)){if(IfTouch(259-44,47+88+400,259,47+44+88+400)){if(sinv2<=0.1)break;sinv2-=0.01;}if(IfTouch(396,47+88+400,396+44,47+44+88+400)){if(sinv2>=3.3)break;sinv2+=0.01;}delay_ms(20);DMA_Cmd(DMA1_Stream6, DISABLE);sin_Generation2(sinv2/3.3,position);DMA_Cmd(DMA1_Stream6, ENABLE);LCD_ShowDouble(300,50+88+400,sinv2,2);}}else if(choice2==2){while(IfTouch(259-44,47+175+400,259,47+44+175+400)||IfTouch(396,47+175+400,396+44,47+44+175+400)){if(IfTouch(259-44,47+175+400,259,47+44+175+400)){if(pwmf2<=1)break;pwmf2-=0.01;}if(IfTouch(396,47+175+400,396+44,47+44+175+400)){if(pwmf2>=10)break;pwmf2+=0.01;}delay_ms(20);TIM_Cmd(TIM10, DISABLE);TIM_SetAutoreload(TIM10,1000/pwmf2-1);TIM_SetCompare1(TIM10,(u32)(10*pwmr2/pwmf2));TIM_Cmd(TIM10, ENABLE);LCD_ShowDouble(280,50+175+400,pwmf2,1);}while(IfTouch(259-44,47+88+175+400,259,47+44+88+175+400)||IfTouch(396,47+88+175+400,396+44,47+44+88+175+400)){if(IfTouch(396,47+88+175+400,396+44,47+44+88+175+400)){if(pwmr2<=10)break;pwmr2-=1;}if(IfTouch(259-44,47+88+175+400,259,47+44+88+175+400)){if(pwmr2>=90)break;pwmr2+=1;}delay_ms(20);TIM_Cmd(TIM10, DISABLE);TIM_SetCompare1(TIM10,(u32)(10*pwmr2/pwmf2));TIM_Cmd(TIM10, ENABLE);LCD_ShowDouble(325,50+88+175+400,100-pwmr2,3);}}delay_ms(100);if(KEY_Scan()){while(KEY_Scan()==1)position++;while(KEY_Scan()==3)position--;DMA_Cmd(DMA1_Stream6, DISABLE);sin_Generation2(sinv2/3.3,position);DMA_Cmd(DMA1_Stream6, ENABLE);}}
}

3.说明

本题出自 电子科技大学 2019/3 信通科协院队第一次训练题

基于STM32F4的双路低频信号发生器相关推荐

  1. 基于FPGA的双路低频信号发生器设计

    基于FPGA的双路低频信号发生器设计 系统结构框 本设计是以Altera公司的可编程芯片做载体,运用Verilog作为软件设计工具,从而实现DDS原理,即信号发生器的核心思想.再加上信号发生器的硬件电 ...

  2. PCIe数据卡设计资料第611篇:基于VU9P的双路5Gsps AD 双路6Gsps DA PCIe数据卡

    基于VU9P的双路5Gsps AD 双路6Gsps DA PCIe数据卡 一.板卡概述 基于XCVU9P的5Gsps AD DA收发PCIe板卡.该板卡要求符合PCIe 3.0标准,包含一片XCVU9 ...

  3. KU5P加速计算卡设计资料第389篇:基于KU5P的双路100G光纤网络加速计算卡

    基于KU5P的双路100G光纤网络加速计算卡 一.板卡概述 基于Xilinx UltraScale+16 nm KU5P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express ...

  4. VU33P加速计算卡设计资料第613篇:基于VU33P的双路100G光纤网络加速计算卡

    基于VU33P的双路100G光纤网络加速计算卡 基于Xilinx UltraScale+16 nm VU33P芯片方案基础上研发的一款双口100 G FPGA光纤以太网PCI-Express v3.0 ...

  5. 大功率双伺服电机驱动板,包含原理图,PCB和原代码,基于STM32F4方案,支持霍尔,编码器,无感

    大功率双伺服电机驱动板,包含原理图,PCB和原代码,基于STM32F4方案,支持霍尔,编码器,无感. 需要有一定的基础,无基勿扰. :9450639029711075枫叶蓝.

  6. 295-光纤数据收发 隔离卡 加速计算卡 基于 Kintex-7 XC7K325T的半高PCIe x4双路万兆光纤收发卡

    基于 Kintex-7 XC7K325T的半高PCIe x4双路万兆光纤收发卡 一.板卡概述 板卡采用Xilinx公司的XC7K325T-2FFG900I芯片作为主处理器,可应用于万兆网络.高速数据采 ...

  7. 基于kintex UltraScale XCKU040的双路QSFP+光纤PCIe卡383 光纤PCIe卡

    基于kintex UltraScale XCKU040的双路QSFP+光纤PCIe 卡 一.板卡概述 本板卡系我司自主研发,基于Xilinx UltraScale Kintex系列FPGA  XCKU ...

  8. 基于单片机双路温度检测报警系统设计-基于单片机声光控智能开关控制灯设计-基于单片机热电偶智能体温检测设计-基于单片机小型家用燃气锅炉控制系统设计-基于单片机一氧化碳有毒气体采集报警系统设计

    1628基于单片机双路温度检测报警系统设计(串口上位机控制) 基于pcf8591 tlc2543的双路温度检测报警系统 带串口上位机控制带仿真 源程序 温度传感器是 LM35 两路测温通道所用的ad芯 ...

  9. 基于51单片机低频信号发生器

    具体实现功能 系统由STC89C51/52+DAC0832模块+指示及按键模块+LM358模块+LCD1602显示模块+电源模块构成. 1.LCD1602显示波形种类和频率值(频率范围10-100HZ ...

最新文章

  1. extjs4.0视频教程下载
  2. layui tab选项卡外部html页面,layui的Tab选项卡知识
  3. JavaScript实现Linear search线性搜索算法(附完整源码)
  4. 开发中为什么使用线程池的原因
  5. java接口开发规范,干货满满
  6. jdk1.8新特性之lambda表达式及在Android Studio中的使用举例
  7. HTML+CSS制作彩色波动
  8. 财务人员工资那么低,财务工作真的有价值吗?
  9. 解决ADB启动问题(Failed to initialize Monitor Thread: Unable to establish loopback connection)
  10. 2020-08-22 OpenWRT 脚本修改网卡MAC
  11. CCNA 中文教材 (pdf)
  12. Java多线程系列--【JUC集合07】- ArrayBlockingQueue
  13. 计算机硬盘数据清零,彻底清除Windows电脑磁盘数据
  14. JavaScript replace 强行保留后三位小数点
  15. 阿里云设置密钥对登录服务器
  16. html5四季特点,美国一年四季天气特点介绍
  17. JS调用摄像头、实时视频流上传(一次不成功的试验)
  18. spring cloud NetFlix 学习笔记
  19. 学习记录664@项目管理之项目进度管理
  20. 遗传算法介绍(内含实例)

热门文章

  1. 【PaddlePaddle+OpenVINO】打造一个会发声的电表检测识别器
  2. ING银行推出区块链隐私零知识技术
  3. 前端如何开始深度学习,那不妨试试JAX
  4. 如果让我重新读次研究生—王泛森
  5. 如何使用 IDEA 打 jar 包
  6. 倾角传感器在倾斜稳定性测量中的应用
  7. 详解 WebRTC 协议原理与框架、WebRTC编程问题迎刃而解
  8. 【分享】集简云小程序识别身份证同步到表单流程搭建示例
  9. matlab三相系统电阻折算,三相不控整流器输入LC滤波器的研究
  10. 企业网站建设常识及常见错误