stm32pwm简单程序

发布者:kappa20最新更新时间:2018-12-27 来源: eefocus关键字:stm32  pwm 手机看文章 扫描二维码
随时随地手机看文章

程序通俗易懂


#include

void TIM3_PWM_Init(u16 arr,u16 psc);


//1ms延时函数(72MHz)

void delay_nms(u16 time)

{

    u16 i=0;

    while(time--)

    {

        i=12000;

        while(i--);

    }

}


int main(void)

{

    u16 TIMpulse=0;

    u8 dir=1;

    //TIM3_PWM_Init(899,0);//不分频,PWM频率=72000/900=80khz

    TIM3_PWM_Init(999,61999);//1HZ,

    delay_nms(100);//观察初始化的pwm

//  TIM_SetCompare2(TIM3,200);//占空比200/999+1=20%

    while(1)

    {

        if(dir)TIMpulse++;

        else TIMpulse--;

        if(TIMpulse>999)dir=0;

        if(TIMpulse==0)dir=1;

        TIM_SetCompare2(TIM3,TIMpulse);//程序中修改占空比TIMpulse/arr

        ;

    }

}

//arr:自动装载值   psc:预分频数

//TIM3 PWM部分初始化

void TIM3_PWM_Init(u16 arr,u16 psc)

{

    GPIO_InitTypeDef GPIO_InitStructure;

    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    TIM_OCInitTypeDef TIM_OCInitStructure;


    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_AFIO,ENABLE);//开启重映射时钟


    GPIO_PinRemapConfig(GPIO_PartialRemap_TIM3,ENABLE);//重映射TIM3_CH2到PB5输出


    //GPIO设置为复用输出,输出TIM3的CH2的PWM脉冲波形GPIOB5

    GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF_PP;

    GPIO_InitStructure.GPIO_Pin=GPIO_Pin_5;

    GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;

    GPIO_Init(GPIOB,&GPIO_InitStructure);


    //初始化TIM3

    TIM_TimeBaseStructure.TIM_Period=arr;                   //设置自动重装载周期值(决定PWM的频率)

    TIM_TimeBaseStructure.TIM_Prescaler=psc;                //预分频值

    TIM_TimeBaseStructure.TIM_ClockDivision=0;              //设置时钟分割:TDTS=Tck_tim

    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;//向上计数

    TIM_TimeBaseInit(TIM3,&TIM_TimeBaseStructure);


    //初始化TIM3 Channel2 PWM模式

    TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM2;             //选择PWM模式2,计数值大于比较值有效

    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable; //比较输出使能

    TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;     //输出极性 高为有效值

    //配置占空比  500/arr重载计数器=500/999+1,,和函数TIM_SetCompare2(TIM3,TIMpulse);功能一样

    TIM_OCInitStructure.TIM_Pulse=500;

    TIM_OC2Init(TIM3,&TIM_OCInitStructure);                     //初始化外设TIM3 OC2通道

    TIM_OC2PreloadConfig(TIM3,TIM_OCPreload_Enable);            //使能预装载器即TIM3_CCR2的预装载值在更新事件到来时才能被传送至当前寄存器中


    TIM_Cmd(TIM3,ENABLE);                                       //使能TIM3

}


关键字:stm32  pwm 引用地址:stm32pwm简单程序

上一篇:stm32f1按键检测使用外部中断以及定时器延时方式去抖
下一篇:基于STM32和EV1527的无线接收解码程序

推荐阅读最新更新时间:2024-03-16 16:21

STM32在Keil MDK5环境下RAM上代码调试
步骤与图示: 1.先给个CPU的数据,需要注意的是三个红圈的地方,架构,型号,Flash和SRAM大小如图1 (STM32F107VC 256KB FLASH,64KB SRAM) 图1 2.Target的设置 1)勾上可以用微库,减小生成代码的大小 2,3)分别定义ROM区位置及大小和RAM区位置和大小。在这里需要说明的是,Cortex-M3的架构有4G的寻址空间,而Flash的起始地址在0x08000000,RAM地址在0x20000000,在这里进行了第一次相关地址的更改;如图2 0x1000为4K,这里的0xc000则为48K的ROM分配;RAM的为16K;基本上移植个uCOS-II都够用了 图2
[单片机]
<font color='red'>STM32</font>在Keil MDK5环境下RAM上代码调试
stm32按键 长按 短按 函数
在stm32工程中,长按和短按的代码书写, 调用的读取按键状态的底层函数。封装成的按键函数代码。下面是函数的头文件,和.c文件的代码。使用定时器来扫描按键。 #define KEY_ON 1 #define KEY_OFF 0 #define KEY_NULL 0 #define KEY_SHORT 1 #define KEY_LONG 10 #define SHORT_TIME 200 uint8_t Key_state(GPIO_TypeDef* GPIOx,uint16_t GPIO_Pin) { static uint8_t key_value = KEY_NULL; static uint16_t longtim
[单片机]
机器人教程1:如何利用51单片机输出PWM
1、理论知识 PWM这个功能在飞思卡尔、STM32等高档的单片机内部有专用的模块,用此类芯片实现PWM功能时只需要通过设置相应的寄存器就可实现周期和占空比的控制。但是如果要用51单片机的话,也是可以的,但是比较的麻烦。此时需要用到内部定时器来实现,可用两个定时器实现,也可以用一个定时器实现。 用两个定时器的方法是用定时器T0来控制频率,定时器T1来控制占空比。大致的的编程思路是这样的:T0定时器中断让一个I0口输出高电平,在这个定时器T0的中断当中起动定时器T1,而这个T1是让IO口输出低电平,这样改变定时器T0的初值就可以改变频率,改变定时器T1的初值就可以改变占空比。 下面重点介绍用一个定时器的实现PWM的方法。因为
[单片机]
基于STM32设计的拼图小游戏详解
一、环境介绍 MCU:STM32F103ZET6 编程软件环境:keil5 LCD显示屏:正点原子的TFT 3.5寸显示屏 二、运行效果 三、功能介绍 因为代码原来是在2.8寸屏上设计的,但是2.8寸屏摔碎了,现在手上只有块3.5寸的LCD屏。就把代码移植到3.5寸屏上显示了,目前运行的效果可以看上面的效果图。 拼图游戏在小时候还是经常玩,玩法也比较简单,这里就使用STM32设计一个拼图小游戏分享出来一起学习。 目前游戏是通过开发板上4按键进行控制图片的移动,完成最终的拼图效果,如果想要在上面扩充其他游戏功能都还是比较容易。 当然,设计编写这个款小游戏不仅仅是为了玩游戏这么简单,主要是为了通过设计游戏
[单片机]
基于<font color='red'>STM32</font>设计的拼图小游戏详解
STM32 JTAG失效恢复
昨天调试一块STM32L151的板子,用的是JlinkOB,调试时,出现下面的错误: JLink Error:could not start CPU core. JLink Warning:CPU could not be halted 这个错误出现的原因是,程序中有修改JTAG端口(PA13,PA14)的语句,当把JTAG当做普通IO口时,JLink就不能返回调试信息,JLink就读不回相应寄存器的值了。 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO, ENABLE); GPIO_PinRemapConfig(GPIO_Remap_S
[单片机]
stm32 RTC实时时钟[操作寄存器+库函数]
RTC 是Real Time Clock 的简称,意为实时时钟。stm32提供了一个秒中断源和一个闹钟中断源。 RTC的技术器是一个32位的计数器,使用32.768khz的外部晶振。 2038年问题  在计算机应用上,2038年问题可能会导致某些软件在2038年无法正常工作。所有使用UNIX时间表示时间的程序都将受其影响,因为它们以自1970年1月1日经过的秒数(忽略闰秒)来表示时间。这种时间表示法在类Unix(Unix-like)操作系统上是一个标准,并会影响以其C编程语言开发给其他大部份操作系统使用的软件。 在大部份的32位操作系统上,此“time_t”数据模式使用一个有正负号的32位元整数(signedint
[单片机]
stm8s103单片机输出PWM波程序
void Timer2_Init(void) { CLK_ICKR|=0x01; while(!(CLK_ICKR&0x02)); CLK_SWR=0xe1; TIM2_PSCR=0x04; TIM2_ARRH=0x01; TIM2_ARRL=0x00; TIM2_CCER1_CC1P=1; TIM2_CCER1_CC1E=1; TIM2_CCMR1_OC1M=0x60; TIM2_CCMR1_CC1S=0; TIM2_CCR1H=0x00; TIM2_CCR1L=0x20; TIM2_IER=0x00; TIM
[单片机]
STM32单片机FSMC模块的应用
一、基本概念 1.与非总线复用的16位SRAM接口 FSMC配置 SRAM存储器和NOR闪存存储器共用相同的FSMC存储块,所用的协议依不同的存储器类型而有所不同。 控制SRAM存储器,FSMC应该具有下述功能: 使用或禁止地址/数据总线的复用功能。 选择所用的存储器类型:NOR闪存、SRAM或PSRAM。 定义外部存储器的数据总线宽度:8或16位。 使用或关闭扩展模式:扩展模式用于访问那些具有不同读写操作时序的存储器。 正如配置NOR闪存存储器一样,用户必须按照SRAM存储器的数据手册给出的时序数据,计算和设置下列参数: ADDSET:地址建立时间 ADDHOLD:地址保持时间 DATAST:数据建立时间 二、例程 1.
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved