Proteus仿真stm32f103r6输出PWM/正弦波

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

一、仿真图

Proteus仿真stm32f103r6输出PWM/正弦波

二、程序

cpp 复制代码
#include "pbdata.h"

u16 fre;
void RCC_Configuration(void);
void GPIO_Configuration(void);
void TIM3_Configuration();

void  Delay (uint32_t nCount)
{
  for(; nCount != 0; nCount--);
}

int main(void)
{
     u16 arr=42000;
     u16 led_dt = arr/2;

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

                                                GPIO_SetBits(GPIOB,GPIO_Pin_5);        //LED 发光
                                                        Delay(0x2ffff);
                                                GPIO_ResetBits(GPIOB,GPIO_Pin_5);//LED 熄灭
                                                        Delay(0x2ffff);
                                                 
                              
//                                        if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_7)== Bit_RESET)
//                                                        {
//                                                                //LED 发光
//                                                                GPIO_SetBits(GPIOB,GPIO_Pin_5);
//                                                         }
//                                        else
//                                                        {
//                                                                //LED 熄灭                                 
//                                                                GPIO_ResetBits(GPIOB,GPIO_Pin_5);
//                                                         }
                 }        
}

void RCC_Configuration(void)
{
  SystemInit();

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

void GPIO_Configuration(void)
{
  GPIO_InitTypeDef GPIO_InitStructure;
         
//PWM
        GPIO_InitStructure.GPIO_Pin= GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;      //通过PWM控制,端口为复用方式输出
        GPIO_Init(GPIOA,&GPIO_InitStructure);
        
//LED
        GPIO_InitStructure.GPIO_Pin= GPIO_Pin_5;
        GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;      
        GPIO_Init(GPIOB,&GPIO_InitStructure);
        
//BUTTON
        GPIO_InitStructure.GPIO_Pin=GPIO_Pin_7;
        GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;
        GPIO_Init(GPIOC,&GPIO_InitStructure);
}

void TIM3_Configuration(arr)
{
        TIM_TimeBaseInitTypeDef TIM_TimeBaseStruct;
        TIM_OCInitTypeDef TIM_OCInitStructure;             //PWM的结构体

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

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

        
        TIM_OC2Init(TIM3,&TIM_OCInitStructure);
  TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);            //与装载使能,不会说执行一次后就不执行了
        TIM_Cmd(TIM3,ENABLE);
                 
}
/*PWM不是中断,所以不需要设置中断优先级 */
相关推荐
zephyr_zeng3 小时前
VsCode + EIDE + OpenOCD + STM32(野火DAP) 开发环境配置
c语言·c++·vscode·stm32·单片机·嵌入式硬件·编辑器
派阿喵搞电子6 小时前
STM32的APB1和APB2的区别
stm32·单片机·嵌入式硬件
木燚垚11 小时前
基于STM32物联网水质监测系统的设计与实现/基于STM32的水产养殖云监控系统设计
stm32·单片机·嵌入式硬件·物联网·智能家居
想要成为糕手。14 小时前
stm32-RTC时实时钟
stm32·嵌入式硬件·实时音视频
Czzzzlq16 小时前
STM32基础教程——对射式红外传感器计数实验
c语言·stm32·单片机·嵌入式硬件·mcu
集大周杰伦16 小时前
ARM Cortex-M 内存映射详解:如何基于寄存器直接读写 寄存器映射方式编码程序 直接操作硬件寄存器来控制 MCU
arm开发·stm32·单片机·内存映射·arm cortex-m·地址映射·寄存器编码
最爱是生活16 小时前
STM32之软件SPI
stm32·单片机·嵌入式硬件
summer__777717 小时前
3.3.2 用仿真图实现点灯效果
单片机·proteus
触角010100011 天前
OLED屏幕开发全解析:从硬件设计到物联网显示实战 | 零基础入门STM32第五十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
傍晚冰川1 天前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习