当前位置:   article > 正文

Proteus仿真stm32f103r6输出PWM/正弦波_stm32输出正弦波 proteus

stm32输出正弦波 proteus

资料下载地址:Proteus仿真stm32f103r6输出PWM/正弦波

一、仿真图

Proteus仿真stm32f103r6输出PWM/正弦波

 

二、程序 

  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. while(1)
  18. {
  19. TIM_SetCompare2(TIM3,led_dt); //用的是TIM3的通道2,输出PWM 送到相应的寄存器中 //满占空比为900
  20. GPIO_SetBits(GPIOB,GPIO_Pin_5); //LED 发光
  21. Delay(0x2ffff);
  22. GPIO_ResetBits(GPIOB,GPIO_Pin_5);//LED 熄灭
  23. Delay(0x2ffff);
  24. // if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)== Bit_RESET)
  25. // {
  26. // //LED 发光
  27. // GPIO_SetBits(GPIOB,GPIO_Pin_5);
  28. // }
  29. // else
  30. // {
  31. // //LED 熄灭
  32. // GPIO_ResetBits(GPIOB,GPIO_Pin_5);
  33. // }
  34. }
  35. }
  36. void RCC_Configuration(void)
  37. {
  38. SystemInit();
  39. RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);//这个是必须的,仿真软件必须的
  40. RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
  41. RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);//端口复用,一定在APB2的时钟线
  42. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
  43. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
  44. RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
  45. }
  46. void GPIO_Configuration(void)
  47. {
  48. GPIO_InitTypeDef GPIO_InitStructure;
  49. //PWM
  50. GPIO_InitStructure.GPIO_Pin= GPIO_Pin_7;
  51. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  52. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP; //通过PWM控制,端口为复用方式输出
  53. GPIO_Init(GPIOA,&GPIO_InitStructure);
  54. //LED
  55. GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5;
  56. GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  57. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;
  58. GPIO_Init(GPIOB,&GPIO_InitStructure);
  59. //BUTTON
  60. GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
  61. GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
  62. GPIO_Init(GPIOC,&GPIO_InitStructure);
  63. }
  64. void TIM3_Configuration(arr)
  65. {
  66. TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
  67. TIM_OCInitTypeDef TIM_OCInitStructure; //PWM的结构体
  68. GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//TIM3 复用功能部分映射,可以此找到对应的管脚
  69. //关于部分映射可以参考“STM32参考手册”119面
  70. //定时器初始化
  71. TIM_TimeBaseStruct.TIM_Period=arr;//初值
  72. TIM_TimeBaseStruct.TIM_Prescaler=2;//预分频
  73. //不分频,在晶振为72MHz的情况下,定时器执行到899后即会溢出,表示计数满
  74. TIM_TimeBaseStruct.TIM_ClockDivision=0;
  75. TIM_TimeBaseStruct.TIM_CounterMode=TIM_CounterMode_Up;//向上
  76. TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStruct);
  77. //pwm初始化
  78. TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1; //使用模式1
  79. TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //使能位
  80. TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High; //设置输出极性,一定注意
  81. TIM_OC2Init(TIM3,&TIM_OCInitStructure);
  82. TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable); //与装载使能,不会说执行一次后就不执行了
  83. TIM_Cmd(TIM3,ENABLE);
  84. }
  85. /*PWM不是中断,所以不需要设置中断优先级 */

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/683730
推荐阅读
相关标签
  

闽ICP备14008679号