找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 17308|回复: 39
打印 上一主题 下一主题
收起左侧

Proteus仿真stm32f103r6输出PWM/正弦波 源程序

  [复制链接]
跳转到指定楼层
楼主
资源全部原创,有任何问题欢迎联系
基于stm32f103r6的pwm输出,再经过RC低通滤波实现正弦波输出,使用protues仿真实现




仿真文件

示例代码
  1. #include "pbdata.h"

  2. u16 fre;
  3. void RCC_Configuration(void);
  4. void GPIO_Configuration(void);
  5. void TIM3_Configuration();

  6. void  Delay (uint32_t nCount)
  7. {
  8.   for(; nCount != 0; nCount--);
  9. }

  10. int main(void)
  11. {
  12.      u16 arr=42000;
  13.      u16 led_dt = arr/2;

  14.                  RCC_Configuration();        //系统时钟初始化
  15.                  GPIO_Configuration();//端口初始化
  16.                  TIM3_Configuration(arr);//定时器和pwm配置
  17.         
  18.                  while(1)
  19.                  {        
  20.                                 TIM_SetCompare2(TIM3,led_dt); //用的是TIM3的通道2,输出PWM         送到相应的寄存器中   //满占空比为900               
  21.                         

  22.                                                 GPIO_SetBits(GPIOB,GPIO_Pin_5);        //LED 发光
  23.                                                         Delay(0x2ffff);
  24.                                                 GPIO_ResetBits(GPIOB,GPIO_Pin_5);//LED 熄灭
  25.                                                         Delay(0x2ffff);
  26.                                                 
  27.                               
  28. //                                        if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)== Bit_RESET)
  29. //                                                        {
  30. //                                                                //LED 发光
  31. //                                                                GPIO_SetBits(GPIOB,GPIO_Pin_5);
  32. //                                                         }
  33. //                                        else
  34. //                                                        {
  35. //                                                                //LED 熄灭                                 
  36. //                                                                GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  37. //                                                         }
  38.                  }        
  39. }

  40. void RCC_Configuration(void)
  41. {
  42.   SystemInit();

  43.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//这个是必须的,仿真软件必须的
  44.         RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  45.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//端口复用,一定在APB2的时钟线
  46.   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  47.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  48.         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  49. }

  50. void GPIO_Configuration(void)
  51. {
  52.   GPIO_InitTypeDef GPIO_InitStructure;
  53.          
  54. //PWM
  55.         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_7;
  56.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  57.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;      //通过PWM控制,端口为复用方式输出
  58.         GPIO_Init(GPIOA,&GPIO_InitStructure);
  59.         
  60. //LED
  61.         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5;
  62.         GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  63.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;      
  64.         GPIO_Init(GPIOB,&GPIO_InitStructure);
  65.         
  66. //BUTTON
  67.         GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
  68.         GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
  69.         GPIO_Init(GPIOC,&GPIO_InitStructure);
  70. }

  71. void TIM3_Configuration(arr)
  72. {
  73.         TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
  74.         TIM_OCInitTypeDef TIM_OCInitStructure;             //PWM的结构体

  75.         GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//TIM3 复用功能部分映射,可以此找到对应的管脚
  76.         //关于部分映射可以参考“STM32参考手册”119面
  77.         //定时器初始化
  78.         
  79.         TIM_TimeBaseStruct.TIM_Period=arr;//初值
  80.         TIM_TimeBaseStruct.TIM_Prescaler=2;//预分频
  81.         //不分频,在晶振为72MHz的情况下,定时器执行到899后即会溢出,表示计数满
  82.         TIM_TimeBaseStruct.TIM_ClockDivision=0;
  83.         TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上
  84.         TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
  85.         

  86.         //pwm初始化
  87.         TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;             //使用模式1
  88.         TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能位
  89.         TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;     //设置输出极性,一定注意

  90.         
  91.         TIM_OC2Init(TIM3,&TIM_OCInitStructure);
  92.   TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);            //与装载使能,不会说执行一次后就不执行了
  93.         TIM_Cmd(TIM3,ENABLE);
  94.                  
  95. }
  96. /*PWM不是中断,所以不需要设置中断优先级 */
复制代码

Keil代码与Proteus8.8仿真下载(注意要是用Proteus8.8这个版本,其他版本可能会出现异常):
protues仿真stm32f103输出PWM.7z (241.15 KB, 下载次数: 874)

评分

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

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏20 分享淘帖 顶4 踩
回复

使用道具 举报

沙发
ID:82809 发表于 2018-12-20 10:32 | 只看该作者
我的仿真不了,死机,不知哪里没设置好。
回复

使用道具 举报

板凳
ID:101501 发表于 2018-12-21 14:11 | 只看该作者
pfdqwp 发表于 2018-12-20 10:32
我的仿真不了,死机,不知哪里没设置好。

不需要什么特殊的设置啊,是不是软件的问题,我用的protues8.6(8.6以上才支持仿真32)/win7,64位系统
回复

使用道具 举报

地板
ID:315121 发表于 2019-1-12 15:21 | 只看该作者
谢谢分享
回复

使用道具 举报

5#
ID:88852 发表于 2019-1-25 16:33 | 只看该作者
下载后学习一下
回复

使用道具 举报

6#
ID:149451 发表于 2019-1-26 10:31 | 只看该作者
可惜,还在8.4
回复

使用道具 举报

7#
ID:27027 发表于 2019-2-13 14:31 | 只看该作者
试验一下
回复

使用道具 举报

8#
ID:476823 发表于 2019-3-21 10:24 | 只看该作者
感谢分享 ^_^
回复

使用道具 举报

9#
ID:502450 发表于 2019-4-1 16:14 | 只看该作者
感谢楼主分享
回复

使用道具 举报

10#
ID:513276 发表于 2019-4-16 08:45 | 只看该作者
谢谢楼主分享。。
回复

使用道具 举报

11#
ID:88606 发表于 2019-4-16 09:25 | 只看该作者
51也能吧!
回复

使用道具 举报

12#
ID:495674 发表于 2019-5-5 15:33 | 只看该作者
下载后学习一下,谢谢分享
回复

使用道具 举报

13#
ID:71282 发表于 2019-5-6 15:23 | 只看该作者
谢谢分享,学习了。
回复

使用道具 举报

14#
ID:501336 发表于 2019-6-16 23:23 | 只看该作者
感谢分享
回复

使用道具 举报

15#
ID:140706 发表于 2019-10-15 17:36 | 只看该作者
感谢分享,非常不错,实用的资料
回复

使用道具 举报

16#
ID:25310 发表于 2019-11-26 09:13 | 只看该作者
这个不错,下载看看。谢谢楼主分享!
回复

使用道具 举报

17#
ID:16031 发表于 2020-2-14 10:59 | 只看该作者
下载,学习一下
回复

使用道具 举报

18#
ID:16031 发表于 2020-2-14 11:07 | 只看该作者
可以仿真,但是波形有点不一样
回复

使用道具 举报

19#
ID:658039 发表于 2020-3-21 08:18 | 只看该作者
我的8.8绿色板的,win7 32位,老是闪退,请问各位大侠什么回事?
回复

使用道具 举报

20#
ID:446064 发表于 2020-4-12 11:14 | 只看该作者
谢谢分享
回复

使用道具 举报

21#
ID:727681 发表于 2020-4-12 17:46 | 只看该作者
楼主大神好,我是PROTEUS萌新,请问元件库里面找不到SRM32F103R6怎么办呀
回复

使用道具 举报

22#
ID:446064 发表于 2020-4-16 15:13 | 只看该作者
不是部分重印象么,怎么是pa7输出呢
回复

使用道具 举报

23#
ID:88852 发表于 2020-4-27 21:19 | 只看该作者
好帖子,顶一下
回复

使用道具 举报

24#
ID:722585 发表于 2020-5-15 09:44 | 只看该作者
我下载之后为啥解压总出错
回复

使用道具 举报

25#
ID:196216 发表于 2020-5-15 15:26 | 只看该作者
123456789lrs 发表于 2020-4-16 15:13
不是部分重印象么,怎么是pa7输出呢

同问  应该是PB5才对啊
回复

使用道具 举报

26#
ID:483144 发表于 2020-5-21 06:16 | 只看该作者
感觉Proteus不能仿真STM32的端口重映射功能
回复

使用道具 举报

27#
ID:756647 发表于 2020-5-21 11:56 | 只看该作者
不错不错
回复

使用道具 举报

28#
ID:586324 发表于 2020-5-27 14:42 | 只看该作者
为什么用KEIL打不开程序啊
回复

使用道具 举报

29#
ID:304785 发表于 2020-6-8 22:51 | 只看该作者
stm32 的da可以仿真吗
回复

使用道具 举报

30#
ID:787246 发表于 2020-6-23 13:56 | 只看该作者
紫苏2020 发表于 2020-5-15 09:44
我下载之后为啥解压总出错

请问下载之后文件里都简介或者分析书吗
回复

使用道具 举报

31#
ID:302325 发表于 2020-6-24 11:57 | 只看该作者
51黑  有你更精彩
回复

使用道具 举报

32#
ID:792268 发表于 2020-6-30 10:03 | 只看该作者
楼主,能不能详细讲一下实现功能啊?
回复

使用道具 举报

33#
ID:873494 发表于 2021-1-5 15:10 | 只看该作者
仿真确实很有必要,可以事先看到很多结果,如果直接硬件运行,还需要各种检测工具,也是不小的开支啊
回复

使用道具 举报

34#
ID:228452 发表于 2022-4-5 04:58 | 只看该作者
Go to PWM Keil dir and copy LY-STM32.hex

Then paste LY-STM32.hex in Proteus working dir

Working OK with Proteus 8.12 sp0 and WIN10 X64
Thank you

LY-STM32.rar

6.67 KB, 下载次数: 6, 下载积分: 黑币 -5

回复

使用道具 举报

35#
ID:1013368 发表于 2022-4-14 09:09 | 只看该作者
我的不是Proteus8.8导致仿真结果不正确
回复

使用道具 举报

36#
ID:1021179 发表于 2022-4-24 11:32 | 只看该作者
换了几个版本最后用Proteus8.8才能仿真出波形,其他版本没有波形
回复

使用道具 举报

37#
ID:971289 发表于 2022-4-26 21:57 | 只看该作者
感谢分享,非常不错,实用的资料
回复

使用道具 举报

38#
ID:124010 发表于 2022-4-27 13:17 | 只看该作者
你好,请问stm32的晶振和时钟怎么设置啊
回复

使用道具 举报

39#
ID:1080910 发表于 2023-6-6 11:15 | 只看该作者
用8.15的版本仿真没有PWM波的显示
回复

使用道具 举报

40#
ID:977102 发表于 2023-7-21 12:06 | 只看该作者
不错呀,可以仿真
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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