找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8554|回复: 21
收起左侧

基于STM32的四种波形发生器设计和Proteus仿真

  [复制链接]
ID:661402 发表于 2020-7-17 01:01 | 显示全部楼层 |阅读模式
(1) 可以实现四种波形:正弦波、方波、三角波、锯齿波;
(2) 通过按键进行选择,频率可以调整;
(3) LCD液晶显示;
(4)设计出来之后用Proteus软件仿真出效果;

主要硬件设备:STM32F103单片机、DAC0832数模转换芯片、矩阵键盘、LCD12864液晶屏幕。

效果图
1.png
正弦波

2.png
方波

3.png
三角波

4.png
锯齿波

单片机源程序如下:
  1. #include "stm32f10x.h"
  2. #include "sys.h"
  3. #include "delay.h"
  4. #include "12864.h"
  5. #include "key4_4.h"
  6. #include "timer.h"

  7. //LYF

  8. #define KEY0  GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_10)                //读取按键0

  9. void Delay_Ms(u16 time);

  10. /***************  配置Switch用到的I/O口 *******************/
  11. void Init_GPIO_Switch(void)       
  12. {
  13.         GPIO_InitTypeDef GPIO_InitStructure;
  14.        
  15.         GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE);//关闭jtag,使能SWD,可以用SWD模式调试
  16.        
  17.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);        // 使能PC端口时钟
  18.         GPIO_InitStructure.GPIO_Pin  = GPIO_Pin_10;                                //PC0
  19.         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                //IO口速度为50MHz
  20.         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;         //设置成输入
  21.         GPIO_Init(GPIOB, &GPIO_InitStructure);                                        //初始化PC0
  22. }

  23. /* Private functions ---------------------------------------------------------*/
  24. /*******************************************************************************
  25. *功能名称:main
  26. *描述:主程序。
  27. *输入:无
  28. *输出:无
  29. *返回:无
  30. *******************************************************************************/
  31. int main(void)
  32. {
  33.         u8 i=0;
  34.         RCC_ClocksTypeDef RCC_Clocks;                //初始化程序
  35.        
  36.         RCC_Configuration(RCC_PLLMul_4);        //8M*4 == 32M
  37.         RCC_GetClocksFreq(&RCC_Clocks);                //获取片上时钟
  38.        
  39.     Init_12864();                                               //初始化12864液晶
  40.        
  41.         Key_Init();                                 
  42.         Init_GPIO_Switch();
  43.         Init_GPIO_DAC0832();
  44.        
  45.         Data0=25;
  46.         TIM3_Int_Init(50+Data0,320);        //频率:32000000/ 320 ==100 000        /100 == 1000 /50==20
  47.        
  48.         LCD_P6x8Str(3,16,"   Sine Wave   ");
  49.         LCD_P6x8Str(7,6*2,"Frequency: 15 Hz");
  50.        
  51.           while (1)
  52.           {
  53.                 if(KEY0)
  54.                 {
  55.                         if(i!=2)
  56.                         {
  57.                                 __set_PRIMASK(1);
  58.                                 GPIO_ResetBits(GPIOB, ((uint16_t)0xC000));
  59.                         }
  60.                         Key_Test();       
  61.                        
  62.                         i=2;
  63.                 }
  64.                 else{
  65.                        
  66.                         if(i!=5)
  67.                         {
  68.                                 TIM3_Int_Init(50+Data0,320);
  69.                                 __set_PRIMASK(0);                                  //使能TIMx外设
  70.                                 GPIO_ResetBits(GPIOB, ((uint16_t)0xC000));
  71.                         }
  72.                        
  73.                         i=5;
  74.                 }       
  75.           }
  76. }

  77. //LYF
复制代码

全部资料51hei下载地址:
波形发生器.7z (2.29 MB, 下载次数: 485)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:328014 发表于 2020-7-21 01:38 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:751623 发表于 2020-7-26 19:46 | 显示全部楼层
请问一下为什么仿真里报一万个警告,显示总线错误
回复

使用道具 举报

ID:661402 发表于 2020-8-9 21:36 | 显示全部楼层
烤鱼c 发表于 2020-7-26 19:46
请问一下为什么仿真里报一万个警告,显示总线错误

重新装载一下hex文件,还不行就根据提升配置一下供电网
回复

使用道具 举报

ID:850214 发表于 2021-1-30 19:51 | 显示全部楼层
你好请问一下,仿真过程中如何更换显示的波形啊,按键按了都没有反应呢
回复

使用道具 举报

ID:851922 发表于 2021-2-1 16:48 | 显示全部楼层
拔胡萝贝 发表于 2021-1-30 19:51
你好请问一下,仿真过程中如何更换显示的波形啊,按键按了都没有反应呢

我也想知道 怎么切换波形
回复

使用道具 举报

ID:851922 发表于 2021-2-1 16:49 | 显示全部楼层
请问这个如何切换波形   按了按键没有反应
回复

使用道具 举报

ID:381245 发表于 2021-3-7 14:09 | 显示全部楼层
下载下来学习学习!!谢谢分享!!
回复

使用道具 举报

ID:899971 发表于 2021-4-20 15:24 来自手机 | 显示全部楼层
感觉方波有一点畸形 这怎么解决
回复

使用道具 举报

ID:661402 发表于 2021-5-29 11:10 | 显示全部楼层
袁木子爱学习 发表于 2021-2-1 16:49
请问这个如何切换波形   按了按键没有反应

先把开关打开关闭波形输出,(不然电脑带不动)在按A,B,C,D切换
回复

使用道具 举报

ID:661402 发表于 2021-5-29 11:11 | 显示全部楼层
neomuzoahea 发表于 2021-4-20 15:24
感觉方波有一点畸形 这怎么解决

把方波输出电压调低一点点就可以
回复

使用道具 举报

ID:936992 发表于 2021-6-13 11:19 | 显示全部楼层
矩阵按键中0-9有什么用呢,急急急求解!
回复

使用道具 举报

ID:936992 发表于 2021-6-13 12:18 来自手机 | 显示全部楼层
那个按键0-9怎么使用,非常着急,求解
回复

使用道具 举报

ID:936992 发表于 2021-6-15 15:18 来自手机 | 显示全部楼层
neomuzoahea 发表于 2021-4-20 15:24
感觉方波有一点畸形 这怎么解决

请问矩阵按键中0-9有什么用呢
回复

使用道具 举报

ID:936992 发表于 2021-6-15 15:19 来自手机 | 显示全部楼层
YF12 发表于 2020-8-9 21:36
重新装载一下hex文件,还不行就根据提升配置一下供电网

请问矩阵按键中0-9有什么用呢,如何使用,急急急求解
回复

使用道具 举报

ID:661402 发表于 2021-6-27 21:34 | 显示全部楼层
RDH 发表于 2021-6-15 15:19
请问矩阵按键中0-9有什么用呢,如何使用,急急急求解

测试用的
回复

使用道具 举报

ID:947230 发表于 2021-6-30 14:52 | 显示全部楼层
感觉有点复杂
回复

使用道具 举报

ID:822308 发表于 2021-8-9 13:28 | 显示全部楼层
怎么调高输出频率呀,有没有大神能讲讲
回复

使用道具 举报

ID:661402 发表于 2021-8-13 11:19 | 显示全部楼层
2464079027 发表于 2021-8-9 13:28
怎么调高输出频率呀,有没有大神能讲讲

关闭开关(关闭波形),#键+,*键-,要改频率上限到key4_4.c和Timer.c文件上该
回复

使用道具 举报

ID:661402 发表于 2021-8-13 14:02 | 显示全部楼层
YF12 发表于 2021-8-13 11:19
关闭开关(关闭波形),#键+,*键-,要改频率上限到key4_4.c和Timer.c文件上该

main函数73行:TIM3_Int_Init(50+Data0,320/2);
sine_wave函数:double x=(double)location/25*PI;//把0-100放缩到0-2派
TIM3_IRQHandler中断函数:case W_SINE:sine_wave((u8)(time*freq/50)%50);break;//计算出波的位置

3个地方改一下就可以,要波形好看,频率高就把TIM3中断关掉,里面的程序放到mian里面的死循环里面就可以,注意电脑性能可以跟得上
回复

使用道具 举报

ID:1023206 发表于 2022-5-9 10:24 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:1023206 发表于 2022-5-9 12:33 | 显示全部楼层
矩阵按键中0-9有什么用呢,急急急求解!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表